diff --git a/integration/test_format.py b/integration/test_format.py index 6b1fc7709..61e614182 100755 --- a/integration/test_format.py +++ b/integration/test_format.py @@ -25,7 +25,7 @@ def test(format_type, hurl_file): cmd = ["hurlfmt", "--format", format_type, hurl_file] print(" ".join(cmd)) result = subprocess.run(cmd, stdout=subprocess.PIPE) - expected = open(output_file, encoding="utf-8").read().strip() + expected = open(output_file, encoding="utf-8").read() actual = decode_string(result.stdout) if actual != expected: print(f">>> error in stdout for {format_type}") diff --git a/integration/test_html_output.py b/integration/test_html_output.py index 1c052d97f..0cbe3c33c 100755 --- a/integration/test_html_output.py +++ b/integration/test_html_output.py @@ -16,7 +16,7 @@ def test(html_file): expected = codecs.open( hurl_file, encoding="utf-8-sig" ).read() # Input file can be saved with a BOM - if actual != expected: + if actual.strip() != expected.strip(): print(">>> error in html file") print(f"actual: <{actual}>\nexpected: <{expected}>") sys.exit(1) diff --git a/integration/tests_error_lint/spaces.hurl b/integration/tests_error_lint/spaces.hurl index 0b6ffadb5..3f13d02d3 100644 --- a/integration/tests_error_lint/spaces.hurl +++ b/integration/tests_error_lint/spaces.hurl @@ -1 +1 @@ -GET http://localhost:8000/hello \ No newline at end of file +GET http://localhost:8000/hello diff --git a/integration/tests_failed/assert_base64.html b/integration/tests_failed/assert_base64.html index fbb4e745e..6bc760763 100644 --- a/integration/tests_failed/assert_base64.html +++ b/integration/tests_failed/assert_base64.html @@ -11,4 +11,4 @@ HTTP/1.0 200 base64,bGluZTEKbGluZTIKbGluZTMK; - \ No newline at end of file + diff --git a/integration/tests_failed/assert_base64.json b/integration/tests_failed/assert_base64.json new file mode 100644 index 000000000..2dfc90174 --- /dev/null +++ b/integration/tests_failed/assert_base64.json @@ -0,0 +1 @@ +{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-base64"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"bGluZTEKbGluZTIKbGluZTMK"}}}]} diff --git a/integration/tests_failed/assert_bytearray.html b/integration/tests_failed/assert_bytearray.html index 109ecd307..08fd0c000 100644 --- a/integration/tests_failed/assert_bytearray.html +++ b/integration/tests_failed/assert_bytearray.html @@ -3,4 +3,4 @@ [Asserts] bytes equals hex,00; sha256 equals hex,a8100ae6aa1940d0b663bb31cd466142ebbdbd5187131b92d93818987832eb88; - \ No newline at end of file + diff --git a/integration/tests_failed/assert_bytearray.json b/integration/tests_failed/assert_bytearray.json new file mode 100644 index 000000000..7dd5dc74a --- /dev/null +++ b/integration/tests_failed/assert_bytearray.json @@ -0,0 +1 @@ +{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert-bytearray"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"bytes"},"predicate":{"type":"equal","value":"AA==","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"qBAK5qoZQNC2Y7sxzUZhQuu9vVGHExuS2TgYmHgy64g=","encoding":"base64"}}]}}]} diff --git a/integration/tests_failed/assert_content_encoding.html b/integration/tests_failed/assert_content_encoding.html index 59cccc8cf..e9609bfb2 100644 --- a/integration/tests_failed/assert_content_encoding.html +++ b/integration/tests_failed/assert_content_encoding.html @@ -2,4 +2,4 @@ GET http://localhost:8000/error/content-encoding HTTP/1.0 200 ```Hello World!``` - \ No newline at end of file + diff --git a/integration/tests_failed/assert_content_encoding.json b/integration/tests_failed/assert_content_encoding.json new file mode 100644 index 000000000..0974fcde4 --- /dev/null +++ b/integration/tests_failed/assert_content_encoding.json @@ -0,0 +1 @@ +{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error/content-encoding"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello World!"}}}]} diff --git a/integration/tests_failed/assert_decompress.html b/integration/tests_failed/assert_decompress.html index 2a5f4bbd3..bf1561f45 100644 --- a/integration/tests_failed/assert_decompress.html +++ b/integration/tests_failed/assert_decompress.html @@ -2,4 +2,4 @@ HTTP/1.0 200 ```Hello World!``` - \ No newline at end of file + diff --git a/integration/tests_failed/assert_decompress.json b/integration/tests_failed/assert_decompress.json new file mode 100644 index 000000000..c3d9c52bc --- /dev/null +++ b/integration/tests_failed/assert_decompress.json @@ -0,0 +1 @@ +{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert-decompress"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello World!"}}}]} diff --git a/integration/tests_failed/assert_file.html b/integration/tests_failed/assert_file.html index 5388b8eea..822a38cfc 100644 --- a/integration/tests_failed/assert_file.html +++ b/integration/tests_failed/assert_file.html @@ -7,4 +7,4 @@ HTTP/1.0 200 file,data.txt; - \ No newline at end of file + diff --git a/integration/tests_failed/assert_file.json b/integration/tests_failed/assert_file.json new file mode 100644 index 000000000..57dbe2c85 --- /dev/null +++ b/integration/tests_failed/assert_file.json @@ -0,0 +1 @@ +{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert-file"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"data.txt"}}}]} diff --git a/integration/tests_failed/assert_header_not_found.html b/integration/tests_failed/assert_header_not_found.html index 5c0e23b16..26090d11f 100644 --- a/integration/tests_failed/assert_header_not_found.html +++ b/integration/tests_failed/assert_header_not_found.html @@ -1,4 +1,4 @@
GET http://localhost:8000/error-assert-header-not-found
HTTP/1.0 200
Custom: ???
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/assert_header_not_found.json b/integration/tests_failed/assert_header_not_found.json
new file mode 100644
index 000000000..94bfd5207
--- /dev/null
+++ b/integration/tests_failed/assert_header_not_found.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert-header-not-found"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Custom","value":"???"}]}}]}
diff --git a/integration/tests_failed/assert_header_value.html b/integration/tests_failed/assert_header_value.html
index 972510f6c..fd022d6a4 100644
--- a/integration/tests_failed/assert_header_value.html
+++ b/integration/tests_failed/assert_header_value.html
@@ -4,4 +4,5 @@
GET http://localhost:8000/error-assert-header-value
HTTP/1.0 200
-Content-Type: ???
\ No newline at end of file
+Content-Type: ???
+
diff --git a/integration/tests_failed/assert_header_value.hurl b/integration/tests_failed/assert_header_value.hurl
index 53a96e016..e09724c9e 100644
--- a/integration/tests_failed/assert_header_value.hurl
+++ b/integration/tests_failed/assert_header_value.hurl
@@ -4,4 +4,4 @@ Content-Type: ???
GET http://localhost:8000/error-assert-header-value
HTTP/1.0 200
-Content-Type: ???
\ No newline at end of file
+Content-Type: ???
diff --git a/integration/tests_failed/assert_header_value.json b/integration/tests_failed/assert_header_value.json
new file mode 100644
index 000000000..548914c96
--- /dev/null
+++ b/integration/tests_failed/assert_header_value.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert-header-value"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Type","value":"???"}]}},{"request":{"method":"GET","url":"http://localhost:8000/error-assert-header-value"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Type","value":"???"}]}}]}
diff --git a/integration/tests_failed/assert_http_version.html b/integration/tests_failed/assert_http_version.html
index b177c2132..c40ea2a35 100644
--- a/integration/tests_failed/assert_http_version.html
+++ b/integration/tests_failed/assert_http_version.html
@@ -1,4 +1,4 @@
GET http://localhost:8000/error-assert/http-version
HTTP/2 200
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/assert_http_version.json b/integration/tests_failed/assert_http_version.json
new file mode 100644
index 000000000..2d88462d3
--- /dev/null
+++ b/integration/tests_failed/assert_http_version.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert/http-version"},"response":{"version":"HTTP/2","status":200}}]}
diff --git a/integration/tests_failed/assert_invalid_predicate_type.html b/integration/tests_failed/assert_invalid_predicate_type.html
index ec92885c8..e6056081e 100644
--- a/integration/tests_failed/assert_invalid_predicate_type.html
+++ b/integration/tests_failed/assert_invalid_predicate_type.html
@@ -3,4 +3,4 @@
[Asserts]
header "content-type" equals 1
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/assert_invalid_predicate_type.json b/integration/tests_failed/assert_invalid_predicate_type.json
new file mode 100644
index 000000000..1fa49d3ef
--- /dev/null
+++ b/integration/tests_failed/assert_invalid_predicate_type.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert-invalid-predicate-type"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"header","name":"content-type"},"predicate":{"type":"equal","value":1}}]}}]}
diff --git a/integration/tests_failed/assert_match_utf8.html b/integration/tests_failed/assert_match_utf8.html
index 25836c0b2..71caeed7b 100644
--- a/integration/tests_failed/assert_match_utf8.html
+++ b/integration/tests_failed/assert_match_utf8.html
@@ -3,4 +3,4 @@
[Asserts]
body matches ".*"
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/assert_match_utf8.json b/integration/tests_failed/assert_match_utf8.json
new file mode 100644
index 000000000..09eb52e84
--- /dev/null
+++ b/integration/tests_failed/assert_match_utf8.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert/match-utf8"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"body"},"predicate":{"type":"match","value":".*"}}]}}]}
diff --git a/integration/tests_failed/assert_newline.json b/integration/tests_failed/assert_newline.json
new file mode 100644
index 000000000..464c5dfe7
--- /dev/null
+++ b/integration/tests_failed/assert_newline.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert-newline"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello
\n"}}}]} diff --git a/integration/tests_failed/assert_query_cookie.html b/integration/tests_failed/assert_query_cookie.html index 34d01eef9..06696a655 100644 --- a/integration/tests_failed/assert_query_cookie.html +++ b/integration/tests_failed/assert_query_cookie.html @@ -13,4 +13,4 @@ - \ No newline at end of file + diff --git a/integration/tests_failed/assert_query_cookie.json b/integration/tests_failed/assert_query_cookie.json new file mode 100644 index 000000000..78b4b2b6c --- /dev/null +++ b/integration/tests_failed/assert_query_cookie.json @@ -0,0 +1 @@ +{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert-query-cookie"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"cookie","expr":"cookie1[Secure]"},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"cookie","expr":"cookie1[Secure]"},"predicate":{"type":"equal","value":false}},{"query":{"type":"cookie","expr":"cookie1[Secure]"},"predicate":{"not":true,"type":"equal","value":true}},{"query":{"type":"cookie","expr":"cookie2[Secure]"},"predicate":{"type":"exist"}},{"query":{"type":"cookie","expr":"cookie2[Secure]"},"predicate":{"type":"equal","value":true}},{"query":{"type":"cookie","expr":"cookie2[Secure]"},"predicate":{"not":true,"type":"equal","value":true}}]}}]} diff --git a/integration/tests_failed/assert_query_invalid_regex.html b/integration/tests_failed/assert_query_invalid_regex.html index fa4743e3a..7bb3f6a7a 100644 --- a/integration/tests_failed/assert_query_invalid_regex.html +++ b/integration/tests_failed/assert_query_invalid_regex.html @@ -2,4 +2,4 @@ HTTP/1.0 200 [Asserts] regex "[x" exists - \ No newline at end of file + diff --git a/integration/tests_failed/assert_query_invalid_regex.json b/integration/tests_failed/assert_query_invalid_regex.json new file mode 100644 index 000000000..8a3496f6b --- /dev/null +++ b/integration/tests_failed/assert_query_invalid_regex.json @@ -0,0 +1 @@ +{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert-query-invalid-regex"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"regex","expr":"[x"},"predicate":{"type":"exist"}}]}}]} diff --git a/integration/tests_failed/assert_query_invalid_xpath.html b/integration/tests_failed/assert_query_invalid_xpath.html index 4518d2801..1a97ce35a 100644 --- a/integration/tests_failed/assert_query_invalid_xpath.html +++ b/integration/tests_failed/assert_query_invalid_xpath.html @@ -2,4 +2,4 @@ HTTP/1.0 200 [Asserts] xpath "//" equals 1 - \ No newline at end of file + diff --git a/integration/tests_failed/assert_query_invalid_xpath.json b/integration/tests_failed/assert_query_invalid_xpath.json new file mode 100644 index 000000000..8c8849769 --- /dev/null +++ b/integration/tests_failed/assert_query_invalid_xpath.json @@ -0,0 +1 @@ +{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/utf8"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"xpath","expr":"//"},"predicate":{"type":"equal","value":1}}]}}]} diff --git a/integration/tests_failed/assert_status.html b/integration/tests_failed/assert_status.html index 038eba96f..384a29315 100644 --- a/integration/tests_failed/assert_status.html +++ b/integration/tests_failed/assert_status.html @@ -1,4 +1,4 @@GET http://localhost:8000/not_found
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/assert_status.json b/integration/tests_failed/assert_status.json
new file mode 100644
index 000000000..be5adad7c
--- /dev/null
+++ b/integration/tests_failed/assert_status.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/not_found"},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_failed/assert_template_variable_not_found.html b/integration/tests_failed/assert_template_variable_not_found.html
index bc270bac6..cbe7c6737 100644
--- a/integration/tests_failed/assert_template_variable_not_found.html
+++ b/integration/tests_failed/assert_template_variable_not_found.html
@@ -3,4 +3,4 @@
[Asserts]
header "content-type" equals "{{content_type}}"
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/assert_template_variable_not_found.json b/integration/tests_failed/assert_template_variable_not_found.json
index 6741548ad..7c41cefd9 100644
--- a/integration/tests_failed/assert_template_variable_not_found.json
+++ b/integration/tests_failed/assert_template_variable_not_found.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert-template-variable-not-found"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"header","name":"content-type"},"predicate":{"type":"equal","value":"{{content_type}}"}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert-template-variable-not-found"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"header","name":"content-type"},"predicate":{"type":"equal","value":"{{content_type}}"}}]}}]}
diff --git a/integration/tests_failed/assert_value_error.html b/integration/tests_failed/assert_value_error.html
index 1e241fc68..f3b1c395e 100644
--- a/integration/tests_failed/assert_value_error.html
+++ b/integration/tests_failed/assert_value_error.html
@@ -8,4 +8,5 @@
jsonpath "$.values" not contains "Hello"
jsonpath "$.count" greaterThan 5
jsonpath "$.count" isFloat
-bytes contains hex,00;
\ No newline at end of file
+bytes contains hex,00;
+
diff --git a/integration/tests_failed/assert_value_error.hurl b/integration/tests_failed/assert_value_error.hurl
index d3388a64c..04b51f3d7 100644
--- a/integration/tests_failed/assert_value_error.hurl
+++ b/integration/tests_failed/assert_value_error.hurl
@@ -8,4 +8,4 @@ jsonpath "$.values" includes 100
jsonpath "$.values" not contains "Hello"
jsonpath "$.count" greaterThan 5
jsonpath "$.count" isFloat
-bytes contains hex,00;
\ No newline at end of file
+bytes contains hex,00;
diff --git a/integration/tests_failed/assert_value_error.json b/integration/tests_failed/assert_value_error.json
new file mode 100644
index 000000000..39ce050ab
--- /dev/null
+++ b/integration/tests_failed/assert_value_error.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert-value"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"header","name":"content-type"},"predicate":{"type":"equal","value":"XXX"}},{"query":{"type":"header","name":"content-type"},"predicate":{"type":"not-equal","value":"text/html; charset=utf-8"}},{"query":{"type":"jsonpath","expr":"$.id"},"predicate":{"type":"equal","value":"000001"}},{"query":{"type":"jsonpath","expr":"$.values"},"predicate":{"type":"include","value":100}},{"query":{"type":"jsonpath","expr":"$.values"},"predicate":{"not":true,"type":"contain","value":"Hello"}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"greater","value":5}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"isFloat"}},{"query":{"type":"bytes"},"predicate":{"type":"contain","value":"AA==","encoding":"base64"}}]}}]}
diff --git a/integration/tests_failed/assert_variable.html b/integration/tests_failed/assert_variable.html
index 1f7a31dd5..399544750 100644
--- a/integration/tests_failed/assert_variable.html
+++ b/integration/tests_failed/assert_variable.html
@@ -9,4 +9,4 @@
variable "status" equals {{unknown}}
variable "status" equals {{type}}
variable "status" equals {{length}}
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/assert_variable.json b/integration/tests_failed/assert_variable.json
new file mode 100644
index 000000000..a94be653a
--- /dev/null
+++ b/integration/tests_failed/assert_variable.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert-variable"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"status","query":{"type":"status"}},{"name":"length","query":{"type":"header","name":"content-length"}},{"name":"type","query":{"type":"header","name":"content-type"}}],"asserts":[{"query":{"type":"variable","name":"toto"},"predicate":{"type":"equal","value":"tata"}},{"query":{"type":"variable","name":"status"},"predicate":{"type":"equal","value":"unknown"}},{"query":{"type":"variable","name":"status"},"predicate":{"type":"equal","value":"type"}},{"query":{"type":"variable","name":"status"},"predicate":{"type":"equal","value":"length"}}]}}]}
diff --git a/integration/tests_failed/assert_xpath.html b/integration/tests_failed/assert_xpath.html
index 11ff9bb93..4d40d1748 100644
--- a/integration/tests_failed/assert_xpath.html
+++ b/integration/tests_failed/assert_xpath.html
@@ -2,4 +2,4 @@
HTTP/1.0 200
[Asserts]
xpath "strong(//head/title)" equals "Welcome to Quiz!"
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/assert_xpath.json b/integration/tests_failed/assert_xpath.json
new file mode 100644
index 000000000..ac76e0462
--- /dev/null
+++ b/integration/tests_failed/assert_xpath.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-assert-xpath"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"xpath","expr":"strong(//head/title)"},"predicate":{"type":"equal","value":"Welcome to Quiz!"}}]}}]}
diff --git a/integration/tests_failed/body_json.html b/integration/tests_failed/body_json.html
index 676d2f7b4..5edd56e23 100644
--- a/integration/tests_failed/body_json.html
+++ b/integration/tests_failed/body_json.html
@@ -2,4 +2,4 @@
{
"success": {{success}}
}
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/body_json.json b/integration/tests_failed/body_json.json
new file mode 100644
index 000000000..d31990ab6
--- /dev/null
+++ b/integration/tests_failed/body_json.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"POST","url":"https://unused","body":{"type":"json","value":{"success":"{{success}}"}}}}]}
diff --git a/integration/tests_failed/connect_timeout.html b/integration/tests_failed/connect_timeout.html
index dda96af0f..48199056a 100644
--- a/integration/tests_failed/connect_timeout.html
+++ b/integration/tests_failed/connect_timeout.html
@@ -1,4 +1,4 @@
GET http://10.0.0.0
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/connect_timeout.json b/integration/tests_failed/connect_timeout.json
new file mode 100644
index 000000000..56355d686
--- /dev/null
+++ b/integration/tests_failed/connect_timeout.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://10.0.0.0"}}]}
diff --git a/integration/tests_failed/file_read_access.html b/integration/tests_failed/file_read_access.html
index baab0a98e..0bd9faa7a 100644
--- a/integration/tests_failed/file_read_access.html
+++ b/integration/tests_failed/file_read_access.html
@@ -2,4 +2,4 @@
file,does_not_exist;
HTTP/1.1 200
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/file_read_access.json b/integration/tests_failed/file_read_access.json
new file mode 100644
index 000000000..f171ed58c
--- /dev/null
+++ b/integration/tests_failed/file_read_access.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/error-file-read-access","body":{"type":"file","filename":"does_not_exist"}},"response":{"version":"HTTP/1.1","status":200}}]}
diff --git a/integration/tests_failed/file_unauthorized.html b/integration/tests_failed/file_unauthorized.html
index 2ae59839d..b14d5e9e6 100644
--- a/integration/tests_failed/file_unauthorized.html
+++ b/integration/tests_failed/file_unauthorized.html
@@ -18,4 +18,5 @@
[MultipartFormData]
file1: file,../secret.txt;
-HTTP/1.0 200
\ No newline at end of file
+HTTP/1.0 200
+
diff --git a/integration/tests_failed/file_unauthorized.hurl b/integration/tests_failed/file_unauthorized.hurl
index 9a79bcb63..2e9a14e82 100644
--- a/integration/tests_failed/file_unauthorized.hurl
+++ b/integration/tests_failed/file_unauthorized.hurl
@@ -18,4 +18,4 @@ POST http://localhost:8000/post-file
[MultipartFormData]
file1: file,../secret.txt;
-HTTP/1.0 200
\ No newline at end of file
+HTTP/1.0 200
diff --git a/integration/tests_failed/file_unauthorized.json b/integration/tests_failed/file_unauthorized.json
new file mode 100644
index 000000000..d68e5bd40
--- /dev/null
+++ b/integration/tests_failed/file_unauthorized.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/post-file","body":{"type":"file","filename":"/secret.txt"}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-file","body":{"type":"file","filename":"../secret.txt"}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-file","multipart_form_data":[{"name":"file1","filename":"/secret.txt"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-file","multipart_form_data":[{"name":"file1","filename":"../secret.txt"}]},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_failed/http_connection.html b/integration/tests_failed/http_connection.html
index 59aa6c896..6661eca24 100644
--- a/integration/tests_failed/http_connection.html
+++ b/integration/tests_failed/http_connection.html
@@ -1,3 +1,3 @@
GET http://unknown
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/http_connection.json b/integration/tests_failed/http_connection.json
new file mode 100644
index 000000000..9ae00d4ea
--- /dev/null
+++ b/integration/tests_failed/http_connection.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://unknown"}}]}
diff --git a/integration/tests_failed/invalid_jsonpath.html b/integration/tests_failed/invalid_jsonpath.html
index fbe891d7f..e91a84a12 100644
--- a/integration/tests_failed/invalid_jsonpath.html
+++ b/integration/tests_failed/invalid_jsonpath.html
@@ -2,4 +2,4 @@
HTTP/1.0 200
[Asserts]
jsonpath "" equals false
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/invalid_jsonpath.json b/integration/tests_failed/invalid_jsonpath.json
new file mode 100644
index 000000000..cb76e797a
--- /dev/null
+++ b/integration/tests_failed/invalid_jsonpath.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-invalid-jsonpath"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":""},"predicate":{"type":"equal","value":false}}]}}]}
diff --git a/integration/tests_failed/invalid_url.html b/integration/tests_failed/invalid_url.html
index cf7db06e3..0fa330e46 100644
--- a/integration/tests_failed/invalid_url.html
+++ b/integration/tests_failed/invalid_url.html
@@ -1,3 +1,3 @@
GET https://???
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/invalid_url.json b/integration/tests_failed/invalid_url.json
new file mode 100644
index 000000000..0ee8d8b70
--- /dev/null
+++ b/integration/tests_failed/invalid_url.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"https://???"}}]}
diff --git a/integration/tests_failed/invalid_xml.html b/integration/tests_failed/invalid_xml.html
index 10d01a60c..1e934d20e 100644
--- a/integration/tests_failed/invalid_xml.html
+++ b/integration/tests_failed/invalid_xml.html
@@ -2,4 +2,4 @@
HTTP/1.0 200
[Asserts]
xpath "xx" equals 1
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/invalid_xml.json b/integration/tests_failed/invalid_xml.json
new file mode 100644
index 000000000..51b226941
--- /dev/null
+++ b/integration/tests_failed/invalid_xml.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-invalid-xml"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"xpath","expr":"xx"},"predicate":{"type":"equal","value":1}}]}}]}
diff --git a/integration/tests_failed/max_redirect.html b/integration/tests_failed/max_redirect.html
index 66fb2cc7d..24ce62740 100644
--- a/integration/tests_failed/max_redirect.html
+++ b/integration/tests_failed/max_redirect.html
@@ -2,4 +2,4 @@
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/max_redirect.json b/integration/tests_failed/max_redirect.json
new file mode 100644
index 000000000..df59e0035
--- /dev/null
+++ b/integration/tests_failed/max_redirect.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/redirect/7"},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_failed/multipart_form_data.html b/integration/tests_failed/multipart_form_data.html
index 39c7b0bd5..5ba6587e3 100644
--- a/integration/tests_failed/multipart_form_data.html
+++ b/integration/tests_failed/multipart_form_data.html
@@ -6,4 +6,4 @@
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/multipart_form_data.json b/integration/tests_failed/multipart_form_data.json
new file mode 100644
index 000000000..f878cf4d2
--- /dev/null
+++ b/integration/tests_failed/multipart_form_data.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/unused","multipart_form_data":[{"name":"key1","value":"value1"},{"name":"upload1","filename":"unknown"}]}}]}
diff --git a/integration/tests_failed/option_max_redirect.html b/integration/tests_failed/option_max_redirect.html
index 2d1f9956b..b9c1546e5 100644
--- a/integration/tests_failed/option_max_redirect.html
+++ b/integration/tests_failed/option_max_redirect.html
@@ -6,4 +6,4 @@
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/option_max_redirect.json b/integration/tests_failed/option_max_redirect.json
new file mode 100644
index 000000000..df59e0035
--- /dev/null
+++ b/integration/tests_failed/option_max_redirect.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/redirect/7"},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_failed/option_retry.html b/integration/tests_failed/option_retry.html
index 7350f1f97..4618dd7e6 100644
--- a/integration/tests_failed/option_retry.html
+++ b/integration/tests_failed/option_retry.html
@@ -4,4 +4,4 @@
retry-interval: 0
retry-max-count: 2
HTTP/* 200
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/option_retry.json b/integration/tests_failed/option_retry.json
new file mode 100644
index 000000000..d9b578dc2
--- /dev/null
+++ b/integration/tests_failed/option_retry.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/not-found"},"response":{"status":200}}]}
diff --git a/integration/tests_failed/output_decompress.html b/integration/tests_failed/output_decompress.html
index 5a93d6ec7..6d9758098 100644
--- a/integration/tests_failed/output_decompress.html
+++ b/integration/tests_failed/output_decompress.html
@@ -5,4 +5,4 @@
GET http://localhost:8000/error-output-decompress
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/output_decompress.json b/integration/tests_failed/output_decompress.json
new file mode 100644
index 000000000..bbae172ea
--- /dev/null
+++ b/integration/tests_failed/output_decompress.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-output-decompress"},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_failed/predicate.html b/integration/tests_failed/predicate.html
index 8100b7739..b4a0bc572 100644
--- a/integration/tests_failed/predicate.html
+++ b/integration/tests_failed/predicate.html
@@ -14,4 +14,5 @@
jsonpath "$.message" count == 1
jsonpath "$.toto" exists
jsonpath "$.message" not exists
-jsonpath "$.list" count == 2
\ No newline at end of file
+jsonpath "$.list" count == 2
+
diff --git a/integration/tests_failed/predicate.hurl b/integration/tests_failed/predicate.hurl
index b52378dee..22784901d 100644
--- a/integration/tests_failed/predicate.hurl
+++ b/integration/tests_failed/predicate.hurl
@@ -14,4 +14,4 @@ jsonpath "$.message" matches "hi"
jsonpath "$.message" count == 1
jsonpath "$.toto" exists
jsonpath "$.message" not exists
-jsonpath "$.list" count == 2
\ No newline at end of file
+jsonpath "$.list" count == 2
diff --git a/integration/tests_failed/predicate.json b/integration/tests_failed/predicate.json
new file mode 100644
index 000000000..b38b269c9
--- /dev/null
+++ b/integration/tests_failed/predicate.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/predicate/error/type"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.status"},"predicate":{"type":"equal","value":"true"}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"equal","value":0}},{"query":{"type":"jsonpath","expr":"$.message"},"predicate":{"type":"equal","value":0}},{"query":{"type":"jsonpath","expr":"$.empty"},"predicate":{"type":"equal","value":0}},{"query":{"type":"jsonpath","expr":"$.number"},"predicate":{"type":"equal","value":1.1}},{"query":{"type":"jsonpath","expr":"$.message"},"predicate":{"type":"start-with","value":"hi"}},{"query":{"type":"jsonpath","expr":"$.message"},"predicate":{"type":"end-with","value":"hi"}},{"query":{"type":"jsonpath","expr":"$.message"},"predicate":{"type":"contain","value":"hi"}},{"query":{"type":"jsonpath","expr":"$.message"},"predicate":{"type":"match","value":"hi"}},{"query":{"type":"jsonpath","expr":"$.message","subquery":{"type":"count"}},"predicate":{"type":"equal","value":1}},{"query":{"type":"jsonpath","expr":"$.toto"},"predicate":{"type":"exist"}},{"query":{"type":"jsonpath","expr":"$.message"},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"jsonpath","expr":"$.list","subquery":{"type":"count"}},"predicate":{"type":"equal","value":2}}]}}]}
diff --git a/integration/tests_failed/query_header_not_found.html b/integration/tests_failed/query_header_not_found.html
index b17f1552d..9766b0111 100644
--- a/integration/tests_failed/query_header_not_found.html
+++ b/integration/tests_failed/query_header_not_found.html
@@ -2,4 +2,4 @@
HTTP/1.0 200
Custom: XXX
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/query_header_not_found.json b/integration/tests_failed/query_header_not_found.json
new file mode 100644
index 000000000..fbfa7f8c5
--- /dev/null
+++ b/integration/tests_failed/query_header_not_found.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-query-header-not-found"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Custom","value":"XXX"}]}}]}
diff --git a/integration/tests_failed/query_invalid_json.html b/integration/tests_failed/query_invalid_json.html
index b27c1245f..46d055f48 100644
--- a/integration/tests_failed/query_invalid_json.html
+++ b/integration/tests_failed/query_invalid_json.html
@@ -3,4 +3,4 @@
[Asserts]
jsonpath "$.errors" count == 2
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/query_invalid_json.json b/integration/tests_failed/query_invalid_json.json
new file mode 100644
index 000000000..672a14bd5
--- /dev/null
+++ b/integration/tests_failed/query_invalid_json.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-query-invalid-json"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.errors","subquery":{"type":"count"}},"predicate":{"type":"equal","value":2}}]}}]}
diff --git a/integration/tests_failed/query_invalid_utf8.html b/integration/tests_failed/query_invalid_utf8.html
index 5be94b0aa..881956d26 100644
--- a/integration/tests_failed/query_invalid_utf8.html
+++ b/integration/tests_failed/query_invalid_utf8.html
@@ -3,4 +3,4 @@
[Asserts]
jsonpath "$.errors" count == 2
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/query_invalid_utf8.json b/integration/tests_failed/query_invalid_utf8.json
new file mode 100644
index 000000000..558ee517a
--- /dev/null
+++ b/integration/tests_failed/query_invalid_utf8.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/error-query-invalid-utf8"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.errors","subquery":{"type":"count"}},"predicate":{"type":"equal","value":2}}]}}]}
diff --git a/integration/tests_failed/query_match_none.html b/integration/tests_failed/query_match_none.html
index 9867caad6..f64b529fa 100644
--- a/integration/tests_failed/query_match_none.html
+++ b/integration/tests_failed/query_match_none.html
@@ -4,4 +4,4 @@
header "Location" matches /^foo$/
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/query_match_none.json b/integration/tests_failed/query_match_none.json
new file mode 100644
index 000000000..84b40709f
--- /dev/null
+++ b/integration/tests_failed/query_match_none.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/query-match-none"},"response":{"asserts":[{"query":{"type":"header","name":"Location"},"predicate":{"type":"match","value":"^foo$","encoding":"regex"}}]}}]}
diff --git a/integration/tests_failed/retry.html b/integration/tests_failed/retry.html
index fdc47a364..319106c5c 100644
--- a/integration/tests_failed/retry.html
+++ b/integration/tests_failed/retry.html
@@ -1,2 +1,3 @@
GET http://localhost:8000/not-found
-HTTP/* 200
\ No newline at end of file
+HTTP/* 200
+
diff --git a/integration/tests_failed/retry.hurl b/integration/tests_failed/retry.hurl
index c50d76eff..a3e301c80 100644
--- a/integration/tests_failed/retry.hurl
+++ b/integration/tests_failed/retry.hurl
@@ -1,2 +1,2 @@
GET http://localhost:8000/not-found
-HTTP/* 200
\ No newline at end of file
+HTTP/* 200
diff --git a/integration/tests_failed/retry.json b/integration/tests_failed/retry.json
new file mode 100644
index 000000000..d9b578dc2
--- /dev/null
+++ b/integration/tests_failed/retry.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/not-found"},"response":{"status":200}}]}
diff --git a/integration/tests_failed/template_variable_not_found.html b/integration/tests_failed/template_variable_not_found.html
index eafb9012d..0c42e1c6f 100644
--- a/integration/tests_failed/template_variable_not_found.html
+++ b/integration/tests_failed/template_variable_not_found.html
@@ -1,3 +1,3 @@
GET {{url}}
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/template_variable_not_found.json b/integration/tests_failed/template_variable_not_found.json
new file mode 100644
index 000000000..d0e1376f2
--- /dev/null
+++ b/integration/tests_failed/template_variable_not_found.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"{{url}}"}}]}
diff --git a/integration/tests_failed/template_variable_not_renderable.html b/integration/tests_failed/template_variable_not_renderable.html
index 462147085..130497cc4 100644
--- a/integration/tests_failed/template_variable_not_renderable.html
+++ b/integration/tests_failed/template_variable_not_renderable.html
@@ -8,4 +8,4 @@
param1: {{list}}
HTTP/1.1 200
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/template_variable_not_renderable.json b/integration/tests_failed/template_variable_not_renderable.json
new file mode 100644
index 000000000..ca8bdeef0
--- /dev/null
+++ b/integration/tests_failed/template_variable_not_renderable.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/get-list"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"list","query":{"type":"jsonpath","expr":"$.values"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/undefined","query_string_params":[{"name":"param1","value":"{{list}}"}]},"response":{"version":"HTTP/1.1","status":200}}]}
diff --git a/integration/tests_failed/timeout.html b/integration/tests_failed/timeout.html
index 62858f08b..25e27d04f 100644
--- a/integration/tests_failed/timeout.html
+++ b/integration/tests_failed/timeout.html
@@ -1,4 +1,4 @@
GET http://localhost:8000/timeout
-
\ No newline at end of file
+
diff --git a/integration/tests_failed/timeout.json b/integration/tests_failed/timeout.json
new file mode 100644
index 000000000..1b0e3a5d1
--- /dev/null
+++ b/integration/tests_failed/timeout.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/timeout"}}]}
diff --git a/integration/tests_ok/assert_base64.html b/integration/tests_ok/assert_base64.html
index a3434b8ff..6708b1fa9 100644
--- a/integration/tests_ok/assert_base64.html
+++ b/integration/tests_ok/assert_base64.html
@@ -9,4 +9,4 @@
HTTP/1.0 200
base64,bGluZTEKbGluZTINCmxpbmUzCg==;
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/assert_base64.json b/integration/tests_ok/assert_base64.json
index 484f838aa..74d520dbc 100644
--- a/integration/tests_ok/assert_base64.json
+++ b/integration/tests_ok/assert_base64.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-base64"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"bGluZTEKbGluZTINCmxpbmUzCg=="}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-base64"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"bGluZTEKbGluZTINCmxpbmUzCg=="}}}]}
diff --git a/integration/tests_ok/assert_header.html b/integration/tests_ok/assert_header.html
index 5e5bb5973..547fe2760 100644
--- a/integration/tests_ok/assert_header.html
+++ b/integration/tests_ok/assert_header.html
@@ -11,4 +11,5 @@
header "Set-Cookie" exists
header "Set-Cookie" count == 3
header "Set-Cookie" includes "cookie1=value1; Path=/"
-header "Set-Cookie" not includes "cookie4=value4; Path=/"
\ No newline at end of file
+header "Set-Cookie" not includes "cookie4=value4; Path=/"
+
diff --git a/integration/tests_ok/assert_header.hurl b/integration/tests_ok/assert_header.hurl
index b0931ae1a..5190ecde2 100644
--- a/integration/tests_ok/assert_header.hurl
+++ b/integration/tests_ok/assert_header.hurl
@@ -11,4 +11,4 @@ header "ETag" == "\"33a64df551425fcc55e4d42a148795d9f25f89d4\""
header "Set-Cookie" exists
header "Set-Cookie" count == 3
header "Set-Cookie" includes "cookie1=value1; Path=/"
-header "Set-Cookie" not includes "cookie4=value4; Path=/"
\ No newline at end of file
+header "Set-Cookie" not includes "cookie4=value4; Path=/"
diff --git a/integration/tests_ok/assert_header.json b/integration/tests_ok/assert_header.json
index e73d5c574..9f579c720 100644
--- a/integration/tests_ok/assert_header.json
+++ b/integration/tests_ok/assert_header.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-header"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Set-Cookie","value":"cookie1=value1; Path=/"},{"name":"Set-Cookie","value":"cookie2=value2; Path=/"}],"asserts":[{"query":{"type":"header","name":"Custom"},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"header","name":"Content-Type"},"predicate":{"type":"exist"}},{"query":{"type":"header","name":"Header1"},"predicate":{"type":"equal","value":"value1"}},{"query":{"type":"header","name":"ETag"},"predicate":{"type":"equal","value":"\"33a64df551425fcc55e4d42a148795d9f25f89d4\""}},{"query":{"type":"header","name":"Set-Cookie"},"predicate":{"type":"exist"}},{"query":{"type":"header","name":"Set-Cookie","subquery":{"type":"count"}},"predicate":{"type":"equal","value":3}},{"query":{"type":"header","name":"Set-Cookie"},"predicate":{"type":"include","value":"cookie1=value1; Path=/"}},{"query":{"type":"header","name":"Set-Cookie"},"predicate":{"not":true,"type":"include","value":"cookie4=value4; Path=/"}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-header"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Set-Cookie","value":"cookie1=value1; Path=/"},{"name":"Set-Cookie","value":"cookie2=value2; Path=/"}],"asserts":[{"query":{"type":"header","name":"Custom"},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"header","name":"Content-Type"},"predicate":{"type":"exist"}},{"query":{"type":"header","name":"Header1"},"predicate":{"type":"equal","value":"value1"}},{"query":{"type":"header","name":"ETag"},"predicate":{"type":"equal","value":"\"33a64df551425fcc55e4d42a148795d9f25f89d4\""}},{"query":{"type":"header","name":"Set-Cookie"},"predicate":{"type":"exist"}},{"query":{"type":"header","name":"Set-Cookie","subquery":{"type":"count"}},"predicate":{"type":"equal","value":3}},{"query":{"type":"header","name":"Set-Cookie"},"predicate":{"type":"include","value":"cookie1=value1; Path=/"}},{"query":{"type":"header","name":"Set-Cookie"},"predicate":{"not":true,"type":"include","value":"cookie4=value4; Path=/"}}]}}]}
diff --git a/integration/tests_ok/assert_json.html b/integration/tests_ok/assert_json.html
index dd265e008..216e930bd 100644
--- a/integration/tests_ok/assert_json.html
+++ b/integration/tests_ok/assert_json.html
@@ -89,4 +89,5 @@
GET http://localhost:8000/assert-json/filter
HTTP/1.0 200
[Asserts]
-jsonpath "$.fruit[?(@.price.US==200)].name" equals "grape"
\ No newline at end of file
+jsonpath "$.fruit[?(@.price.US==200)].name" equals "grape"
+
diff --git a/integration/tests_ok/assert_json.hurl b/integration/tests_ok/assert_json.hurl
index 2491d0e34..cac24c906 100644
--- a/integration/tests_ok/assert_json.hurl
+++ b/integration/tests_ok/assert_json.hurl
@@ -89,4 +89,4 @@ jsonpath "$[0].name" == "Bob"
GET http://localhost:8000/assert-json/filter
HTTP/1.0 200
[Asserts]
-jsonpath "$.fruit[?(@.price.US==200)].name" equals "grape"
\ No newline at end of file
+jsonpath "$.fruit[?(@.price.US==200)].name" equals "grape"
diff --git a/integration/tests_ok/assert_json.json b/integration/tests_ok/assert_json.json
index bce4d3dff..cd0fa133b 100644
--- a/integration/tests_ok/assert_json.json
+++ b/integration/tests_ok/assert_json.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-json"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"count","query":{"type":"jsonpath","expr":"$.count"}}],"asserts":[{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"equal","value":5}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"equal","value":5.0}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"equal","value":"five"}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"equal","value":5}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"not-equal","value":4}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"not-equal","value":"four"}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"not":true,"type":"equal","value":4}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"greater","value":1}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"greater","value":"one"}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"greater","value":1.0}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"greater","value":1.0}},{"query":{"type":"jsonpath","expr":"$.success"},"predicate":{"type":"equal","value":false}},{"query":{"type":"jsonpath","expr":"$.success"},"predicate":{"type":"not-equal","value":null}},{"query":{"type":"jsonpath","expr":"$.success"},"predicate":{"type":"exist"}},{"query":{"type":"jsonpath","expr":"$.success"},"predicate":{"type":"isBoolean"}},{"query":{"type":"jsonpath","expr":"$.errors","subquery":{"type":"count"}},"predicate":{"type":"equal","value":2}},{"query":{"type":"jsonpath","expr":"$.errors"},"predicate":{"type":"isCollection"}},{"query":{"type":"jsonpath","expr":"$.warnings","subquery":{"type":"count"}},"predicate":{"type":"equal","value":0}},{"query":{"type":"jsonpath","expr":"$.toto"},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"jsonpath","expr":"$.warnings"},"predicate":{"type":"exist"}},{"query":{"type":"jsonpath","expr":"$.warnings"},"predicate":{"type":"exist"}},{"query":{"type":"jsonpath","expr":"$.errors[0]"},"predicate":{"type":"exist"}},{"query":{"type":"jsonpath","expr":"$.errors[0]"},"predicate":{"type":"isCollection"}},{"query":{"type":"jsonpath","expr":"$.errors[0].id"},"predicate":{"type":"equal","value":"error1"}},{"query":{"type":"jsonpath","expr":"$.errors[0]['id']"},"predicate":{"type":"equal","value":"error1"}},{"query":{"type":"jsonpath","expr":"$.errors[*].id"},"predicate":{"type":"include","value":"error1"}},{"query":{"type":"jsonpath","expr":"$.errors[?(@.id=='error1')].id"},"predicate":{"type":"equal","value":"error1"}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"type":"equal","value":1.5}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"type":"less-or-equal","value":2.0}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"type":"less","value":2}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"type":"less","value":"two"}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"type":"less-or-equal","value":2.0}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"type":"less","value":2}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"type":"isFloat"}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"not":true,"type":"isInteger"}},{"query":{"type":"jsonpath","expr":"$.nullable"},"predicate":{"type":"equal","value":null}},{"query":{"type":"jsonpath","expr":"$.tags[0]"},"predicate":{"type":"equal","value":"test"}},{"query":{"type":"jsonpath","expr":"$.tags[0]"},"predicate":{"type":"greater","value":"te"}},{"query":{"type":"jsonpath","expr":"$.tags[0]"},"predicate":{"type":"less","value":"testabc"}},{"query":{"type":"jsonpath","expr":"$.tags[0]"},"predicate":{"type":"less-or-equal","value":"test"}},{"query":{"type":"jsonpath","expr":"$.tags[0]"},"predicate":{"type":"greater","value":"{{foo}}"}}],"body":{"type":"json","value":{"count":5,"success":false,"errors":[{"id":"error1"},{"id":"error2"}],"warnings":[],"duration":1.5,"tags":["test"],"nullable":null}}}},{"request":{"method":"GET","url":"http://localhost:8000/assert-json/index"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"index","query":{"type":"body"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-json"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.errors[{{index}}].id"},"predicate":{"type":"equal","value":"error2"}},{"query":{"type":"jsonpath","expr":"$.tags"},"predicate":{"type":"include","value":"test"}},{"query":{"type":"jsonpath","expr":"$.tags"},"predicate":{"not":true,"type":"include","value":"prod"}},{"query":{"type":"jsonpath","expr":"$.tags"},"predicate":{"not":true,"type":"include","value":null}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-json/list"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$","subquery":{"type":"count"}},"predicate":{"type":"equal","value":2}},{"query":{"type":"jsonpath","expr":"$.[0].name"},"predicate":{"type":"equal","value":"Bob"}},{"query":{"type":"jsonpath","expr":"$[0].name"},"predicate":{"type":"equal","value":"Bob"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-json/filter"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.fruit[?(@.price.US==200)].name"},"predicate":{"type":"equal","value":"grape"}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-json"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"count","query":{"type":"jsonpath","expr":"$.count"}}],"asserts":[{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"equal","value":5}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"equal","value":5.0}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"equal","value":"five"}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"equal","value":5}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"not-equal","value":4}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"not-equal","value":"four"}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"not":true,"type":"equal","value":4}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"greater","value":1}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"greater","value":"one"}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"greater","value":1.0}},{"query":{"type":"jsonpath","expr":"$.count"},"predicate":{"type":"greater","value":1.0}},{"query":{"type":"jsonpath","expr":"$.success"},"predicate":{"type":"equal","value":false}},{"query":{"type":"jsonpath","expr":"$.success"},"predicate":{"type":"not-equal","value":null}},{"query":{"type":"jsonpath","expr":"$.success"},"predicate":{"type":"exist"}},{"query":{"type":"jsonpath","expr":"$.success"},"predicate":{"type":"isBoolean"}},{"query":{"type":"jsonpath","expr":"$.errors","subquery":{"type":"count"}},"predicate":{"type":"equal","value":2}},{"query":{"type":"jsonpath","expr":"$.errors"},"predicate":{"type":"isCollection"}},{"query":{"type":"jsonpath","expr":"$.warnings","subquery":{"type":"count"}},"predicate":{"type":"equal","value":0}},{"query":{"type":"jsonpath","expr":"$.toto"},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"jsonpath","expr":"$.warnings"},"predicate":{"type":"exist"}},{"query":{"type":"jsonpath","expr":"$.warnings"},"predicate":{"type":"exist"}},{"query":{"type":"jsonpath","expr":"$.errors[0]"},"predicate":{"type":"exist"}},{"query":{"type":"jsonpath","expr":"$.errors[0]"},"predicate":{"type":"isCollection"}},{"query":{"type":"jsonpath","expr":"$.errors[0].id"},"predicate":{"type":"equal","value":"error1"}},{"query":{"type":"jsonpath","expr":"$.errors[0]['id']"},"predicate":{"type":"equal","value":"error1"}},{"query":{"type":"jsonpath","expr":"$.errors[*].id"},"predicate":{"type":"include","value":"error1"}},{"query":{"type":"jsonpath","expr":"$.errors[?(@.id=='error1')].id"},"predicate":{"type":"equal","value":"error1"}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"type":"equal","value":1.5}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"type":"less-or-equal","value":2.0}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"type":"less","value":2}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"type":"less","value":"two"}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"type":"less-or-equal","value":2.0}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"type":"less","value":2}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"type":"isFloat"}},{"query":{"type":"jsonpath","expr":"$.duration"},"predicate":{"not":true,"type":"isInteger"}},{"query":{"type":"jsonpath","expr":"$.nullable"},"predicate":{"type":"equal","value":null}},{"query":{"type":"jsonpath","expr":"$.tags[0]"},"predicate":{"type":"equal","value":"test"}},{"query":{"type":"jsonpath","expr":"$.tags[0]"},"predicate":{"type":"greater","value":"te"}},{"query":{"type":"jsonpath","expr":"$.tags[0]"},"predicate":{"type":"less","value":"testabc"}},{"query":{"type":"jsonpath","expr":"$.tags[0]"},"predicate":{"type":"less-or-equal","value":"test"}},{"query":{"type":"jsonpath","expr":"$.tags[0]"},"predicate":{"type":"greater","value":"{{foo}}"}}],"body":{"type":"json","value":{"count":5,"success":false,"errors":[{"id":"error1"},{"id":"error2"}],"warnings":[],"duration":1.5,"tags":["test"],"nullable":null}}}},{"request":{"method":"GET","url":"http://localhost:8000/assert-json/index"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"index","query":{"type":"body"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-json"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.errors[{{index}}].id"},"predicate":{"type":"equal","value":"error2"}},{"query":{"type":"jsonpath","expr":"$.tags"},"predicate":{"type":"include","value":"test"}},{"query":{"type":"jsonpath","expr":"$.tags"},"predicate":{"not":true,"type":"include","value":"prod"}},{"query":{"type":"jsonpath","expr":"$.tags"},"predicate":{"not":true,"type":"include","value":null}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-json/list"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$","subquery":{"type":"count"}},"predicate":{"type":"equal","value":2}},{"query":{"type":"jsonpath","expr":"$.[0].name"},"predicate":{"type":"equal","value":"Bob"}},{"query":{"type":"jsonpath","expr":"$[0].name"},"predicate":{"type":"equal","value":"Bob"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-json/filter"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.fruit[?(@.price.US==200)].name"},"predicate":{"type":"equal","value":"grape"}}]}}]}
diff --git a/integration/tests_ok/assert_match.html b/integration/tests_ok/assert_match.html
index 4e0104a3c..72228f02a 100644
--- a/integration/tests_ok/assert_match.html
+++ b/integration/tests_ok/assert_match.html
@@ -7,4 +7,5 @@
jsonpath "$.date1" matches /^\d{4}-\d{2}-\d{2}$/
jsonpath "$.date2" not matches /^\d{4}-\d{2}-\d{2}$/
jsonpath "$.path1" matches /aa\/bb/
-jsonpath "$.path2" matches /aa\\bb/
\ No newline at end of file
+jsonpath "$.path2" matches /aa\\bb/
+
diff --git a/integration/tests_ok/assert_match.hurl b/integration/tests_ok/assert_match.hurl
index 7383d1bed..72ec66e75 100644
--- a/integration/tests_ok/assert_match.hurl
+++ b/integration/tests_ok/assert_match.hurl
@@ -7,4 +7,4 @@ jsonpath "$.date2" matches /\d{4}-\d{2}-\d{2}/
jsonpath "$.date1" matches /^\d{4}-\d{2}-\d{2}$/
jsonpath "$.date2" not matches /^\d{4}-\d{2}-\d{2}$/
jsonpath "$.path1" matches /aa\/bb/
-jsonpath "$.path2" matches /aa\\bb/
\ No newline at end of file
+jsonpath "$.path2" matches /aa\\bb/
diff --git a/integration/tests_ok/assert_match.json b/integration/tests_ok/assert_match.json
index c69baf4a1..a00b8c5d9 100644
--- a/integration/tests_ok/assert_match.json
+++ b/integration/tests_ok/assert_match.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-match"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.date1"},"predicate":{"type":"match","value":"\\d{4}-\\d{2}-\\d{2}"}},{"query":{"type":"jsonpath","expr":"$.date1"},"predicate":{"type":"match","value":"\\d{4}-\\d{2}-\\d{2}","encoding":"regex"}},{"query":{"type":"jsonpath","expr":"$.date2"},"predicate":{"type":"match","value":"\\d{4}-\\d{2}-\\d{2}","encoding":"regex"}},{"query":{"type":"jsonpath","expr":"$.date1"},"predicate":{"type":"match","value":"^\\d{4}-\\d{2}-\\d{2}$","encoding":"regex"}},{"query":{"type":"jsonpath","expr":"$.date2"},"predicate":{"not":true,"type":"match","value":"^\\d{4}-\\d{2}-\\d{2}$","encoding":"regex"}},{"query":{"type":"jsonpath","expr":"$.path1"},"predicate":{"type":"match","value":"aa/bb","encoding":"regex"}},{"query":{"type":"jsonpath","expr":"$.path2"},"predicate":{"type":"match","value":"aa\\\\bb","encoding":"regex"}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-match"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.date1"},"predicate":{"type":"match","value":"\\d{4}-\\d{2}-\\d{2}"}},{"query":{"type":"jsonpath","expr":"$.date1"},"predicate":{"type":"match","value":"\\d{4}-\\d{2}-\\d{2}","encoding":"regex"}},{"query":{"type":"jsonpath","expr":"$.date2"},"predicate":{"type":"match","value":"\\d{4}-\\d{2}-\\d{2}","encoding":"regex"}},{"query":{"type":"jsonpath","expr":"$.date1"},"predicate":{"type":"match","value":"^\\d{4}-\\d{2}-\\d{2}$","encoding":"regex"}},{"query":{"type":"jsonpath","expr":"$.date2"},"predicate":{"not":true,"type":"match","value":"^\\d{4}-\\d{2}-\\d{2}$","encoding":"regex"}},{"query":{"type":"jsonpath","expr":"$.path1"},"predicate":{"type":"match","value":"aa/bb","encoding":"regex"}},{"query":{"type":"jsonpath","expr":"$.path2"},"predicate":{"type":"match","value":"aa\\\\bb","encoding":"regex"}}]}}]}
diff --git a/integration/tests_ok/assert_regex.html b/integration/tests_ok/assert_regex.html
index b56723e41..908882c09 100644
--- a/integration/tests_ok/assert_regex.html
+++ b/integration/tests_ok/assert_regex.html
@@ -5,4 +5,5 @@
regex "Hello ([0-9]+)!" not exists
regex /Hello ([0-9]+)!/ not exists
regex "Hello ([a-zA-Z]+)!" == "World"
-regex /Hello ([a-zA-Z]+)!/ == "World"
\ No newline at end of file
+regex /Hello ([a-zA-Z]+)!/ == "World"
+
diff --git a/integration/tests_ok/assert_regex.hurl b/integration/tests_ok/assert_regex.hurl
index 8fc2a9b80..d31551362 100644
--- a/integration/tests_ok/assert_regex.hurl
+++ b/integration/tests_ok/assert_regex.hurl
@@ -5,4 +5,4 @@ HTTP/1.0 200
regex "Hello ([0-9]+)!" not exists
regex /Hello ([0-9]+)!/ not exists
regex "Hello ([a-zA-Z]+)!" == "World"
-regex /Hello ([a-zA-Z]+)!/ == "World"
\ No newline at end of file
+regex /Hello ([a-zA-Z]+)!/ == "World"
diff --git a/integration/tests_ok/assert_regex.json b/integration/tests_ok/assert_regex.json
index 13a781913..528dff78c 100644
--- a/integration/tests_ok/assert_regex.json
+++ b/integration/tests_ok/assert_regex.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-regex"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"regex","expr":"Hello ([0-9]+)!"},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"regex","expr":{"type":"regex","value":"Hello ([0-9]+)!"}},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"regex","expr":"Hello ([a-zA-Z]+)!"},"predicate":{"type":"equal","value":"World"}},{"query":{"type":"regex","expr":{"type":"regex","value":"Hello ([a-zA-Z]+)!"}},"predicate":{"type":"equal","value":"World"}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-regex"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"regex","expr":"Hello ([0-9]+)!"},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"regex","expr":{"type":"regex","value":"Hello ([0-9]+)!"}},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"regex","expr":"Hello ([a-zA-Z]+)!"},"predicate":{"type":"equal","value":"World"}},{"query":{"type":"regex","expr":{"type":"regex","value":"Hello ([a-zA-Z]+)!"}},"predicate":{"type":"equal","value":"World"}}]}}]}
diff --git a/integration/tests_ok/assert_status_code.html b/integration/tests_ok/assert_status_code.html
index 9a650646b..c4af52bb0 100644
--- a/integration/tests_ok/assert_status_code.html
+++ b/integration/tests_ok/assert_status_code.html
@@ -14,4 +14,5 @@
HTTP/* *
[Asserts]
status >= 200
-status < 300
\ No newline at end of file
+status < 300
+
diff --git a/integration/tests_ok/assert_status_code.hurl b/integration/tests_ok/assert_status_code.hurl
index c0985b7df..a7a2cfae0 100644
--- a/integration/tests_ok/assert_status_code.hurl
+++ b/integration/tests_ok/assert_status_code.hurl
@@ -14,4 +14,4 @@ GET http://localhost:8000/assert-status-code
HTTP/* *
[Asserts]
status >= 200
-status < 300
\ No newline at end of file
+status < 300
diff --git a/integration/tests_ok/assert_status_code.json b/integration/tests_ok/assert_status_code.json
index c409619f0..69d5fdcbf 100644
--- a/integration/tests_ok/assert_status_code.json
+++ b/integration/tests_ok/assert_status_code.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-status-code"},"response":{"version":"HTTP/1.0","status":201}},{"request":{"method":"GET","url":"http://localhost:8000/assert-status-code"},"response":{"asserts":[{"query":{"type":"status"},"predicate":{"type":"not-equal","value":200}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-status-code"},"response":{"asserts":[{"query":{"type":"status"},"predicate":{"type":"greater-or-equal","value":200}},{"query":{"type":"status"},"predicate":{"type":"less","value":300}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-status-code"},"response":{"version":"HTTP/1.0","status":201}},{"request":{"method":"GET","url":"http://localhost:8000/assert-status-code"},"response":{"asserts":[{"query":{"type":"status"},"predicate":{"type":"not-equal","value":200}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-status-code"},"response":{"asserts":[{"query":{"type":"status"},"predicate":{"type":"greater-or-equal","value":200}},{"query":{"type":"status"},"predicate":{"type":"less","value":300}}]}}]}
diff --git a/integration/tests_ok/assert_xpath.html b/integration/tests_ok/assert_xpath.html
index 534e1b23b..31a3aa86e 100644
--- a/integration/tests_ok/assert_xpath.html
+++ b/integration/tests_ok/assert_xpath.html
@@ -49,4 +49,4 @@
xpath "//*[local-name()='book']/*[local-name()='notes']" count == 1
xpath "//_:book/_:notes/*[local-name()='p']" count == 1
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/assert_xpath.json b/integration/tests_ok/assert_xpath.json
index 650e62918..b30153aab 100644
--- a/integration/tests_ok/assert_xpath.json
+++ b/integration/tests_ok/assert_xpath.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-xpath"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"xpath","expr":"normalize-space(//data)"},"predicate":{"type":"equal","value":"café"}},{"query":{"type":"xpath","expr":"normalize-space(//data)"},"predicate":{"type":"equal","value":"café"}},{"query":{"type":"xpath","expr":"normalize-space(//data)"},"predicate":{"type":"greater","value":"CAFÉ"}},{"query":{"type":"xpath","expr":"//toto"},"predicate":{"not":true,"type":"exist"}}],"body":{"type":"xml","value":"café"}}},{"request":{"method":"GET","url":"http://localhost:8000/assert-xpath-simple-namespaces"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"xpath","expr":"string(//bk:book/bk:title)"},"predicate":{"type":"equal","value":"Cheaper by the Dozen"}},{"query":{"type":"xpath","expr":"string(//*[name()='bk:book']/*[name()='bk:title'])"},"predicate":{"type":"equal","value":"Cheaper by the Dozen"}},{"query":{"type":"xpath","expr":"string(//*[local-name()='book']/*[local-name()='title'])"},"predicate":{"type":"equal","value":"Cheaper by the Dozen"}},{"query":{"type":"xpath","expr":"string(//bk:book/isbn:number)"},"predicate":{"type":"equal","value":"1568491379"}},{"query":{"type":"xpath","expr":"string(//*[name()='bk:book']/*[name()='isbn:number'])"},"predicate":{"type":"equal","value":"1568491379"}},{"query":{"type":"xpath","expr":"string(//*[local-name()='book']/*[local-name()='number'])"},"predicate":{"type":"equal","value":"1568491379"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-xpath-svg"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"xpath","expr":"//_:svg/_:g/_:circle","subquery":{"type":"count"}},"predicate":{"type":"equal","value":3}},{"query":{"type":"xpath","expr":"//*[local-name()='svg']/*[local-name()='g']/*[local-name()='circle']","subquery":{"type":"count"}},"predicate":{"type":"equal","value":3}},{"query":{"type":"xpath","expr":"//*[name()='svg']/*[name()='g']/*[name()='circle']","subquery":{"type":"count"}},"predicate":{"type":"equal","value":3}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-xpath-namespaces"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"xpath","expr":"string(//_:book/_:title)"},"predicate":{"type":"equal","value":"Cheaper by the Dozen"}},{"query":{"type":"xpath","expr":"string(//_:book/_:title)"},"predicate":{"type":"greater","value":"Cheaper"}},{"query":{"type":"xpath","expr":"string(//_:book/isbn:number)"},"predicate":{"type":"equal","value":"1568491379"}},{"query":{"type":"xpath","expr":"//*[name()='book']/*[name()='notes']","subquery":{"type":"count"}},"predicate":{"type":"equal","value":1}},{"query":{"type":"xpath","expr":"//*[local-name()='book']/*[local-name()='notes']","subquery":{"type":"count"}},"predicate":{"type":"equal","value":1}},{"query":{"type":"xpath","expr":"//_:book/_:notes/*[local-name()='p']","subquery":{"type":"count"}},"predicate":{"type":"equal","value":1}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/assert-xpath"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"xpath","expr":"normalize-space(//data)"},"predicate":{"type":"equal","value":"café"}},{"query":{"type":"xpath","expr":"normalize-space(//data)"},"predicate":{"type":"equal","value":"café"}},{"query":{"type":"xpath","expr":"normalize-space(//data)"},"predicate":{"type":"greater","value":"CAFÉ"}},{"query":{"type":"xpath","expr":"//toto"},"predicate":{"not":true,"type":"exist"}}],"body":{"type":"xml","value":"café"}}},{"request":{"method":"GET","url":"http://localhost:8000/assert-xpath-simple-namespaces"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"xpath","expr":"string(//bk:book/bk:title)"},"predicate":{"type":"equal","value":"Cheaper by the Dozen"}},{"query":{"type":"xpath","expr":"string(//*[name()='bk:book']/*[name()='bk:title'])"},"predicate":{"type":"equal","value":"Cheaper by the Dozen"}},{"query":{"type":"xpath","expr":"string(//*[local-name()='book']/*[local-name()='title'])"},"predicate":{"type":"equal","value":"Cheaper by the Dozen"}},{"query":{"type":"xpath","expr":"string(//bk:book/isbn:number)"},"predicate":{"type":"equal","value":"1568491379"}},{"query":{"type":"xpath","expr":"string(//*[name()='bk:book']/*[name()='isbn:number'])"},"predicate":{"type":"equal","value":"1568491379"}},{"query":{"type":"xpath","expr":"string(//*[local-name()='book']/*[local-name()='number'])"},"predicate":{"type":"equal","value":"1568491379"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-xpath-svg"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"xpath","expr":"//_:svg/_:g/_:circle","subquery":{"type":"count"}},"predicate":{"type":"equal","value":3}},{"query":{"type":"xpath","expr":"//*[local-name()='svg']/*[local-name()='g']/*[local-name()='circle']","subquery":{"type":"count"}},"predicate":{"type":"equal","value":3}},{"query":{"type":"xpath","expr":"//*[name()='svg']/*[name()='g']/*[name()='circle']","subquery":{"type":"count"}},"predicate":{"type":"equal","value":3}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-xpath-namespaces"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"xpath","expr":"string(//_:book/_:title)"},"predicate":{"type":"equal","value":"Cheaper by the Dozen"}},{"query":{"type":"xpath","expr":"string(//_:book/_:title)"},"predicate":{"type":"greater","value":"Cheaper"}},{"query":{"type":"xpath","expr":"string(//_:book/isbn:number)"},"predicate":{"type":"equal","value":"1568491379"}},{"query":{"type":"xpath","expr":"//*[name()='book']/*[name()='notes']","subquery":{"type":"count"}},"predicate":{"type":"equal","value":1}},{"query":{"type":"xpath","expr":"//*[local-name()='book']/*[local-name()='notes']","subquery":{"type":"count"}},"predicate":{"type":"equal","value":1}},{"query":{"type":"xpath","expr":"//_:book/_:notes/*[local-name()='p']","subquery":{"type":"count"}},"predicate":{"type":"equal","value":1}}]}}]}
diff --git a/integration/tests_ok/basic_authentication.html b/integration/tests_ok/basic_authentication.html
index 4b37d0958..c048f6f3c 100644
--- a/integration/tests_ok/basic_authentication.html
+++ b/integration/tests_ok/basic_authentication.html
@@ -3,4 +3,4 @@
```You are authenticated```
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/basic_authentication.json b/integration/tests_ok/basic_authentication.json
index 9d2e66e3c..d86fd5eba 100644
--- a/integration/tests_ok/basic_authentication.json
+++ b/integration/tests_ok/basic_authentication.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/basic-authentication"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"You are authenticated"}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/basic-authentication"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"You are authenticated"}}}]}
diff --git a/integration/tests_ok/basic_authentication_per_request.html b/integration/tests_ok/basic_authentication_per_request.html
index 6a998dd26..0e344fdad 100644
--- a/integration/tests_ok/basic_authentication_per_request.html
+++ b/integration/tests_ok/basic_authentication_per_request.html
@@ -23,4 +23,4 @@
bob@email.com: secret
HTTP/1.0 200
```You are authenticated```
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/basic_authentication_per_request.json b/integration/tests_ok/basic_authentication_per_request.json
index 85a877a57..e56d0ca3e 100644
--- a/integration/tests_ok/basic_authentication_per_request.json
+++ b/integration/tests_ok/basic_authentication_per_request.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://bob%40email.com:secret@localhost:8000/basic-authentication-per-request"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"You are authenticated"}}},{"request":{"method":"GET","url":"http://localhost:8000/basic-authentication-per-request","headers":[{"name":"Authorization","value":"Basic Ym9iQGVtYWlsLmNvbTpzZWNyZXQ="}]},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"You are authenticated"}}},{"request":{"method":"GET","url":"http://localhost:8000/basic-authentication-per-request"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"You are authenticated"}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://bob%40email.com:secret@localhost:8000/basic-authentication-per-request"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"You are authenticated"}}},{"request":{"method":"GET","url":"http://localhost:8000/basic-authentication-per-request","headers":[{"name":"Authorization","value":"Basic Ym9iQGVtYWlsLmNvbTpzZWNyZXQ="}]},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"You are authenticated"}}},{"request":{"method":"GET","url":"http://localhost:8000/basic-authentication-per-request"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"You are authenticated"}}}]}
diff --git a/integration/tests_ok/bom.html b/integration/tests_ok/bom.html
index 98a27e754..b87e65b71 100644
--- a/integration/tests_ok/bom.html
+++ b/integration/tests_ok/bom.html
@@ -3,4 +3,4 @@
HTTP/1.0 200
```Hello World!```
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/bom.json b/integration/tests_ok/bom.json
index cea86d71e..1e22efb81 100644
--- a/integration/tests_ok/bom.json
+++ b/integration/tests_ok/bom.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/utf8_bom"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello World!"}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/utf8_bom"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello World!"}}}]}
diff --git a/integration/tests_ok/bytes.html b/integration/tests_ok/bytes.html
index 5d3174be8..913f89cf2 100644
--- a/integration/tests_ok/bytes.html
+++ b/integration/tests_ok/bytes.html
@@ -10,4 +10,4 @@
bytes contains hex,02;
sha256 == hex,039058c6f2c0cb492c533b0a4d14ef77cc0f78abccced5287d84a1a2011cfb81;
md5 == hex,5289df737df57326fcdd22597afb1fac;
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/bytes.json b/integration/tests_ok/bytes.json
index 7b856edad..3377d1dd8 100644
--- a/integration/tests_ok/bytes.json
+++ b/integration/tests_ok/bytes.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/bytes"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Type","value":"application/octet-stream"}],"asserts":[{"query":{"type":"bytes"},"predicate":{"type":"equal","value":"AQID","encoding":"base64"}},{"query":{"type":"bytes"},"predicate":{"type":"equal","value":"AQID","encoding":"base64"}},{"query":{"type":"bytes","subquery":{"type":"count"}},"predicate":{"type":"equal","value":3}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"AQ==","encoding":"base64"}},{"query":{"type":"bytes"},"predicate":{"type":"end-with","value":"Aw==","encoding":"base64"}},{"query":{"type":"bytes"},"predicate":{"type":"contain","value":"Ag==","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"A5BYxvLAy0ksUzsKTRTvd8wPeKvMztUofYShogEc+4E=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"Uonfc331cyb83SJZevsfrA==","encoding":"base64"}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/bytes"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Type","value":"application/octet-stream"}],"asserts":[{"query":{"type":"bytes"},"predicate":{"type":"equal","value":"AQID","encoding":"base64"}},{"query":{"type":"bytes"},"predicate":{"type":"equal","value":"AQID","encoding":"base64"}},{"query":{"type":"bytes","subquery":{"type":"count"}},"predicate":{"type":"equal","value":3}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"AQ==","encoding":"base64"}},{"query":{"type":"bytes"},"predicate":{"type":"end-with","value":"Aw==","encoding":"base64"}},{"query":{"type":"bytes"},"predicate":{"type":"contain","value":"Ag==","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"A5BYxvLAy0ksUzsKTRTvd8wPeKvMztUofYShogEc+4E=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"Uonfc331cyb83SJZevsfrA==","encoding":"base64"}}]}}]}
diff --git a/integration/tests_ok/capture_and_assert.html b/integration/tests_ok/capture_and_assert.html
index d9e73f200..962d161b3 100644
--- a/integration/tests_ok/capture_and_assert.html
+++ b/integration/tests_ok/capture_and_assert.html
@@ -6,4 +6,4 @@
header "content-type" == "{{content_type}}"
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/capture_and_assert.json b/integration/tests_ok/capture_and_assert.json
index c0226e70e..d796ede60 100644
--- a/integration/tests_ok/capture_and_assert.json
+++ b/integration/tests_ok/capture_and_assert.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/capture-and-assert"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"content_type","query":{"type":"header","name":"content-type"}}],"asserts":[{"query":{"type":"header","name":"content-type"},"predicate":{"type":"equal","value":"{{content_type}}"}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/capture-and-assert"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"content_type","query":{"type":"header","name":"content-type"}}],"asserts":[{"query":{"type":"header","name":"content-type"},"predicate":{"type":"equal","value":"{{content_type}}"}}]}}]}
diff --git a/integration/tests_ok/captures.html b/integration/tests_ok/captures.html
index 8c07a5f40..f0ca55462 100644
--- a/integration/tests_ok/captures.html
+++ b/integration/tests_ok/captures.html
@@ -42,4 +42,4 @@
variable "a_list" == {{a_list}}
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/captures.json b/integration/tests_ok/captures.json
index cc29bd147..8a9028888 100644
--- a/integration/tests_ok/captures.json
+++ b/integration/tests_ok/captures.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/captures"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"param1","query":{"type":"header","name":"header1"}},{"name":"param2","query":{"type":"header","name":"header2","subquery":{"type":"regex","expr":"Hello (.*)!"}}},{"name":"param3","query":{"type":"header","name":"header2","subquery":{"type":"regex","expr":{"type":"regex","value":"Hello (.*)!"}}}}],"asserts":[{"query":{"type":"variable","name":"param1"},"predicate":{"type":"equal","value":"value1"}},{"query":{"type":"variable","name":"param2"},"predicate":{"type":"equal","value":"Bob"}},{"query":{"type":"variable","name":"param3"},"predicate":{"type":"equal","value":"Bob"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/captures-check","query_string_params":[{"name":"param1","value":"{{param1}}"},{"name":"param2","value":"{{param2}}"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/captures-json"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"an_object","query":{"type":"jsonpath","expr":"$['an_object']"}},{"name":"a_list","query":{"type":"jsonpath","expr":"$['a_list']"}},{"name":"a_null","query":{"type":"jsonpath","expr":"$['a_null']"}},{"name":"an_integer","query":{"type":"jsonpath","expr":"$['an_integer']"}},{"name":"a_float","query":{"type":"jsonpath","expr":"$['a_float']"}},{"name":"a_bool","query":{"type":"jsonpath","expr":"$['a_bool']"}},{"name":"a_string","query":{"type":"jsonpath","expr":"$['a_string']"}},{"name":"all","query":{"type":"jsonpath","expr":"$"}}],"asserts":[{"query":{"type":"variable","name":"a_null"},"predicate":{"type":"exist"}},{"query":{"type":"variable","name":"undefined"},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"variable","name":"a_null"},"predicate":{"type":"equal","value":"a_null"}},{"query":{"type":"variable","name":"an_integer"},"predicate":{"type":"equal","value":"an_integer"}},{"query":{"type":"variable","name":"a_float"},"predicate":{"type":"equal","value":"a_float"}},{"query":{"type":"variable","name":"a_bool"},"predicate":{"type":"equal","value":"a_bool"}},{"query":{"type":"variable","name":"a_string"},"predicate":{"type":"equal","value":"a_string"}},{"query":{"type":"variable","name":"a_string"},"predicate":{"type":"equal","value":"{{a_string}}"}},{"query":{"type":"variable","name":"a_list"},"predicate":{"type":"equal","value":"a_list"}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/captures"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"param1","query":{"type":"header","name":"header1"}},{"name":"param2","query":{"type":"header","name":"header2","subquery":{"type":"regex","expr":"Hello (.*)!"}}},{"name":"param3","query":{"type":"header","name":"header2","subquery":{"type":"regex","expr":{"type":"regex","value":"Hello (.*)!"}}}}],"asserts":[{"query":{"type":"variable","name":"param1"},"predicate":{"type":"equal","value":"value1"}},{"query":{"type":"variable","name":"param2"},"predicate":{"type":"equal","value":"Bob"}},{"query":{"type":"variable","name":"param3"},"predicate":{"type":"equal","value":"Bob"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/captures-check","query_string_params":[{"name":"param1","value":"{{param1}}"},{"name":"param2","value":"{{param2}}"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/captures-json"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"an_object","query":{"type":"jsonpath","expr":"$['an_object']"}},{"name":"a_list","query":{"type":"jsonpath","expr":"$['a_list']"}},{"name":"a_null","query":{"type":"jsonpath","expr":"$['a_null']"}},{"name":"an_integer","query":{"type":"jsonpath","expr":"$['an_integer']"}},{"name":"a_float","query":{"type":"jsonpath","expr":"$['a_float']"}},{"name":"a_bool","query":{"type":"jsonpath","expr":"$['a_bool']"}},{"name":"a_string","query":{"type":"jsonpath","expr":"$['a_string']"}},{"name":"all","query":{"type":"jsonpath","expr":"$"}}],"asserts":[{"query":{"type":"variable","name":"a_null"},"predicate":{"type":"exist"}},{"query":{"type":"variable","name":"undefined"},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"variable","name":"a_null"},"predicate":{"type":"equal","value":"a_null"}},{"query":{"type":"variable","name":"an_integer"},"predicate":{"type":"equal","value":"an_integer"}},{"query":{"type":"variable","name":"a_float"},"predicate":{"type":"equal","value":"a_float"}},{"query":{"type":"variable","name":"a_bool"},"predicate":{"type":"equal","value":"a_bool"}},{"query":{"type":"variable","name":"a_string"},"predicate":{"type":"equal","value":"a_string"}},{"query":{"type":"variable","name":"a_string"},"predicate":{"type":"equal","value":"{{a_string}}"}},{"query":{"type":"variable","name":"a_list"},"predicate":{"type":"equal","value":"a_list"}}]}}]}
diff --git a/integration/tests_ok/charset.html b/integration/tests_ok/charset.html
new file mode 100644
index 000000000..0e69174f3
--- /dev/null
+++ b/integration/tests_ok/charset.html
@@ -0,0 +1,11 @@
+GET http://localhost:8000/charset/default
+HTTP/1.0 200
+Content-Type: text/html; charset=utf-8
+```<p>Hello World!</p>```
+
+GET http://localhost:8000/charset/uppercase
+HTTP/1.0 200
+Content-Type: text/html; charset=UTF-8
+[Asserts]
+body == "<p>Hello World!</p>"
+
diff --git a/integration/tests_ok/charset.json b/integration/tests_ok/charset.json
new file mode 100644
index 000000000..36f152b3e
--- /dev/null
+++ b/integration/tests_ok/charset.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/charset/default"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"}],"body":{"type":"raw-string","value":"Hello World!
"}}},{"request":{"method":"GET","url":"http://localhost:8000/charset/uppercase"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Type","value":"text/html; charset=UTF-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"equal","value":"Hello World!
"}}]}}]} diff --git a/integration/tests_ok/color.html b/integration/tests_ok/color.html index 904bf180c..cd70f46a7 100644 --- a/integration/tests_ok/color.html +++ b/integration/tests_ok/color.html @@ -1 +1,3 @@ -
\ No newline at end of file
+
+
+
diff --git a/integration/tests_ok/color.hurl b/integration/tests_ok/color.hurl
index e69de29bb..139597f9c 100644
--- a/integration/tests_ok/color.hurl
+++ b/integration/tests_ok/color.hurl
@@ -0,0 +1,2 @@
+
+
diff --git a/integration/tests_ok/color.json b/integration/tests_ok/color.json
index ea5f75f17..6a480c677 100644
--- a/integration/tests_ok/color.json
+++ b/integration/tests_ok/color.json
@@ -1 +1 @@
-{"entries":[]}
\ No newline at end of file
+{"entries":[]}
diff --git a/integration/tests_ok/compressed.html b/integration/tests_ok/compressed.html
index 06e3f2d29..b7924fbf9 100644
--- a/integration/tests_ok/compressed.html
+++ b/integration/tests_ok/compressed.html
@@ -141,4 +141,4 @@
sha256 == hex,7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069;
md5 == hex,ed076287532e86365e841e92bfc50d8c;
```Hello World!```
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/compressed.json b/integration/tests_ok/compressed.json
index 2482a3811..f70b91902 100644
--- a/integration/tests_ok/compressed.json
+++ b/integration/tests_ok/compressed.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"12"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"32"},{"name":"Content-Encoding","value":"gzip"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"20"},{"name":"Content-Encoding","value":"deflate"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"17"},{"name":"Content-Encoding","value":"br"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli_large"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Encoding","value":"br"},{"name":"Content-Type","value":"image/jpeg"}],"asserts":[{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"/9j/4A==","encoding":"base64"}}],"body":{"type":"file","filename":"cat.jpg"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli_identity"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"17"},{"name":"Content-Encoding","value":"br, identity"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"12"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"32"},{"name":"Content-Encoding","value":"gzip"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"20"},{"name":"Content-Encoding","value":"deflate"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"17"},{"name":"Content-Encoding","value":"br"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli_large"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Encoding","value":"br"},{"name":"Content-Type","value":"image/jpeg"}],"asserts":[{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"/9j/4A==","encoding":"base64"}}],"body":{"type":"file","filename":"cat.jpg"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli_identity"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"17"},{"name":"Content-Encoding","value":"br, identity"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}}]}
diff --git a/integration/tests_ok/cookie_file.html b/integration/tests_ok/cookie_file.html
index 01d04450e..6a18e72a4 100644
--- a/integration/tests_ok/cookie_file.html
+++ b/integration/tests_ok/cookie_file.html
@@ -1,3 +1,3 @@
GET http://localhost:8000/cookie_file
HTTP/* 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/cookie_file.json b/integration/tests_ok/cookie_file.json
index 926a97880..0baf2dff7 100644
--- a/integration/tests_ok/cookie_file.json
+++ b/integration/tests_ok/cookie_file.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/cookie_file"},"response":{"status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/cookie_file"},"response":{"status":200}}]}
diff --git a/integration/tests_ok/cookie_storage.html b/integration/tests_ok/cookie_storage.html
index e05215984..ac9005163 100644
--- a/integration/tests_ok/cookie_storage.html
+++ b/integration/tests_ok/cookie_storage.html
@@ -12,4 +12,4 @@
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/cookie_storage.json b/integration/tests_ok/cookie_storage.json
index 2cdf8eaaf..228348559 100644
--- a/integration/tests_ok/cookie_storage.json
+++ b/integration/tests_ok/cookie_storage.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/cookie-storage/assert-that-cookie1-is-valueA"},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/cookie-storage/assert-that-cookie1-is-not-in-session"},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/cookie-storage/assert-that-cookie1-is-valueA"},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/cookie-storage/assert-that-cookie1-is-not-in-session"},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/cookies.html b/integration/tests_ok/cookies.html
index abb774fdb..2661ba5d5 100644
--- a/integration/tests_ok/cookies.html
+++ b/integration/tests_ok/cookies.html
@@ -62,4 +62,4 @@
cookie "LSID[SameSite]" not exists
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/cookies.json b/integration/tests_ok/cookies.json
index d196e86ed..d69642e26 100644
--- a/integration/tests_ok/cookies.json
+++ b/integration/tests_ok/cookies.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/cookies/set-request-cookie1-valueA","cookies":[{"name":"cookie1","value":"valueA"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/assert-that-cookie1-is-not-in-session"},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/set-multiple-request-cookies","cookies":[{"name":"user1","value":"Bob"},{"name":"user2","value":"Bill"},{"name":"user3","value":"{{name}}"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/set-session-cookie2-valueA"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"cookie","expr":"cookie2"},"predicate":{"type":"equal","value":"valueA"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/assert-that-cookie2-is-valueA"},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/assert-that-cookie2-is-valueA-and-valueB","cookies":[{"name":"cookie2","value":"valueB"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/delete-cookie2"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"cookie","expr":"cookie2"},"predicate":{"type":"equal","value":""}},{"query":{"type":"cookie","expr":"cookie2[Max-Age]"},"predicate":{"type":"equal","value":0}}]}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/assert-that-cookie2-is-not-in-session"},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/set"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Set-Cookie","value":"LSID=DQAAAKEaem_vYg; Expires=Wed, 13 Jan 2021 22:23:01 GMT; Secure; HttpOnly; Path=/accounts"},{"name":"Set-Cookie","value":"HSID=AYQEVnDKrdst; Domain=.localhost; Expires=Wed, 13 Jan 2021 22:23:01 GMT; HttpOnly; Path=/"},{"name":"Set-Cookie","value":"SSID=Ap4PGTEq; Domain=.localhost; Expires=Wed, 13 Jan 2021 22:23:01 GMT; Secure; HttpOnly; Path=/"}],"asserts":[{"query":{"type":"header","name":"Set-Cookie","subquery":{"type":"count"}},"predicate":{"type":"equal","value":3}},{"query":{"type":"cookie","expr":"LSID"},"predicate":{"type":"equal","value":"DQAAAKEaem_vYg"}},{"query":{"type":"cookie","expr":"LSID[Value]"},"predicate":{"type":"equal","value":"DQAAAKEaem_vYg"}},{"query":{"type":"cookie","expr":"LSID[Expires]"},"predicate":{"type":"exist"}},{"query":{"type":"cookie","expr":"LSID[Expires]"},"predicate":{"type":"equal","value":"Wed, 13 Jan 2021 22:23:01 GMT"}},{"query":{"type":"cookie","expr":"LSID[Max-Age]"},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"cookie","expr":"LSID[Domain]"},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"cookie","expr":"LSID[Path]"},"predicate":{"type":"equal","value":"/accounts"}},{"query":{"type":"cookie","expr":"LSID[Secure]"},"predicate":{"type":"exist"}},{"query":{"type":"cookie","expr":"LSID[HttpOnly]"},"predicate":{"type":"exist"}},{"query":{"type":"cookie","expr":"LSID[SameSite]"},"predicate":{"not":true,"type":"exist"}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/cookies/set-request-cookie1-valueA","cookies":[{"name":"cookie1","value":"valueA"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/assert-that-cookie1-is-not-in-session"},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/set-multiple-request-cookies","cookies":[{"name":"user1","value":"Bob"},{"name":"user2","value":"Bill"},{"name":"user3","value":"{{name}}"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/set-session-cookie2-valueA"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"cookie","expr":"cookie2"},"predicate":{"type":"equal","value":"valueA"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/assert-that-cookie2-is-valueA"},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/assert-that-cookie2-is-valueA-and-valueB","cookies":[{"name":"cookie2","value":"valueB"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/delete-cookie2"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"cookie","expr":"cookie2"},"predicate":{"type":"equal","value":""}},{"query":{"type":"cookie","expr":"cookie2[Max-Age]"},"predicate":{"type":"equal","value":0}}]}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/assert-that-cookie2-is-not-in-session"},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/set"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Set-Cookie","value":"LSID=DQAAAKEaem_vYg; Expires=Wed, 13 Jan 2021 22:23:01 GMT; Secure; HttpOnly; Path=/accounts"},{"name":"Set-Cookie","value":"HSID=AYQEVnDKrdst; Domain=.localhost; Expires=Wed, 13 Jan 2021 22:23:01 GMT; HttpOnly; Path=/"},{"name":"Set-Cookie","value":"SSID=Ap4PGTEq; Domain=.localhost; Expires=Wed, 13 Jan 2021 22:23:01 GMT; Secure; HttpOnly; Path=/"}],"asserts":[{"query":{"type":"header","name":"Set-Cookie","subquery":{"type":"count"}},"predicate":{"type":"equal","value":3}},{"query":{"type":"cookie","expr":"LSID"},"predicate":{"type":"equal","value":"DQAAAKEaem_vYg"}},{"query":{"type":"cookie","expr":"LSID[Value]"},"predicate":{"type":"equal","value":"DQAAAKEaem_vYg"}},{"query":{"type":"cookie","expr":"LSID[Expires]"},"predicate":{"type":"exist"}},{"query":{"type":"cookie","expr":"LSID[Expires]"},"predicate":{"type":"equal","value":"Wed, 13 Jan 2021 22:23:01 GMT"}},{"query":{"type":"cookie","expr":"LSID[Max-Age]"},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"cookie","expr":"LSID[Domain]"},"predicate":{"not":true,"type":"exist"}},{"query":{"type":"cookie","expr":"LSID[Path]"},"predicate":{"type":"equal","value":"/accounts"}},{"query":{"type":"cookie","expr":"LSID[Secure]"},"predicate":{"type":"exist"}},{"query":{"type":"cookie","expr":"LSID[HttpOnly]"},"predicate":{"type":"exist"}},{"query":{"type":"cookie","expr":"LSID[SameSite]"},"predicate":{"not":true,"type":"exist"}}]}}]}
diff --git a/integration/tests_ok/delete.html b/integration/tests_ok/delete.html
index 72978f787..2789ca9af 100644
--- a/integration/tests_ok/delete.html
+++ b/integration/tests_ok/delete.html
@@ -1,4 +1,4 @@
DELETE http://localhost:8000/delete
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/delete.json b/integration/tests_ok/delete.json
index 468a73b03..99bab6a37 100644
--- a/integration/tests_ok/delete.json
+++ b/integration/tests_ok/delete.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"DELETE","url":"http://localhost:8000/delete"},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"DELETE","url":"http://localhost:8000/delete"},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/empty.html b/integration/tests_ok/empty.html
index 904bf180c..cd70f46a7 100644
--- a/integration/tests_ok/empty.html
+++ b/integration/tests_ok/empty.html
@@ -1 +1,3 @@
-
\ No newline at end of file
+
+
+
diff --git a/integration/tests_ok/empty.hurl b/integration/tests_ok/empty.hurl
index e69de29bb..139597f9c 100644
--- a/integration/tests_ok/empty.hurl
+++ b/integration/tests_ok/empty.hurl
@@ -0,0 +1,2 @@
+
+
diff --git a/integration/tests_ok/empty.json b/integration/tests_ok/empty.json
index ea5f75f17..6a480c677 100644
--- a/integration/tests_ok/empty.json
+++ b/integration/tests_ok/empty.json
@@ -1 +1 @@
-{"entries":[]}
\ No newline at end of file
+{"entries":[]}
diff --git a/integration/tests_ok/encoding.html b/integration/tests_ok/encoding.html
index 5075ee698..c1deb8766 100644
--- a/integration/tests_ok/encoding.html
+++ b/integration/tests_ok/encoding.html
@@ -12,4 +12,4 @@
body == "caf\u{e9}"
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/encoding.json b/integration/tests_ok/encoding.json
index cace082c6..7e9ca6e45 100644
--- a/integration/tests_ok/encoding.json
+++ b/integration/tests_ok/encoding.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/encoding/utf8"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"equal","value":"café"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/encoding/latin1"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Type","value":"text/html; charset=ISO-8859-1"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"equal","value":"café"}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/encoding/utf8"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"equal","value":"café"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/encoding/latin1"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Type","value":"text/html; charset=ISO-8859-1"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"equal","value":"café"}}]}}]}
diff --git a/integration/tests_ok/env_var.html b/integration/tests_ok/env_var.html
index e6232ab29..f57df9d71 100644
--- a/integration/tests_ok/env_var.html
+++ b/integration/tests_ok/env_var.html
@@ -3,4 +3,4 @@
name: {{name}}
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/env_var.json b/integration/tests_ok/env_var.json
index 7fe585df7..1c9e98189 100644
--- a/integration/tests_ok/env_var.json
+++ b/integration/tests_ok/env_var.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/env-var","query_string_params":[{"name":"name","value":"{{name}}"}]},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/env-var","query_string_params":[{"name":"name","value":"{{name}}"}]},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/expect.html b/integration/tests_ok/expect.html
index 42959359b..2820e2851 100644
--- a/integration/tests_ok/expect.html
+++ b/integration/tests_ok/expect.html
@@ -6,4 +6,4 @@
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/expect.json b/integration/tests_ok/expect.json
index d3885a232..bda6c4745 100644
--- a/integration/tests_ok/expect.json
+++ b/integration/tests_ok/expect.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/expect","headers":[{"name":"Expect","value":"100-continue"}],"body":{"type":"raw-string","value":"data"}},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/expect","headers":[{"name":"Expect","value":"100-continue"}],"body":{"type":"raw-string","value":"data"}},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/float.html b/integration/tests_ok/float.html
index d6c3d5cc1..2995bac20 100644
--- a/integration/tests_ok/float.html
+++ b/integration/tests_ok/float.html
@@ -19,4 +19,4 @@
jsonpath "$[11]" == 1.1
jsonpath "$[12]" == 1.5
[ -2.2, 0.0, 0.0000000000000001, 0.000000000000001, 0.333, 0.3333333333333333, 0.333333333333333333, 1.0, 1.001, 1.07, 1.070, 1.1, 1.5 ]
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/float.json b/integration/tests_ok/float.json
index 13f5a534a..bc82cd366 100644
--- a/integration/tests_ok/float.json
+++ b/integration/tests_ok/float.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/float"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$[1]"},"predicate":{"type":"equal","value":0.0}},{"query":{"type":"jsonpath","expr":"$[2]"},"predicate":{"type":"equal","value":0.0}},{"query":{"type":"jsonpath","expr":"$[2]"},"predicate":{"type":"equal","value":0.0000000000000001}},{"query":{"type":"jsonpath","expr":"$[3]"},"predicate":{"type":"equal","value":0.000000000000001}},{"query":{"type":"jsonpath","expr":"$[4]"},"predicate":{"type":"equal","value":0.333}},{"query":{"type":"jsonpath","expr":"$[4]"},"predicate":{"type":"not-equal","value":0.3333333333333333}},{"query":{"type":"jsonpath","expr":"$[5]"},"predicate":{"type":"equal","value":0.3333333333333333}},{"query":{"type":"jsonpath","expr":"$[5]"},"predicate":{"type":"equal","value":0.333333333333333333}},{"query":{"type":"jsonpath","expr":"$[6]"},"predicate":{"type":"equal","value":0.333333333333333333}},{"query":{"type":"jsonpath","expr":"$[7]"},"predicate":{"type":"equal","value":1.0}},{"query":{"type":"jsonpath","expr":"$[7]"},"predicate":{"type":"equal","value":1}},{"query":{"type":"jsonpath","expr":"$[8]"},"predicate":{"type":"equal","value":1.001}},{"query":{"type":"jsonpath","expr":"$[9]"},"predicate":{"type":"equal","value":1.07}},{"query":{"type":"jsonpath","expr":"$[9]"},"predicate":{"type":"equal","value":1.070}},{"query":{"type":"jsonpath","expr":"$[10]"},"predicate":{"type":"equal","value":1.07}},{"query":{"type":"jsonpath","expr":"$[11]"},"predicate":{"type":"equal","value":1.1}},{"query":{"type":"jsonpath","expr":"$[12]"},"predicate":{"type":"equal","value":1.5}}],"body":{"type":"json","value":[-2.2,0.0,0.0000000000000001,0.000000000000001,0.333,0.3333333333333333,0.333333333333333333,1.0,1.001,1.07,1.070,1.1,1.5]}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/float"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$[1]"},"predicate":{"type":"equal","value":0.0}},{"query":{"type":"jsonpath","expr":"$[2]"},"predicate":{"type":"equal","value":0.0}},{"query":{"type":"jsonpath","expr":"$[2]"},"predicate":{"type":"equal","value":0.0000000000000001}},{"query":{"type":"jsonpath","expr":"$[3]"},"predicate":{"type":"equal","value":0.000000000000001}},{"query":{"type":"jsonpath","expr":"$[4]"},"predicate":{"type":"equal","value":0.333}},{"query":{"type":"jsonpath","expr":"$[4]"},"predicate":{"type":"not-equal","value":0.3333333333333333}},{"query":{"type":"jsonpath","expr":"$[5]"},"predicate":{"type":"equal","value":0.3333333333333333}},{"query":{"type":"jsonpath","expr":"$[5]"},"predicate":{"type":"equal","value":0.333333333333333333}},{"query":{"type":"jsonpath","expr":"$[6]"},"predicate":{"type":"equal","value":0.333333333333333333}},{"query":{"type":"jsonpath","expr":"$[7]"},"predicate":{"type":"equal","value":1.0}},{"query":{"type":"jsonpath","expr":"$[7]"},"predicate":{"type":"equal","value":1}},{"query":{"type":"jsonpath","expr":"$[8]"},"predicate":{"type":"equal","value":1.001}},{"query":{"type":"jsonpath","expr":"$[9]"},"predicate":{"type":"equal","value":1.07}},{"query":{"type":"jsonpath","expr":"$[9]"},"predicate":{"type":"equal","value":1.070}},{"query":{"type":"jsonpath","expr":"$[10]"},"predicate":{"type":"equal","value":1.07}},{"query":{"type":"jsonpath","expr":"$[11]"},"predicate":{"type":"equal","value":1.1}},{"query":{"type":"jsonpath","expr":"$[12]"},"predicate":{"type":"equal","value":1.5}}],"body":{"type":"json","value":[-2.2,0.0,0.0000000000000001,0.000000000000001,0.333,0.3333333333333333,0.333333333333333333,1.0,1.001,1.07,1.070,1.1,1.5]}}}]}
diff --git a/integration/tests_ok/follow_redirect.html b/integration/tests_ok/follow_redirect.html
index 752118238..536e964ab 100644
--- a/integration/tests_ok/follow_redirect.html
+++ b/integration/tests_ok/follow_redirect.html
@@ -1,3 +1,5 @@
GET http://localhost:8000/follow-redirect
HTTP/1.0 200
-```Followed redirect!```
\ No newline at end of file
+```Followed redirect!```
+
+
diff --git a/integration/tests_ok/follow_redirect.hurl b/integration/tests_ok/follow_redirect.hurl
index 115e1e5a2..29fb369cb 100644
--- a/integration/tests_ok/follow_redirect.hurl
+++ b/integration/tests_ok/follow_redirect.hurl
@@ -1,3 +1,4 @@
GET http://localhost:8000/follow-redirect
HTTP/1.0 200
-```Followed redirect!```
\ No newline at end of file
+```Followed redirect!```
+
diff --git a/integration/tests_ok/follow_redirect.json b/integration/tests_ok/follow_redirect.json
index 5daa9619d..04f720056 100644
--- a/integration/tests_ok/follow_redirect.json
+++ b/integration/tests_ok/follow_redirect.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/follow-redirect"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Followed redirect!"}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/follow-redirect"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Followed redirect!"}}}]}
diff --git a/integration/tests_ok/form_params.html b/integration/tests_ok/form_params.html
index f99643714..10c0e9fcd 100644
--- a/integration/tests_ok/form_params.html
+++ b/integration/tests_ok/form_params.html
@@ -17,4 +17,4 @@
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/form_params.json b/integration/tests_ok/form_params.json
index 1143348f9..73f64d314 100644
--- a/integration/tests_ok/form_params.json
+++ b/integration/tests_ok/form_params.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/form-params","form_params":[{"name":"param1","value":"value1"},{"name":"param2","value":""},{"name":"param3","value":"a=b"},{"name":"param4","value":"a%3db"},{"name":"values[0]","value":"0"},{"name":"values[1]","value":"1"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/form-params","headers":[{"name":"Content-Type","value":"application/x-www-form-urlencoded"}],"body":{"type":"raw-string","value":"param1=value1¶m2=¶m3=a%3db¶m4=a%253db&values[0]=0&values[1]=1"}},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/form-params","form_params":[{"name":"param1","value":"value1"},{"name":"param2","value":""},{"name":"param3","value":"a=b"},{"name":"param4","value":"a%3db"},{"name":"values[0]","value":"0"},{"name":"values[1]","value":"1"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/form-params","headers":[{"name":"Content-Type","value":"application/x-www-form-urlencoded"}],"body":{"type":"raw-string","value":"param1=value1¶m2=¶m3=a%3db¶m4=a%253db&values[0]=0&values[1]=1"}},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/head.html b/integration/tests_ok/head.html
index bea83ed6d..f6fb7f161 100644
--- a/integration/tests_ok/head.html
+++ b/integration/tests_ok/head.html
@@ -6,4 +6,4 @@
[Asserts]
bytes count == 0
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/head.json b/integration/tests_ok/head.json
index 372de3468..49ab9c927 100644
--- a/integration/tests_ok/head.json
+++ b/integration/tests_ok/head.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"HEAD","url":"http://localhost:8000/head"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"10"},{"name":"Server","value":"Flask Server"}],"asserts":[{"query":{"type":"bytes","subquery":{"type":"count"}},"predicate":{"type":"equal","value":0}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"HEAD","url":"http://localhost:8000/head"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"10"},{"name":"Server","value":"Flask Server"}],"asserts":[{"query":{"type":"bytes","subquery":{"type":"count"}},"predicate":{"type":"equal","value":0}}]}}]}
diff --git a/integration/tests_ok/headers.html b/integration/tests_ok/headers.html
index 787ec83dc..6b5d4ce73 100644
--- a/integration/tests_ok/headers.html
+++ b/integration/tests_ok/headers.html
@@ -35,4 +35,4 @@
GET http://localhost:8000/response-headers
HTTP/1.0 200
Beverage: cafe # TBC send utf8
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/headers.json b/integration/tests_ok/headers.json
index 0e830d573..e20646150 100644
--- a/integration/tests_ok/headers.json
+++ b/integration/tests_ok/headers.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/default-headers"},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/default-headers","headers":[{"name":"User-Agent","value":"hurl/1.0"},{"name":"Host","value":"localhost:8000"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/default-headers","headers":[{"name":"User-Agent","value":"hurl/1.0"},{"name":"Host","value":"localhost:8000"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/custom-headers","headers":[{"name":"Fruit","value":"Raspberry"},{"name":"Fruit","value":"Apple"},{"name":"Fruit","value":"Banana"},{"name":"Fruit","value":"Grape"},{"name":"Color","value":"Green"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/custom-headers-utf8","headers":[{"name":"Beverage","value":"café"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/custom-headers-value","headers":[{"name":"Id","value":"#123"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/custom-headers-quote","headers":[{"name":"Header1","value":"'"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/response-headers"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Beverage","value":"cafe"}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/default-headers"},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/default-headers","headers":[{"name":"User-Agent","value":"hurl/1.0"},{"name":"Host","value":"localhost:8000"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/default-headers","headers":[{"name":"User-Agent","value":"hurl/1.0"},{"name":"Host","value":"localhost:8000"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/custom-headers","headers":[{"name":"Fruit","value":"Raspberry"},{"name":"Fruit","value":"Apple"},{"name":"Fruit","value":"Banana"},{"name":"Fruit","value":"Grape"},{"name":"Color","value":"Green"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/custom-headers-utf8","headers":[{"name":"Beverage","value":"café"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/custom-headers-value","headers":[{"name":"Id","value":"#123"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/custom-headers-quote","headers":[{"name":"Header1","value":"'"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/response-headers"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Beverage","value":"cafe"}]}}]}
diff --git a/integration/tests_ok/hello.html b/integration/tests_ok/hello.html
index 9d0342cf0..3c26e144b 100644
--- a/integration/tests_ok/hello.html
+++ b/integration/tests_ok/hello.html
@@ -13,4 +13,4 @@
GET http://localhost:8000/hello
HTTP/1.0 200
base64, SGVsbG8gV29ybGQh;
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/hello.json b/integration/tests_ok/hello.json
index 8042874a9..08de89845 100644
--- a/integration/tests_ok/hello.json
+++ b/integration/tests_ok/hello.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"data.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"data.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}}]}
diff --git a/integration/tests_ok/ignore_asserts.html b/integration/tests_ok/ignore_asserts.html
index 7842b048a..f48c35bdd 100644
--- a/integration/tests_ok/ignore_asserts.html
+++ b/integration/tests_ok/ignore_asserts.html
@@ -5,4 +5,4 @@
body == "Whatever"
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/ignore_asserts.json b/integration/tests_ok/ignore_asserts.json
index e2ccdc574..03d1bf6dd 100644
--- a/integration/tests_ok/ignore_asserts.json
+++ b/integration/tests_ok/ignore_asserts.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/ignore_asserts"},"response":{"version":"HTTP/1.0","status":666,"asserts":[{"query":{"type":"body"},"predicate":{"type":"equal","value":"Whatever"}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/ignore_asserts"},"response":{"version":"HTTP/1.0","status":666,"asserts":[{"query":{"type":"body"},"predicate":{"type":"equal","value":"Whatever"}}]}}]}
diff --git a/integration/tests_ok/include.html b/integration/tests_ok/include.html
index 3ee6960f3..0b652730b 100644
--- a/integration/tests_ok/include.html
+++ b/integration/tests_ok/include.html
@@ -3,4 +3,4 @@
HTTP/1.0 200
```Hello```
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/include.json b/integration/tests_ok/include.json
index 738f40aeb..dc726439b 100644
--- a/integration/tests_ok/include.json
+++ b/integration/tests_ok/include.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/include"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello"}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/include"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello"}}}]}
diff --git a/integration/tests_ok/json_output.html b/integration/tests_ok/json_output.html
index 72c8109f2..0bf0f81d8 100644
--- a/integration/tests_ok/json_output.html
+++ b/integration/tests_ok/json_output.html
@@ -56,4 +56,4 @@
jsonpath "$.tags" not includes null
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/json_output.json b/integration/tests_ok/json_output.json
index d1eea2010..4bb52253c 100644
--- a/integration/tests_ok/json_output.json
+++ b/integration/tests_ok/json_output.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/set-session-cookie2-valueA"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"cookie","expr":"cookie2"},"predicate":{"type":"equal","value":"valueA"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/follow-redirect"},"response":{"version":"HTTP/1.0","status":302,"asserts":[{"query":{"type":"header","name":"Location"},"predicate":{"type":"equal","value":"http://localhost:8000/following-redirect"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/follow-redirect"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"header","name":"Location"},"predicate":{"not":true,"type":"exist"}}],"body":{"type":"raw-string","value":"Followed redirect!"}}},{"request":{"method":"GET","url":"http://localhost:8000/captures"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"param1","query":{"type":"header","name":"header1"}},{"name":"param2","query":{"type":"header","name":"header2","subquery":{"type":"regex","expr":"Hello (.*)!"}}},{"name":"param3","query":{"type":"header","name":"header2","subquery":{"type":"regex","expr":{"type":"regex","value":"Hello (.*)!"}}}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-json"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.errors[1].id"},"predicate":{"type":"equal","value":"error2"}},{"query":{"type":"jsonpath","expr":"$.tags"},"predicate":{"type":"include","value":"test"}},{"query":{"type":"jsonpath","expr":"$.tags"},"predicate":{"not":true,"type":"include","value":"prod"}},{"query":{"type":"jsonpath","expr":"$.tags"},"predicate":{"not":true,"type":"include","value":null}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/cookies/set-session-cookie2-valueA"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"cookie","expr":"cookie2"},"predicate":{"type":"equal","value":"valueA"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/follow-redirect"},"response":{"version":"HTTP/1.0","status":302,"asserts":[{"query":{"type":"header","name":"Location"},"predicate":{"type":"equal","value":"http://localhost:8000/following-redirect"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/follow-redirect"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"header","name":"Location"},"predicate":{"not":true,"type":"exist"}}],"body":{"type":"raw-string","value":"Followed redirect!"}}},{"request":{"method":"GET","url":"http://localhost:8000/captures"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"param1","query":{"type":"header","name":"header1"}},{"name":"param2","query":{"type":"header","name":"header2","subquery":{"type":"regex","expr":"Hello (.*)!"}}},{"name":"param3","query":{"type":"header","name":"header2","subquery":{"type":"regex","expr":{"type":"regex","value":"Hello (.*)!"}}}}]}},{"request":{"method":"GET","url":"http://localhost:8000/assert-json"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.errors[1].id"},"predicate":{"type":"equal","value":"error2"}},{"query":{"type":"jsonpath","expr":"$.tags"},"predicate":{"type":"include","value":"test"}},{"query":{"type":"jsonpath","expr":"$.tags"},"predicate":{"not":true,"type":"include","value":"prod"}},{"query":{"type":"jsonpath","expr":"$.tags"},"predicate":{"not":true,"type":"include","value":null}}]}}]}
diff --git a/integration/tests_ok/large.html b/integration/tests_ok/large.html
index 93a54330b..e00fdb3b9 100644
--- a/integration/tests_ok/large.html
+++ b/integration/tests_ok/large.html
@@ -9,4 +9,4 @@
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/multilines.html b/integration/tests_ok/multilines.html
index a2e68fe8b..6755f7035 100644
--- a/integration/tests_ok/multilines.html
+++ b/integration/tests_ok/multilines.html
@@ -12,4 +12,4 @@
line3
```
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/multilines.json b/integration/tests_ok/multilines.json
index adda29e8d..dd7ecf39b 100644
--- a/integration/tests_ok/multilines.json
+++ b/integration/tests_ok/multilines.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/multilines"},"response":{"status":200,"asserts":[{"query":{"type":"body"},"predicate":{"type":"equal","value":"line1\nline2\nline3\n"}},{"query":{"type":"body"},"predicate":{"type":"equal","value":"line1\nline2\nline3\n"}},{"query":{"type":"body"},"predicate":{"type":"equal","value":"line1\nline2\nline3\n"}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/multilines"},"response":{"status":200,"asserts":[{"query":{"type":"body"},"predicate":{"type":"equal","value":"line1\nline2\nline3\n"}},{"query":{"type":"body"},"predicate":{"type":"equal","value":"line1\nline2\nline3\n"}},{"query":{"type":"body"},"predicate":{"type":"equal","value":"line1\nline2\nline3\n"}}]}}]}
diff --git a/integration/tests_ok/multipart_form_data.html b/integration/tests_ok/multipart_form_data.html
index dac9d680f..346e0e10b 100644
--- a/integration/tests_ok/multipart_form_data.html
+++ b/integration/tests_ok/multipart_form_data.html
@@ -9,4 +9,4 @@
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/multipart_form_data.json b/integration/tests_ok/multipart_form_data.json
index 6afd992bd..053e9dfc4 100644
--- a/integration/tests_ok/multipart_form_data.json
+++ b/integration/tests_ok/multipart_form_data.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/multipart-form-data","multipart_form_data":[{"name":"key1","value":"value1"},{"name":"upload1","filename":"data.txt"},{"name":"upload2","filename":"data.html"},{"name":"upload3","filename":"data.txt","content_type":"text/html"}]},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/multipart-form-data","multipart_form_data":[{"name":"key1","value":"value1"},{"name":"upload1","filename":"data.txt"},{"name":"upload2","filename":"data.html"},{"name":"upload3","filename":"data.txt","content_type":"text/html"}]},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/no_entry.html b/integration/tests_ok/no_entry.html
index 241e33920..548c41a80 100644
--- a/integration/tests_ok/no_entry.html
+++ b/integration/tests_ok/no_entry.html
@@ -1,3 +1,3 @@
# all the entries
# have been commented
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/no_entry.json b/integration/tests_ok/no_entry.json
index ea5f75f17..6a480c677 100644
--- a/integration/tests_ok/no_entry.json
+++ b/integration/tests_ok/no_entry.json
@@ -1 +1 @@
-{"entries":[]}
\ No newline at end of file
+{"entries":[]}
diff --git a/integration/tests_ok/non_utf8.html b/integration/tests_ok/non_utf8.html
index 1fd7679c4..ee4916c23 100644
--- a/integration/tests_ok/non_utf8.html
+++ b/integration/tests_ok/non_utf8.html
@@ -1,4 +1,4 @@
GET http://localhost:8000/non-utf8
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/non_utf8.json b/integration/tests_ok/non_utf8.json
index 5f1a95a54..186ff9aab 100644
--- a/integration/tests_ok/non_utf8.json
+++ b/integration/tests_ok/non_utf8.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/non-utf8"},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/non-utf8"},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/option_compressed.html b/integration/tests_ok/option_compressed.html
index 28ea030b5..2d6477993 100644
--- a/integration/tests_ok/option_compressed.html
+++ b/integration/tests_ok/option_compressed.html
@@ -210,4 +210,4 @@
sha256 == hex,7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069;
md5 == hex,ed076287532e86365e841e92bfc50d8c;
```Hello World!```
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/option_compressed.json b/integration/tests_ok/option_compressed.json
index da8e15371..a6e6c2d87 100644
--- a/integration/tests_ok/option_compressed.json
+++ b/integration/tests_ok/option_compressed.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"12"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"12"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"32"},{"name":"Content-Encoding","value":"gzip"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"20"},{"name":"Content-Encoding","value":"deflate"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"17"},{"name":"Content-Encoding","value":"br"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli_large"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Encoding","value":"br"},{"name":"Content-Type","value":"image/jpeg"}],"asserts":[{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"/9j/4A==","encoding":"base64"}}],"body":{"type":"file","filename":"cat.jpg"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli_identity"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"17"},{"name":"Content-Encoding","value":"br, identity"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"12"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"12"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/none"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"32"},{"name":"Content-Encoding","value":"gzip"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/gzip"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"20"},{"name":"Content-Encoding","value":"deflate"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/zlib"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"17"},{"name":"Content-Encoding","value":"br"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"file","filename":"hello.txt"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli_large"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Encoding","value":"br"},{"name":"Content-Type","value":"image/jpeg"}],"asserts":[{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"/9j/4A==","encoding":"base64"}}],"body":{"type":"file","filename":"cat.jpg"}}},{"request":{"method":"GET","url":"http://localhost:8000/compressed/brotli_identity"},"response":{"version":"HTTP/1.0","status":200,"headers":[{"name":"Content-Length","value":"17"},{"name":"Content-Encoding","value":"br, identity"},{"name":"Content-Type","value":"text/html; charset=utf-8"}],"asserts":[{"query":{"type":"body"},"predicate":{"type":"start-with","value":"Hello"}},{"query":{"type":"bytes"},"predicate":{"type":"start-with","value":"SGVsbG8=","encoding":"base64"}},{"query":{"type":"sha256"},"predicate":{"type":"equal","value":"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=","encoding":"base64"}},{"query":{"type":"md5"},"predicate":{"type":"equal","value":"7Qdih1MuhjZehB6Sv8UNjA==","encoding":"base64"}}],"body":{"type":"raw-string","value":"Hello World!"}}}]}
diff --git a/integration/tests_ok/option_follow_redirect.html b/integration/tests_ok/option_follow_redirect.html
index d40315d3b..a9ca378d5 100644
--- a/integration/tests_ok/option_follow_redirect.html
+++ b/integration/tests_ok/option_follow_redirect.html
@@ -24,4 +24,4 @@
header "Location" not exists
```Followed redirect!```
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/option_follow_redirect.json b/integration/tests_ok/option_follow_redirect.json
index 1ac379f7c..c09cfb0b3 100644
--- a/integration/tests_ok/option_follow_redirect.json
+++ b/integration/tests_ok/option_follow_redirect.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/follow-redirect"},"response":{"version":"HTTP/1.0","status":302,"asserts":[{"query":{"type":"header","name":"Location"},"predicate":{"type":"equal","value":"http://localhost:8000/following-redirect"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/follow-redirect"},"response":{"version":"HTTP/1.0","status":302,"asserts":[{"query":{"type":"header","name":"Location"},"predicate":{"type":"equal","value":"http://localhost:8000/following-redirect"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/follow-redirect"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"header","name":"Location"},"predicate":{"not":true,"type":"exist"}}],"body":{"type":"raw-string","value":"Followed redirect!"}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/follow-redirect"},"response":{"version":"HTTP/1.0","status":302,"asserts":[{"query":{"type":"header","name":"Location"},"predicate":{"type":"equal","value":"http://localhost:8000/following-redirect"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/follow-redirect"},"response":{"version":"HTTP/1.0","status":302,"asserts":[{"query":{"type":"header","name":"Location"},"predicate":{"type":"equal","value":"http://localhost:8000/following-redirect"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/follow-redirect"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"header","name":"Location"},"predicate":{"not":true,"type":"exist"}}],"body":{"type":"raw-string","value":"Followed redirect!"}}}]}
diff --git a/integration/tests_ok/option_insecure.html b/integration/tests_ok/option_insecure.html
index b829c88a5..ac2a48b05 100644
--- a/integration/tests_ok/option_insecure.html
+++ b/integration/tests_ok/option_insecure.html
@@ -4,4 +4,5 @@
insecure: false
HTTP/* 200
-```Hello World!```
\ No newline at end of file
+```Hello World!```
+
diff --git a/integration/tests_ok/option_insecure.hurl b/integration/tests_ok/option_insecure.hurl
index d8c87ac04..e8e9ca3a6 100644
--- a/integration/tests_ok/option_insecure.hurl
+++ b/integration/tests_ok/option_insecure.hurl
@@ -4,4 +4,4 @@ GET http://localhost:8000/hello
insecure: false
HTTP/* 200
-```Hello World!```
\ No newline at end of file
+```Hello World!```
diff --git a/integration/tests_ok/option_insecure.json b/integration/tests_ok/option_insecure.json
index d0b989fd8..3cdd5d5a2 100644
--- a/integration/tests_ok/option_insecure.json
+++ b/integration/tests_ok/option_insecure.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"status":200,"body":{"type":"raw-string","value":"Hello World!"}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"status":200,"body":{"type":"raw-string","value":"Hello World!"}}}]}
diff --git a/integration/tests_ok/option_retry.html b/integration/tests_ok/option_retry.html
index 02de95d04..753e0e707 100644
--- a/integration/tests_ok/option_retry.html
+++ b/integration/tests_ok/option_retry.html
@@ -25,4 +25,4 @@
GET http://localhost:8000/jobs/{{job_id}}
HTTP/* 404
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/option_retry.json b/integration/tests_ok/option_retry.json
index 182e718ea..a11516674 100644
--- a/integration/tests_ok/option_retry.json
+++ b/integration/tests_ok/option_retry.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/jobs"},"response":{"status":201,"captures":[{"name":"job_id","query":{"type":"jsonpath","expr":"$.id"}}],"asserts":[{"query":{"type":"jsonpath","expr":"$.state"},"predicate":{"type":"equal","value":"RUNNING"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/jobs/{{job_id}}"},"response":{"status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.state"},"predicate":{"type":"equal","value":"COMPLETED"}}]}},{"request":{"method":"DELETE","url":"http://localhost:8000/jobs/{{job_id}}"},"response":{"status":200}},{"request":{"method":"GET","url":"http://localhost:8000/jobs/{{job_id}}"},"response":{"status":404}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/jobs"},"response":{"status":201,"captures":[{"name":"job_id","query":{"type":"jsonpath","expr":"$.id"}}],"asserts":[{"query":{"type":"jsonpath","expr":"$.state"},"predicate":{"type":"equal","value":"RUNNING"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/jobs/{{job_id}}"},"response":{"status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.state"},"predicate":{"type":"equal","value":"COMPLETED"}}]}},{"request":{"method":"DELETE","url":"http://localhost:8000/jobs/{{job_id}}"},"response":{"status":200}},{"request":{"method":"GET","url":"http://localhost:8000/jobs/{{job_id}}"},"response":{"status":404}}]}
diff --git a/integration/tests_ok/option_verbose.html b/integration/tests_ok/option_verbose.html
index 986d7d0b7..9a665c2db 100644
--- a/integration/tests_ok/option_verbose.html
+++ b/integration/tests_ok/option_verbose.html
@@ -12,4 +12,4 @@
GET http://localhost:8000/hello
[Options]
very-verbose: true
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/option_verbose.json b/integration/tests_ok/option_verbose.json
index 37c1790cb..cf2fbc51b 100644
--- a/integration/tests_ok/option_verbose.json
+++ b/integration/tests_ok/option_verbose.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/hello"}},{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"status":200,"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/hello"}},{"request":{"method":"GET","url":"http://localhost:8000/hello"}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/hello"}},{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"status":200,"body":{"type":"raw-string","value":"Hello World!"}}},{"request":{"method":"GET","url":"http://localhost:8000/hello"}},{"request":{"method":"GET","url":"http://localhost:8000/hello"}}]}
diff --git a/integration/tests_ok/output.html b/integration/tests_ok/output.html
index c27ed3550..80fd20759 100644
--- a/integration/tests_ok/output.html
+++ b/integration/tests_ok/output.html
@@ -6,4 +6,4 @@
GET http://localhost:8000/output/endpoint2
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/output.json b/integration/tests_ok/output.json
index ac3283bfa..931ee99e9 100644
--- a/integration/tests_ok/output.json
+++ b/integration/tests_ok/output.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/output/endpoint1","body":{"type":"json","value":{"user":"bob"}}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/output/endpoint2"},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/output/endpoint1","body":{"type":"json","value":{"user":"bob"}}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/output/endpoint2"},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/patch.html b/integration/tests_ok/patch.html
index 919a9ebb8..a708413de 100644
--- a/integration/tests_ok/patch.html
+++ b/integration/tests_ok/patch.html
@@ -10,4 +10,4 @@
ETag: "e0023aa4f"
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/patch.json b/integration/tests_ok/patch.json
index eec45047b..995569f7c 100644
--- a/integration/tests_ok/patch.json
+++ b/integration/tests_ok/patch.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"PATCH","url":"http://localhost:8000/patch/file.txt","headers":[{"name":"Host","value":"www.example.com"},{"name":"Content-Type","value":"application/example"},{"name":"If-Match","value":"\"e0023aa4e\""}]},"response":{"version":"HTTP/1.0","status":204,"headers":[{"name":"Content-Location","value":"/file.txt"},{"name":"ETag","value":"\"e0023aa4f\""}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"PATCH","url":"http://localhost:8000/patch/file.txt","headers":[{"name":"Host","value":"www.example.com"},{"name":"Content-Type","value":"application/example"},{"name":"If-Match","value":"\"e0023aa4e\""}]},"response":{"version":"HTTP/1.0","status":204,"headers":[{"name":"Content-Location","value":"/file.txt"},{"name":"ETag","value":"\"e0023aa4f\""}]}}]}
diff --git a/integration/tests_ok/post_base64.html b/integration/tests_ok/post_base64.html
index 2baa0020b..cd26993e6 100644
--- a/integration/tests_ok/post_base64.html
+++ b/integration/tests_ok/post_base64.html
@@ -4,4 +4,4 @@
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/post_base64.json b/integration/tests_ok/post_base64.json
index 3517a16b4..94ff63f13 100644
--- a/integration/tests_ok/post_base64.json
+++ b/integration/tests_ok/post_base64.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/post-base64","body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/post-base64","body":{"encoding":"base64","value":"SGVsbG8gV29ybGQh"}},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/post_bytes.html b/integration/tests_ok/post_bytes.html
index e52242cfc..8c58ada6b 100644
--- a/integration/tests_ok/post_bytes.html
+++ b/integration/tests_ok/post_bytes.html
@@ -3,4 +3,4 @@
base64, AQID; # echo -e -n '\x01\x02\x03' | base64
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/post_bytes.json b/integration/tests_ok/post_bytes.json
index 612f638c5..92976b219 100644
--- a/integration/tests_ok/post_bytes.json
+++ b/integration/tests_ok/post_bytes.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/post-bytes","headers":[{"name":"Content-Type","value":"application/octet-stream"}],"body":{"encoding":"base64","value":"AQID"}},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/post-bytes","headers":[{"name":"Content-Type","value":"application/octet-stream"}],"body":{"encoding":"base64","value":"AQID"}},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/post_file.html b/integration/tests_ok/post_file.html
index c463f6ea6..072e689d8 100644
--- a/integration/tests_ok/post_file.html
+++ b/integration/tests_ok/post_file.html
@@ -7,4 +7,4 @@
file,post_file_with\ space;
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/post_file.json b/integration/tests_ok/post_file.json
index 549dd8527..4a0b99272 100644
--- a/integration/tests_ok/post_file.json
+++ b/integration/tests_ok/post_file.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/post-file","body":{"type":"file","filename":"data.bin"}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-file","body":{"type":"file","filename":"post_file_with space"}},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/post-file","body":{"type":"file","filename":"data.bin"}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-file","body":{"type":"file","filename":"post_file_with space"}},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/post_json.html b/integration/tests_ok/post_json.html
index bc404bfbb..94e2ceb0b 100644
--- a/integration/tests_ok/post_json.html
+++ b/integration/tests_ok/post_json.html
@@ -57,4 +57,4 @@
{
"name": "{{name}}"
}
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/post_json.json b/integration/tests_ok/post_json.json
index 913efe9fd..c8e84d83e 100644
--- a/integration/tests_ok/post_json.json
+++ b/integration/tests_ok/post_json.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/post-json","body":{"type":"json","value":{"name":"Bob","password":"&secret\\'<>","age":30,"strict":true,"spacing":"\n","g_clef":"ƻǿ","items":[true,"true",1],"variable":"{{string_variable}}"}}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-json-array","body":{"type":"json","value":[1,2,3]}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-json-string","body":{"type":"json","value":"Hello"}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-json-number","body":{"type":"json","value":100}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-json-numbers","body":{"type":"json","value":{"natural":100,"negative":-1,"float":"3.333333333333333","exponent":100e100}}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-json-boolean","body":{"type":"json","value":true}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/get-name"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"name","query":{"type":"body"}}]}},{"request":{"method":"POST","url":"http://localhost:8000/check_name","body":{"type":"json","value":{"name":"{{name}}"}}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/post-json","body":{"type":"json","value":{"name":"Bob","password":"&secret\\'<>","age":30,"strict":true,"spacing":"\n","g_clef":"ƻǿ","items":[true,"true",1],"variable":"{{string_variable}}"}}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-json-array","body":{"type":"json","value":[1,2,3]}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-json-string","body":{"type":"json","value":"Hello"}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-json-number","body":{"type":"json","value":100}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-json-numbers","body":{"type":"json","value":{"natural":100,"negative":-1,"float":"3.333333333333333","exponent":100e100}}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"POST","url":"http://localhost:8000/post-json-boolean","body":{"type":"json","value":true}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/get-name"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"name","query":{"type":"body"}}]}},{"request":{"method":"POST","url":"http://localhost:8000/check_name","body":{"type":"json","value":{"name":"{{name}}"}}}}]}
diff --git a/integration/tests_ok/post_multilines.html b/integration/tests_ok/post_multilines.html
index 48ddd7dd7..fd646e2ee 100644
--- a/integration/tests_ok/post_multilines.html
+++ b/integration/tests_ok/post_multilines.html
@@ -21,4 +21,4 @@
bill,22
```
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/post_multilines.json b/integration/tests_ok/post_multilines.json
index 527b79302..250e5d943 100644
--- a/integration/tests_ok/post_multilines.json
+++ b/integration/tests_ok/post_multilines.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/post-multilines","body":{"type":"raw-string","value":"name,age\nbob,10\nbill,22\n"}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/get-bob-age"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"bob_age","query":{"type":"body"}}]}},{"request":{"method":"POST","url":"http://localhost:8000/post-multilines","body":{"type":"raw-string","value":"name,age\nbob,{{bob_age}}\nbill,22\n"}},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/post-multilines","body":{"type":"raw-string","value":"name,age\nbob,10\nbill,22\n"}},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/get-bob-age"},"response":{"version":"HTTP/1.0","status":200,"captures":[{"name":"bob_age","query":{"type":"body"}}]}},{"request":{"method":"POST","url":"http://localhost:8000/post-multilines","body":{"type":"raw-string","value":"name,age\nbob,{{bob_age}}\nbill,22\n"}},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/post_xml.html b/integration/tests_ok/post_xml.html
index 5af7cfc0d..e357933be 100644
--- a/integration/tests_ok/post_xml.html
+++ b/integration/tests_ok/post_xml.html
@@ -12,4 +12,4 @@
<drink>café</drink>
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/post_xml.json b/integration/tests_ok/post_xml.json
index e485eae69..b637e95d4 100644
--- a/integration/tests_ok/post_xml.json
+++ b/integration/tests_ok/post_xml.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/post-xml","body":{"type":"xml","value":"\nPUT http://localhost:8000/put
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/put.json b/integration/tests_ok/put.json
index 7731b1309..0214b45c7 100644
--- a/integration/tests_ok/put.json
+++ b/integration/tests_ok/put.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"PUT","url":"http://localhost:8000/put"},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"PUT","url":"http://localhost:8000/put"},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/querystring_params.html b/integration/tests_ok/querystring_params.html
index 7f2d5a355..11836fc82 100644
--- a/integration/tests_ok/querystring_params.html
+++ b/integration/tests_ok/querystring_params.html
@@ -27,4 +27,4 @@
[QueryStringParams]
value3:/
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/querystring_params.json b/integration/tests_ok/querystring_params.json
index bfd359d51..a91b9e0df 100644
--- a/integration/tests_ok/querystring_params.json
+++ b/integration/tests_ok/querystring_params.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/querystring-params","query_string_params":[{"name":"param1","value":"value1"},{"name":"param2","value":""},{"name":"param3","value":"a=b"},{"name":"param4","value":"1,2,3"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/querystring-params?param1=value1¶m2=¶m3=a%3db¶m4=1,2,3"},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/querystring-params?param1=value1","query_string_params":[{"name":"param2","value":""},{"name":"param3","value":"a=b"},{"name":"param4","value":"1,2,3"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/querystring-params-encoded?value1=/&value2=%2F","query_string_params":[{"name":"value3","value":"/"}]},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/querystring-params","query_string_params":[{"name":"param1","value":"value1"},{"name":"param2","value":""},{"name":"param3","value":"a=b"},{"name":"param4","value":"1,2,3"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/querystring-params?param1=value1¶m2=¶m3=a%3db¶m4=1,2,3"},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/querystring-params?param1=value1","query_string_params":[{"name":"param2","value":""},{"name":"param3","value":"a=b"},{"name":"param4","value":"1,2,3"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/querystring-params-encoded?value1=/&value2=%2F","query_string_params":[{"name":"value3","value":"/"}]},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/redirect.html b/integration/tests_ok/redirect.html
index 269c98c5e..d48f444c3 100644
--- a/integration/tests_ok/redirect.html
+++ b/integration/tests_ok/redirect.html
@@ -39,4 +39,4 @@
[Asserts]
url == "http://localhost:8000/redirected"
```Redirected```
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/redirect.json b/integration/tests_ok/redirect.json
index 0c4112482..a565d6fac 100644
--- a/integration/tests_ok/redirect.json
+++ b/integration/tests_ok/redirect.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/redirected"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"url"},"predicate":{"type":"equal","value":"http://localhost:8000/redirected"}}],"body":{"type":"raw-string","value":"Redirected"}}},{"request":{"method":"GET","url":"http://localhost:8000/redirect-absolute"},"response":{"version":"HTTP/1.0","status":302,"headers":[{"name":"Location","value":"http://localhost:8000/redirected"}],"asserts":[{"query":{"type":"url"},"predicate":{"type":"equal","value":"http://localhost:8000/redirect-absolute"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/redirect-absolute"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"url"},"predicate":{"type":"equal","value":"http://localhost:8000/redirected"}}],"body":{"type":"raw-string","value":"Redirected"}}},{"request":{"method":"GET","url":"http://localhost:8000/redirect-relative"},"response":{"version":"HTTP/1.0","status":302,"headers":[{"name":"Location","value":"/redirected"}],"asserts":[{"query":{"type":"url"},"predicate":{"type":"equal","value":"http://localhost:8000/redirect-relative"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/redirect-relative"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"url"},"predicate":{"type":"equal","value":"http://localhost:8000/redirected"}}],"body":{"type":"raw-string","value":"Redirected"}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/redirected"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"url"},"predicate":{"type":"equal","value":"http://localhost:8000/redirected"}}],"body":{"type":"raw-string","value":"Redirected"}}},{"request":{"method":"GET","url":"http://localhost:8000/redirect-absolute"},"response":{"version":"HTTP/1.0","status":302,"headers":[{"name":"Location","value":"http://localhost:8000/redirected"}],"asserts":[{"query":{"type":"url"},"predicate":{"type":"equal","value":"http://localhost:8000/redirect-absolute"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/redirect-absolute"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"url"},"predicate":{"type":"equal","value":"http://localhost:8000/redirected"}}],"body":{"type":"raw-string","value":"Redirected"}}},{"request":{"method":"GET","url":"http://localhost:8000/redirect-relative"},"response":{"version":"HTTP/1.0","status":302,"headers":[{"name":"Location","value":"/redirected"}],"asserts":[{"query":{"type":"url"},"predicate":{"type":"equal","value":"http://localhost:8000/redirect-relative"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/redirect-relative"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"url"},"predicate":{"type":"equal","value":"http://localhost:8000/redirected"}}],"body":{"type":"raw-string","value":"Redirected"}}}]}
diff --git a/integration/tests_ok/retry.html b/integration/tests_ok/retry.html
index 132d9bd07..49144eecd 100644
--- a/integration/tests_ok/retry.html
+++ b/integration/tests_ok/retry.html
@@ -22,4 +22,4 @@
GET http://localhost:8000/jobs/{{job_id}}
HTTP/* 404
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/retry.json b/integration/tests_ok/retry.json
index 182e718ea..a11516674 100644
--- a/integration/tests_ok/retry.json
+++ b/integration/tests_ok/retry.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/jobs"},"response":{"status":201,"captures":[{"name":"job_id","query":{"type":"jsonpath","expr":"$.id"}}],"asserts":[{"query":{"type":"jsonpath","expr":"$.state"},"predicate":{"type":"equal","value":"RUNNING"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/jobs/{{job_id}}"},"response":{"status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.state"},"predicate":{"type":"equal","value":"COMPLETED"}}]}},{"request":{"method":"DELETE","url":"http://localhost:8000/jobs/{{job_id}}"},"response":{"status":200}},{"request":{"method":"GET","url":"http://localhost:8000/jobs/{{job_id}}"},"response":{"status":404}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/jobs"},"response":{"status":201,"captures":[{"name":"job_id","query":{"type":"jsonpath","expr":"$.id"}}],"asserts":[{"query":{"type":"jsonpath","expr":"$.state"},"predicate":{"type":"equal","value":"RUNNING"}}]}},{"request":{"method":"GET","url":"http://localhost:8000/jobs/{{job_id}}"},"response":{"status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.state"},"predicate":{"type":"equal","value":"COMPLETED"}}]}},{"request":{"method":"DELETE","url":"http://localhost:8000/jobs/{{job_id}}"},"response":{"status":200}},{"request":{"method":"GET","url":"http://localhost:8000/jobs/{{job_id}}"},"response":{"status":404}}]}
diff --git a/integration/tests_ok/subquery_count.html b/integration/tests_ok/subquery_count.html
index 267666a2b..b71a30e9e 100644
--- a/integration/tests_ok/subquery_count.html
+++ b/integration/tests_ok/subquery_count.html
@@ -5,4 +5,4 @@
jsonpath "$.users" count > 1
jsonpath "$.users" count <= 10
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/subquery_count.json b/integration/tests_ok/subquery_count.json
index c51c18cc3..9e804831f 100644
--- a/integration/tests_ok/subquery_count.json
+++ b/integration/tests_ok/subquery_count.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/subquery-count"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.users","subquery":{"type":"count"}},"predicate":{"type":"equal","value":3}},{"query":{"type":"jsonpath","expr":"$.users","subquery":{"type":"count"}},"predicate":{"type":"greater","value":1}},{"query":{"type":"jsonpath","expr":"$.users","subquery":{"type":"count"}},"predicate":{"type":"less-or-equal","value":10}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/subquery-count"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"jsonpath","expr":"$.users","subquery":{"type":"count"}},"predicate":{"type":"equal","value":3}},{"query":{"type":"jsonpath","expr":"$.users","subquery":{"type":"count"}},"predicate":{"type":"greater","value":1}},{"query":{"type":"jsonpath","expr":"$.users","subquery":{"type":"count"}},"predicate":{"type":"less-or-equal","value":10}}]}}]}
diff --git a/integration/tests_ok/test.1.html b/integration/tests_ok/test.1.html
new file mode 100644
index 000000000..b4930b803
--- /dev/null
+++ b/integration/tests_ok/test.1.html
@@ -0,0 +1,3 @@
+GET http://localhost:8000/hello
+HTTP/1.0 200
+```Hello World!```
diff --git a/integration/tests_ok/test.1.json b/integration/tests_ok/test.1.json
new file mode 100644
index 000000000..1bdf365ae
--- /dev/null
+++ b/integration/tests_ok/test.1.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello World!"}}}]}
diff --git a/integration/tests_ok/test.2.html b/integration/tests_ok/test.2.html
new file mode 100644
index 000000000..b4930b803
--- /dev/null
+++ b/integration/tests_ok/test.2.html
@@ -0,0 +1,3 @@
+GET http://localhost:8000/hello
+HTTP/1.0 200
+```Hello World!```
diff --git a/integration/tests_ok/test.2.json b/integration/tests_ok/test.2.json
new file mode 100644
index 000000000..1bdf365ae
--- /dev/null
+++ b/integration/tests_ok/test.2.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello World!"}}}]}
diff --git a/integration/tests_ok/test.3.html b/integration/tests_ok/test.3.html
new file mode 100644
index 000000000..b4930b803
--- /dev/null
+++ b/integration/tests_ok/test.3.html
@@ -0,0 +1,3 @@
+GET http://localhost:8000/hello
+HTTP/1.0 200
+```Hello World!```
diff --git a/integration/tests_ok/test.3.json b/integration/tests_ok/test.3.json
new file mode 100644
index 000000000..1bdf365ae
--- /dev/null
+++ b/integration/tests_ok/test.3.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello World!"}}}]}
diff --git a/integration/tests_ok/test.html b/integration/tests_ok/test.html
index c6a01ee77..557611676 100644
--- a/integration/tests_ok/test.html
+++ b/integration/tests_ok/test.html
@@ -1,3 +1,4 @@
GET http://localhost:8000/hello
HTTP/1.0 200
-```Hello World!```
\ No newline at end of file
+```Hello World!```
+
diff --git a/integration/tests_ok/test.hurl b/integration/tests_ok/test.hurl
index 4ef7b19b1..e1fe08e15 100644
--- a/integration/tests_ok/test.hurl
+++ b/integration/tests_ok/test.hurl
@@ -1,3 +1,3 @@
GET http://localhost:8000/hello
HTTP/1.0 200
-```Hello World!```
\ No newline at end of file
+```Hello World!```
diff --git a/integration/tests_ok/test.json b/integration/tests_ok/test.json
index 00d6aa9e4..1bdf365ae 100644
--- a/integration/tests_ok/test.json
+++ b/integration/tests_ok/test.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello World!"}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/hello"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"Hello World!"}}}]}
diff --git a/integration/tests_ok/to_entry.html b/integration/tests_ok/to_entry.html
index d9003e1ff..0cc3bd4b2 100644
--- a/integration/tests_ok/to_entry.html
+++ b/integration/tests_ok/to_entry.html
@@ -17,4 +17,4 @@
GET http://localhost:8000/to-entry/5
HTTP/* 200
```Reached entry 5```
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/to_entry.json b/integration/tests_ok/to_entry.json
index 1948b0887..03f1a65f8 100644
--- a/integration/tests_ok/to_entry.json
+++ b/integration/tests_ok/to_entry.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/to-entry/1"},"response":{"status":200,"body":{"type":"raw-string","value":"Reached entry 1"}}},{"request":{"method":"GET","url":"http://localhost:8000/to-entry/2"},"response":{"status":200,"body":{"type":"raw-string","value":"Reached entry 2"}}},{"request":{"method":"GET","url":"http://localhost:8000/to-entry/3"},"response":{"status":200,"body":{"type":"raw-string","value":"Reached entry 3"}}},{"request":{"method":"GET","url":"http://localhost:8000/to-entry/4"},"response":{"status":200,"body":{"type":"raw-string","value":"Reached entry 4"}}},{"request":{"method":"GET","url":"http://localhost:8000/to-entry/5"},"response":{"status":200,"body":{"type":"raw-string","value":"Reached entry 5"}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/to-entry/1"},"response":{"status":200,"body":{"type":"raw-string","value":"Reached entry 1"}}},{"request":{"method":"GET","url":"http://localhost:8000/to-entry/2"},"response":{"status":200,"body":{"type":"raw-string","value":"Reached entry 2"}}},{"request":{"method":"GET","url":"http://localhost:8000/to-entry/3"},"response":{"status":200,"body":{"type":"raw-string","value":"Reached entry 3"}}},{"request":{"method":"GET","url":"http://localhost:8000/to-entry/4"},"response":{"status":200,"body":{"type":"raw-string","value":"Reached entry 4"}}},{"request":{"method":"GET","url":"http://localhost:8000/to-entry/5"},"response":{"status":200,"body":{"type":"raw-string","value":"Reached entry 5"}}}]}
diff --git a/integration/tests_ok/url.html b/integration/tests_ok/url.html
index cecca78e2..dd23029c0 100644
--- a/integration/tests_ok/url.html
+++ b/integration/tests_ok/url.html
@@ -11,4 +11,4 @@
HTTP/1.0 200
```weird```
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/url.json b/integration/tests_ok/url.json
index 584b9373b..77f27fef2 100644
--- a/integration/tests_ok/url.json
+++ b/integration/tests_ok/url.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/~user"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"user"}}},{"request":{"method":"GET","url":"http://localhost:8000/%7Euser"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"user"}}},{"request":{"method":"GET","url":"http://localhost:8000/!$&()*+,;=:@[]"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"weird"}}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/~user"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"user"}}},{"request":{"method":"GET","url":"http://localhost:8000/%7Euser"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"user"}}},{"request":{"method":"GET","url":"http://localhost:8000/!$&()*+,;=:@[]"},"response":{"version":"HTTP/1.0","status":200,"body":{"type":"raw-string","value":"weird"}}}]}
diff --git a/integration/tests_ok/user_agent.html b/integration/tests_ok/user_agent.html
index abdd8d432..b2319bde6 100644
--- a/integration/tests_ok/user_agent.html
+++ b/integration/tests_ok/user_agent.html
@@ -8,4 +8,4 @@
GET http://localhost:8000/user-agent/a
HTTP/1.0 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/user_agent.json b/integration/tests_ok/user_agent.json
index 495a07852..d3c86c4c7 100644
--- a/integration/tests_ok/user_agent.json
+++ b/integration/tests_ok/user_agent.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/user-agent/a"},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/user-agent/b","headers":[{"name":"User-Agent","value":"Mozilla/5.0 B"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/user-agent/a"},"response":{"version":"HTTP/1.0","status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/user-agent/a"},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/user-agent/b","headers":[{"name":"User-Agent","value":"Mozilla/5.0 B"}]},"response":{"version":"HTTP/1.0","status":200}},{"request":{"method":"GET","url":"http://localhost:8000/user-agent/a"},"response":{"version":"HTTP/1.0","status":200}}]}
diff --git a/integration/tests_ok/utf8.html b/integration/tests_ok/utf8.html
index e1a3d634b..6137431fe 100644
--- a/integration/tests_ok/utf8.html
+++ b/integration/tests_ok/utf8.html
@@ -4,4 +4,4 @@
[Asserts]
xpath "normalize-space(//data)" == "café"
xpath "normalize-space(//data)" == "caf\u{e9}"
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/utf8.json b/integration/tests_ok/utf8.json
index a88a44b26..dcc3046ec 100644
--- a/integration/tests_ok/utf8.json
+++ b/integration/tests_ok/utf8.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/utf8"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"xpath","expr":"normalize-space(//data)"},"predicate":{"type":"equal","value":"café"}},{"query":{"type":"xpath","expr":"normalize-space(//data)"},"predicate":{"type":"equal","value":"café"}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/utf8"},"response":{"version":"HTTP/1.0","status":200,"asserts":[{"query":{"type":"xpath","expr":"normalize-space(//data)"},"predicate":{"type":"equal","value":"café"}},{"query":{"type":"xpath","expr":"normalize-space(//data)"},"predicate":{"type":"equal","value":"café"}}]}}]}
diff --git a/integration/tests_ok/variables.html b/integration/tests_ok/variables.html
index 0a621eec8..75a40c6f6 100644
--- a/integration/tests_ok/variables.html
+++ b/integration/tests_ok/variables.html
@@ -32,4 +32,5 @@
variable "height" == 1.70
variable "a_null" == null
variable "my-id" == "123"
-variable "country" == "Italy"
\ No newline at end of file
+variable "country" == "Italy"
+
diff --git a/integration/tests_ok/variables.hurl b/integration/tests_ok/variables.hurl
index 9f130e419..554f2b51a 100644
--- a/integration/tests_ok/variables.hurl
+++ b/integration/tests_ok/variables.hurl
@@ -32,4 +32,4 @@ variable "age" == 30
variable "height" == 1.70
variable "a_null" == null
variable "my-id" == "123"
-variable "country" == "Italy"
\ No newline at end of file
+variable "country" == "Italy"
diff --git a/integration/tests_ok/variables.json b/integration/tests_ok/variables.json
index 5522c3bf3..7f4d828df 100644
--- a/integration/tests_ok/variables.json
+++ b/integration/tests_ok/variables.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/variables","headers":[{"name":"Name","value":"{{name}}"},{"name":"Age","value":"{{age}}"},{"name":"Height","value":"{{height}}"},{"name":"Female","value":"{{female}}"},{"name":"Id","value":"{{my-id}}"},{"name":"A_Null","value":"{{a_null}}"},{"name":"Country","value":"{{country}}"}],"body":{"type":"json","value":{"name":"{{name}}","age":"{{age}}","height":"{{height}}","female":"{{female}}","id":"{{my-id}}","a_null":"{{a_null}}","country":"{{country}}"}}},"response":{"status":200,"asserts":[{"query":{"type":"variable","name":"name"},"predicate":{"type":"equal","value":"Jennifer"}},{"query":{"type":"variable","name":"female"},"predicate":{"type":"equal","value":true}},{"query":{"type":"variable","name":"age"},"predicate":{"type":"equal","value":30}},{"query":{"type":"variable","name":"height"},"predicate":{"type":"equal","value":1.70}},{"query":{"type":"variable","name":"a_null"},"predicate":{"type":"equal","value":null}},{"query":{"type":"variable","name":"my-id"},"predicate":{"type":"equal","value":"123"}},{"query":{"type":"variable","name":"country"},"predicate":{"type":"equal","value":"Italy"}}]}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"POST","url":"http://localhost:8000/variables","headers":[{"name":"Name","value":"{{name}}"},{"name":"Age","value":"{{age}}"},{"name":"Height","value":"{{height}}"},{"name":"Female","value":"{{female}}"},{"name":"Id","value":"{{my-id}}"},{"name":"A_Null","value":"{{a_null}}"},{"name":"Country","value":"{{country}}"}],"body":{"type":"json","value":{"name":"{{name}}","age":"{{age}}","height":"{{height}}","female":"{{female}}","id":"{{my-id}}","a_null":"{{a_null}}","country":"{{country}}"}}},"response":{"status":200,"asserts":[{"query":{"type":"variable","name":"name"},"predicate":{"type":"equal","value":"Jennifer"}},{"query":{"type":"variable","name":"female"},"predicate":{"type":"equal","value":true}},{"query":{"type":"variable","name":"age"},"predicate":{"type":"equal","value":30}},{"query":{"type":"variable","name":"height"},"predicate":{"type":"equal","value":1.70}},{"query":{"type":"variable","name":"a_null"},"predicate":{"type":"equal","value":null}},{"query":{"type":"variable","name":"my-id"},"predicate":{"type":"equal","value":"123"}},{"query":{"type":"variable","name":"country"},"predicate":{"type":"equal","value":"Italy"}}]}}]}
diff --git a/integration/tests_ok/verbose.html b/integration/tests_ok/verbose.html
new file mode 100644
index 000000000..dd2318cdf
--- /dev/null
+++ b/integration/tests_ok/verbose.html
@@ -0,0 +1,3 @@
+GET http://localhost:8000/verbose
+
+
diff --git a/integration/tests_ok/verbose.hurl b/integration/tests_ok/verbose.hurl
index 3db2df5db..bbc9a9624 100644
--- a/integration/tests_ok/verbose.hurl
+++ b/integration/tests_ok/verbose.hurl
@@ -1 +1,2 @@
-GET http://localhost:8000/verbose
\ No newline at end of file
+GET http://localhost:8000/verbose
+
diff --git a/integration/tests_ok/verbose.json b/integration/tests_ok/verbose.json
new file mode 100644
index 000000000..15bf3f2ab
--- /dev/null
+++ b/integration/tests_ok/verbose.json
@@ -0,0 +1 @@
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/verbose"}}]}
diff --git a/integration/tests_ok/very_verbose.html b/integration/tests_ok/very_verbose.html
index 363b0f2e5..663276716 100644
--- a/integration/tests_ok/very_verbose.html
+++ b/integration/tests_ok/very_verbose.html
@@ -23,4 +23,4 @@
GET http://localhost:8000/very-verbose/done
x-foo: bar
HTTP/* 200
-
\ No newline at end of file
+
diff --git a/integration/tests_ok/very_verbose.json b/integration/tests_ok/very_verbose.json
index 21fc15bc7..1bf645b57 100644
--- a/integration/tests_ok/very_verbose.json
+++ b/integration/tests_ok/very_verbose.json
@@ -1 +1 @@
-{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/very-verbose/redirect"},"response":{"status":200}},{"request":{"method":"GET","url":"http://localhost:8000/very-verbose/encoding/latin1"},"response":{"status":200}},{"request":{"method":"POST","url":"http://localhost:8000/very-verbose/compressed/brotli","headers":[{"name":"Accept-Encoding","value":"brotli"}],"body":{"type":"json","value":{"foo":"bar","baz":true}}},"response":{"status":200}},{"request":{"method":"GET","url":"http://localhost:8000/very-verbose/cat"},"response":{"status":200}},{"request":{"method":"POST","url":"http://localhost:8000/very-verbose/update-cat","multipart_form_data":[{"name":"cat","filename":"cat.jpg","content_type":"image/jpeg"}]},"response":{"status":200}},{"request":{"method":"GET","url":"http://localhost:8000/very-verbose/done","headers":[{"name":"x-foo","value":"bar"}]},"response":{"status":200}}]}
\ No newline at end of file
+{"entries":[{"request":{"method":"GET","url":"http://localhost:8000/very-verbose/redirect"},"response":{"status":200}},{"request":{"method":"GET","url":"http://localhost:8000/very-verbose/encoding/latin1"},"response":{"status":200}},{"request":{"method":"POST","url":"http://localhost:8000/very-verbose/compressed/brotli","headers":[{"name":"Accept-Encoding","value":"brotli"}],"body":{"type":"json","value":{"foo":"bar","baz":true}}},"response":{"status":200}},{"request":{"method":"GET","url":"http://localhost:8000/very-verbose/cat"},"response":{"status":200}},{"request":{"method":"POST","url":"http://localhost:8000/very-verbose/update-cat","multipart_form_data":[{"name":"cat","filename":"cat.jpg","content_type":"image/jpeg"}]},"response":{"status":200}},{"request":{"method":"GET","url":"http://localhost:8000/very-verbose/done","headers":[{"name":"x-foo","value":"bar"}]},"response":{"status":200}}]}
diff --git a/packages/hurlfmt/src/main.rs b/packages/hurlfmt/src/main.rs
index 0f4ca539c..3fd54fa71 100644
--- a/packages/hurlfmt/src/main.rs
+++ b/packages/hurlfmt/src/main.rs
@@ -238,6 +238,11 @@ fn main() {
process::exit(1);
}
};
+ let output = if output.ends_with('\n') {
+ output
+ } else {
+ format!("{}\n", output)
+ };
write_output(output.into_bytes(), output_file.as_deref());
}
}