Remove buggy HTML report "line" class.

This commit is contained in:
Jean-Christophe Amiel 2025-05-29 20:18:40 +02:00
parent f9796b7c03
commit ca2628227b
No known key found for this signature in database
GPG Key ID: 07FF11CFD55356CC
23 changed files with 636 additions and 783 deletions

View File

@ -166,11 +166,11 @@ Hello
`include.html`:
```html
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/include</span></span>
</span><span class="response"><span class="line"></span>
<span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="string">`Hello`</span></span>
</span></span><span class="line"></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/include</span>
</span><span class="response">
<span class="version">HTTP</span> <span class="number">200</span>
<span class="string">`Hello`</span>
</span></span>
</code></pre>
```

View File

@ -1,78 +1,78 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/json</span></span>
<span class="json"><span class="line">{</span>
<span class="line"> "message": "Hello",</span>
<span class="line"> "count": 5,</span>
<span class="line"> "success": false,</span>
<span class="line"> "errors": [{"id":"error1"},{"id":"error2"}],</span>
<span class="line"> "failures": [{"id":"failure1"}],</span>
<span class="line"> "warnings": [],</span>
<span class="line"> "duration": 1.5,</span>
<span class="line"> "tags": ["test"],</span>
<span class="line"> "nullable": null,</span>
<span class="line"> "profile-id": "123abc",</span>
<span class="line"> "empty": {},</span>
<span class="line"> "name": {{name}}</span>
<span class="line">}</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/json</span></span>
<span class="line"><span class="multiline">```json</span></span>
<span class="line"><span class="multiline">{</span></span>
<span class="line"><span class="multiline"> "message": "Hello",</span></span>
<span class="line"><span class="multiline"> "count": 5,</span></span>
<span class="line"><span class="multiline"> "success": false,</span></span>
<span class="line"><span class="multiline"> "errors": [{"id":"error1"},{"id":"error2"}],</span></span>
<span class="line"><span class="multiline"> "failures": [{"id":"failure1"}],</span></span>
<span class="line"><span class="multiline"> "warnings": [],</span></span>
<span class="line"><span class="multiline"> "duration": 1.5,</span></span>
<span class="line"><span class="multiline"> "tags": ["test"],</span></span>
<span class="line"><span class="multiline"> "nullable": null,</span></span>
<span class="line"><span class="multiline"> "profile-id": "123abc",</span></span>
<span class="line"><span class="multiline"> "empty": {},</span></span>
<span class="line"><span class="multiline"> "name": {{name}}</span></span>
<span class="line"><span class="multiline">}</span></span>
<span class="line"><span class="multiline">```</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/xml</span></span>
<span class="xml"><span class="line">&lt;message&gt;Hello&lt;/message&gt;</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/multiline-string</span></span>
<span class="line"><span class="multiline">```</span></span>
<span class="line"><span class="multiline">Hello\tWord</span></span>
<span class="line"><span class="multiline">A beautiful \u{2708}</span></span>
<span class="line"><span class="multiline">A template {{ var }}</span></span>
<span class="line"><span class="multiline">A template {{ var }}</span></span>
<span class="line"><span class="multiline">```</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="comment"># escape novariable are attributes of multi-linestring</span></span>
<span class="line"><span class="comment"># going to be deprecated</span></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/multiline-string</span></span>
<span class="line"><span class="multiline">```escape</span></span>
<span class="line"><span class="multiline">Hello\tWord</span></span>
<span class="line"><span class="multiline">A beautiful \u{2708}</span></span>
<span class="line"><span class="multiline">A template {{ var }}</span></span>
<span class="line"><span class="multiline">A template {{ var }}</span></span>
<span class="line"><span class="multiline">```</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/multiline-string</span></span>
<span class="line"><span class="multiline">```escape,novariable</span></span>
<span class="line"><span class="multiline">Hello\tWord</span></span>
<span class="line"><span class="multiline">A beautiful \u{2708}</span></span>
<span class="line"><span class="multiline">A template {{ var }}</span></span>
<span class="line"><span class="multiline">A template {{ var }}</span></span>
<span class="line"><span class="multiline">```</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/oneline-string</span></span>
<span class="line"><span class="string">`Hello`</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/oneline-base64</span></span>
<span class="line">base64,<span class="base64">bGluZTEKbGluZTINCmxpbmUzCg==</span>;</span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/oneline-base64</span></span>
<span class="line">base64,<span class="base64">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/==</span>;</span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/oneline-file</span></span>
<span class="line">file,<span class="filename">data.bin</span>;</span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/oneline-hex</span></span>
<span class="line">hex,<span class="hex">010203</span>;</span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">POST</span> <span class="url">http://localhost:8000/json</span>
<span class="json">{
"message": "Hello",
"count": 5,
"success": false,
"errors": [{"id":"error1"},{"id":"error2"}],
"failures": [{"id":"failure1"}],
"warnings": [],
"duration": 1.5,
"tags": ["test"],
"nullable": null,
"profile-id": "123abc",
"empty": {},
"name": {{name}}
}</span>
</span></span><span class="entry"><span class="request">
<span class="method">POST</span> <span class="url">http://localhost:8000/json</span>
<span class="multiline">```json
{
"message": "Hello",
"count": 5,
"success": false,
"errors": [{"id":"error1"},{"id":"error2"}],
"failures": [{"id":"failure1"}],
"warnings": [],
"duration": 1.5,
"tags": ["test"],
"nullable": null,
"profile-id": "123abc",
"empty": {},
"name": {{name}}
}
```</span>
</span></span><span class="entry"><span class="request">
<span class="method">POST</span> <span class="url">http://localhost:8000/xml</span>
<span class="xml">&lt;message&gt;Hello&lt;/message&gt;</span>
</span></span><span class="entry"><span class="request">
<span class="method">POST</span> <span class="url">http://localhost:8000/multiline-string</span>
<span class="multiline">```
Hello\tWord
A beautiful \u{2708}
A template {{ var }}
A template {{ var }}
```</span>
</span></span><span class="entry"><span class="request">
<span class="comment"># escape novariable are attributes of multi-linestring</span>
<span class="comment"># going to be deprecated</span>
<span class="method">POST</span> <span class="url">http://localhost:8000/multiline-string</span>
<span class="multiline">```escape
Hello\tWord
A beautiful \u{2708}
A template {{ var }}
A template {{ var }}
```</span>
</span></span><span class="entry"><span class="request">
<span class="method">POST</span> <span class="url">http://localhost:8000/multiline-string</span>
<span class="multiline">```escape,novariable
Hello\tWord
A beautiful \u{2708}
A template {{ var }}
A template {{ var }}
```</span>
</span></span><span class="entry"><span class="request">
<span class="method">POST</span> <span class="url">http://localhost:8000/oneline-string</span>
<span class="string">`Hello`</span>
</span></span><span class="entry"><span class="request">
<span class="method">POST</span> <span class="url">http://localhost:8000/oneline-base64</span>
base64,<span class="base64">bGluZTEKbGluZTINCmxpbmUzCg==</span>;
</span></span><span class="entry"><span class="request">
<span class="method">POST</span> <span class="url">http://localhost:8000/oneline-base64</span>
base64,<span class="base64">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/==</span>;
</span></span><span class="entry"><span class="request">
<span class="method">POST</span> <span class="url">http://localhost:8000/oneline-file</span>
file,<span class="filename">data.bin</span>;
</span></span><span class="entry"><span class="request">
<span class="method">POST</span> <span class="url">http://localhost:8000/oneline-hex</span>
hex,<span class="hex">010203</span>;
</span></span></code></pre>

View File

@ -1,9 +1,9 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/dummy</span></span>
</span><span class="response"><span class="line"></span>
<span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="section-header">[Captures]</span></span>
<span class="line"><span class="string">name</span>: <span class="query-type">jsonpath</span> <span class="string">"$.name"</span></span>
<span class="line"><span class="string">name2</span>: <span class="query-type">jsonpath</span> <span class="string">"$.name"</span> <span class="comment"># name</span></span>
<span class="line"><span class="string">token</span>: <span class="query-type">jsonpath</span> <span class="string">"$.token"</span> <span class="string">redact</span></span>
<span class="line"><span class="string">token2</span>: <span class="query-type">jsonpath</span> <span class="string">"$.token"</span> <span class="string">redact</span> <span class="comment"># token</span></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/dummy</span>
</span><span class="response">
<span class="version">HTTP</span> <span class="number">200</span>
<span class="section-header">[Captures]</span>
<span class="string">name</span>: <span class="query-type">jsonpath</span> <span class="string">"$.name"</span>
<span class="string">name2</span>: <span class="query-type">jsonpath</span> <span class="string">"$.name"</span> <span class="comment"># name</span>
<span class="string">token</span>: <span class="query-type">jsonpath</span> <span class="string">"$.token"</span> <span class="string">redact</span>
<span class="string">token2</span>: <span class="query-type">jsonpath</span> <span class="string">"$.token"</span> <span class="string">redact</span> <span class="comment"># token</span>
</span></span></code></pre>

View File

@ -1,3 +1,3 @@
<pre><code class="language-hurl"><span class="line"></span>
<span class="line"></span>
<pre><code class="language-hurl">
</code></pre>

View File

@ -1,34 +1,34 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/dummy</span></span>
</span><span class="response"><span class="line"></span>
<span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="section-header">[Captures]</span></span>
<span class="line"><span class="string">count</span>: <span class="query-type">jsonpath</span> <span class="string">"$.books"</span> <span class="filter-type">count</span></span>
<span class="line"><span class="section-header">[Asserts]</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.data"</span> <span class="filter-type">base64Decode</span> <span class="predicate-type">==</span> hex,<span class="hex">48656c6c6f</span>; <span class="comment"># base64Decode</span></span>
<span class="line"><span class="query-type">bytes</span> <span class="filter-type">base64Encode</span> <span class="predicate-type">==</span> <span class="string">"SGVsbG8="</span> <span class="comment"># base64Encode</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.data"</span> <span class="filter-type">base64UrlSafeDecode</span> <span class="predicate-type">==</span> hex,<span class="hex">48656c6c6f</span>; <span class="comment"># base64UrlSafeDecode</span></span>
<span class="line"><span class="query-type">bytes</span> <span class="filter-type">base64UrlSafeEncode</span> <span class="predicate-type">==</span> <span class="string">"SGVsbG8"</span> <span class="comment"># base64UrlSafeEncode</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.books"</span> <span class="filter-type">count</span> <span class="predicate-type">==</span> <span class="number">12</span> <span class="comment"># count</span></span>
<span class="line"><span class="query-type">certificate</span> <span class="string">"Expire-Date"</span> <span class="filter-type">daysAfterNow</span> <span class="predicate-type">&gt;</span> <span class="number">15</span> <span class="comment"># daysAfterNow</span></span>
<span class="line"><span class="query-type">certificate</span> <span class="string">"Start-Date"</span> <span class="filter-type">daysBeforeNow</span> <span class="predicate-type">&lt;</span> <span class="number">100</span> <span class="comment"># daysBeforeNow</span></span>
<span class="line"><span class="query-type">bytes</span> <span class="filter-type">decode</span> <span class="string">"iso-8859-1"</span> <span class="predicate-type">==</span> <span class="string">"café"</span> <span class="comment"># decode</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.books"</span> <span class="filter-type">first</span> <span class="filter-type">jsonpath</span> <span class="string">"$.name"</span> <span class="predicate-type">==</span> <span class="string">"Les Misérables"</span> <span class="comment"># first</span></span>
<span class="line"><span class="query-type">cookie</span> <span class="string">"LSID[Expires]"</span> <span class="filter-type">format</span> <span class="string">"%a, %d %b %Y %H:%M:%S"</span> <span class="predicate-type">==</span> <span class="string">"Wed, 13 Jan 2021 22:23:01"</span> <span class="comment"># format</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.text"</span> <span class="filter-type">htmlEscape</span> <span class="predicate-type">==</span> <span class="string">"a &amp;gt; b"</span> <span class="comment"># htmlEscape</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.escaped_html[1]"</span> <span class="filter-type">htmlUnescape</span> <span class="predicate-type">==</span> <span class="string">"&lt;p&gt;Hello&lt;/p&gt;"</span> <span class="comment"># htmlUnescape</span></span>
<span class="line"><span class="query-type">variable</span> <span class="string">"books"</span> <span class="filter-type">jsonpath</span> <span class="string">"$[0].name"</span> <span class="predicate-type">==</span> <span class="string">"Dune"</span> <span class="comment"># jsonpath</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.books"</span> <span class="filter-type">last</span> <span class="filter-type">jsonpath</span> <span class="string">"$.name"</span> <span class="predicate-type">==</span> <span class="string">"Dune"</span> <span class="comment"># last</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.books"</span> <span class="filter-type">nth</span> <span class="number">2</span> <span class="predicate-type">==</span> <span class="string">"Children of Dune"</span> <span class="comment"># nth</span></span>
<span class="line"><span class="query-type">body</span> <span class="filter-type">regex</span> <span class="regex">/Hello ([0-9]+)!/</span> <span class="predicate-type">==</span> <span class="string">"Bob"</span> <span class="comment"># regex</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.ips"</span> <span class="filter-type">replace</span> <span class="string">", "</span> <span class="string">"|"</span> <span class="predicate-type">==</span> <span class="string">"192.168.2.1|10.0.0.20|10.0.0.10"</span> <span class="comment"># replace</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.ips"</span> <span class="filter-type">split</span> <span class="string">", "</span> <span class="filter-type">count</span> <span class="predicate-type">==</span> <span class="number">3</span> <span class="comment"># split</span></span>
<span class="line"><span class="query-type">header</span> <span class="string">"Expires"</span> <span class="filter-type">toDate</span> <span class="string">"%a, %d %b %Y %H:%M:%S GMT"</span> <span class="filter-type">daysBeforeNow</span> <span class="predicate-type">&gt;</span> <span class="number">1000</span> <span class="comment"># toDate</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.pi"</span> <span class="filter-type">toFloat</span> <span class="predicate-type">==</span> <span class="number">3.14</span> <span class="comment"># toFloat</span></span>
<span class="line"><span class="query-type">sha256</span> <span class="filter-type">toHex</span> <span class="predicate-type">==</span> <span class="string">"039058c6f2c0cb492c533b0a4d14ef77cc0f78abccced5287d84a1a2011cfb81"</span> <span class="comment"># toHex</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.id"</span> <span class="filter-type">toInt</span> <span class="predicate-type">==</span> <span class="number">123</span> <span class="comment"># toInt</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.id"</span> <span class="filter-type">toString</span> <span class="predicate-type">==</span> <span class="string">"123"</span> <span class="comment"># toString</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.encoded_url"</span> <span class="filter-type">urlDecode</span> <span class="predicate-type">==</span> <span class="string">"https://mozilla.org/?x=шеллы"</span> <span class="comment"># urlDecode</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.url"</span> <span class="filter-type">urlEncode</span> <span class="predicate-type">==</span> <span class="string">"https%3A//mozilla.org/%3Fx%3D%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"</span> <span class="comment"># urlEncode</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.url"</span> <span class="filter-type">urlQueryParam</span> <span class="string">"token"</span> <span class="predicate-type">==</span> <span class="string">"XYZ"</span> <span class="comment"># urlQueryParam</span></span>
<span class="line"><span class="query-type">bytes</span> <span class="filter-type">decode</span> <span class="string">"iso-8859-1"</span> <span class="filter-type">xpath</span> <span class="string">"string(//p)"</span> <span class="predicate-type">==</span> <span class="string">"Hello"</span> <span class="comment"># xpath</span></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/dummy</span>
</span><span class="response">
<span class="version">HTTP</span> <span class="number">200</span>
<span class="section-header">[Captures]</span>
<span class="string">count</span>: <span class="query-type">jsonpath</span> <span class="string">"$.books"</span> <span class="filter-type">count</span>
<span class="section-header">[Asserts]</span>
<span class="query-type">jsonpath</span> <span class="string">"$.data"</span> <span class="filter-type">base64Decode</span> <span class="predicate-type">==</span> hex,<span class="hex">48656c6c6f</span>; <span class="comment"># base64Decode</span>
<span class="query-type">bytes</span> <span class="filter-type">base64Encode</span> <span class="predicate-type">==</span> <span class="string">"SGVsbG8="</span> <span class="comment"># base64Encode</span>
<span class="query-type">jsonpath</span> <span class="string">"$.data"</span> <span class="filter-type">base64UrlSafeDecode</span> <span class="predicate-type">==</span> hex,<span class="hex">48656c6c6f</span>; <span class="comment"># base64UrlSafeDecode</span>
<span class="query-type">bytes</span> <span class="filter-type">base64UrlSafeEncode</span> <span class="predicate-type">==</span> <span class="string">"SGVsbG8"</span> <span class="comment"># base64UrlSafeEncode</span>
<span class="query-type">jsonpath</span> <span class="string">"$.books"</span> <span class="filter-type">count</span> <span class="predicate-type">==</span> <span class="number">12</span> <span class="comment"># count</span>
<span class="query-type">certificate</span> <span class="string">"Expire-Date"</span> <span class="filter-type">daysAfterNow</span> <span class="predicate-type">&gt;</span> <span class="number">15</span> <span class="comment"># daysAfterNow</span>
<span class="query-type">certificate</span> <span class="string">"Start-Date"</span> <span class="filter-type">daysBeforeNow</span> <span class="predicate-type">&lt;</span> <span class="number">100</span> <span class="comment"># daysBeforeNow</span>
<span class="query-type">bytes</span> <span class="filter-type">decode</span> <span class="string">"iso-8859-1"</span> <span class="predicate-type">==</span> <span class="string">"café"</span> <span class="comment"># decode</span>
<span class="query-type">jsonpath</span> <span class="string">"$.books"</span> <span class="filter-type">first</span> <span class="filter-type">jsonpath</span> <span class="string">"$.name"</span> <span class="predicate-type">==</span> <span class="string">"Les Misérables"</span> <span class="comment"># first</span>
<span class="query-type">cookie</span> <span class="string">"LSID[Expires]"</span> <span class="filter-type">format</span> <span class="string">"%a, %d %b %Y %H:%M:%S"</span> <span class="predicate-type">==</span> <span class="string">"Wed, 13 Jan 2021 22:23:01"</span> <span class="comment"># format</span>
<span class="query-type">jsonpath</span> <span class="string">"$.text"</span> <span class="filter-type">htmlEscape</span> <span class="predicate-type">==</span> <span class="string">"a &amp;gt; b"</span> <span class="comment"># htmlEscape</span>
<span class="query-type">jsonpath</span> <span class="string">"$.escaped_html[1]"</span> <span class="filter-type">htmlUnescape</span> <span class="predicate-type">==</span> <span class="string">"&lt;p&gt;Hello&lt;/p&gt;"</span> <span class="comment"># htmlUnescape</span>
<span class="query-type">variable</span> <span class="string">"books"</span> <span class="filter-type">jsonpath</span> <span class="string">"$[0].name"</span> <span class="predicate-type">==</span> <span class="string">"Dune"</span> <span class="comment"># jsonpath</span>
<span class="query-type">jsonpath</span> <span class="string">"$.books"</span> <span class="filter-type">last</span> <span class="filter-type">jsonpath</span> <span class="string">"$.name"</span> <span class="predicate-type">==</span> <span class="string">"Dune"</span> <span class="comment"># last</span>
<span class="query-type">jsonpath</span> <span class="string">"$.books"</span> <span class="filter-type">nth</span> <span class="number">2</span> <span class="predicate-type">==</span> <span class="string">"Children of Dune"</span> <span class="comment"># nth</span>
<span class="query-type">body</span> <span class="filter-type">regex</span> <span class="regex">/Hello ([0-9]+)!/</span> <span class="predicate-type">==</span> <span class="string">"Bob"</span> <span class="comment"># regex</span>
<span class="query-type">jsonpath</span> <span class="string">"$.ips"</span> <span class="filter-type">replace</span> <span class="string">", "</span> <span class="string">"|"</span> <span class="predicate-type">==</span> <span class="string">"192.168.2.1|10.0.0.20|10.0.0.10"</span> <span class="comment"># replace</span>
<span class="query-type">jsonpath</span> <span class="string">"$.ips"</span> <span class="filter-type">split</span> <span class="string">", "</span> <span class="filter-type">count</span> <span class="predicate-type">==</span> <span class="number">3</span> <span class="comment"># split</span>
<span class="query-type">header</span> <span class="string">"Expires"</span> <span class="filter-type">toDate</span> <span class="string">"%a, %d %b %Y %H:%M:%S GMT"</span> <span class="filter-type">daysBeforeNow</span> <span class="predicate-type">&gt;</span> <span class="number">1000</span> <span class="comment"># toDate</span>
<span class="query-type">jsonpath</span> <span class="string">"$.pi"</span> <span class="filter-type">toFloat</span> <span class="predicate-type">==</span> <span class="number">3.14</span> <span class="comment"># toFloat</span>
<span class="query-type">sha256</span> <span class="filter-type">toHex</span> <span class="predicate-type">==</span> <span class="string">"039058c6f2c0cb492c533b0a4d14ef77cc0f78abccced5287d84a1a2011cfb81"</span> <span class="comment"># toHex</span>
<span class="query-type">jsonpath</span> <span class="string">"$.id"</span> <span class="filter-type">toInt</span> <span class="predicate-type">==</span> <span class="number">123</span> <span class="comment"># toInt</span>
<span class="query-type">jsonpath</span> <span class="string">"$.id"</span> <span class="filter-type">toString</span> <span class="predicate-type">==</span> <span class="string">"123"</span> <span class="comment"># toString</span>
<span class="query-type">jsonpath</span> <span class="string">"$.encoded_url"</span> <span class="filter-type">urlDecode</span> <span class="predicate-type">==</span> <span class="string">"https://mozilla.org/?x=шеллы"</span> <span class="comment"># urlDecode</span>
<span class="query-type">jsonpath</span> <span class="string">"$.url"</span> <span class="filter-type">urlEncode</span> <span class="predicate-type">==</span> <span class="string">"https%3A//mozilla.org/%3Fx%3D%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"</span> <span class="comment"># urlEncode</span>
<span class="query-type">jsonpath</span> <span class="string">"$.url"</span> <span class="filter-type">urlQueryParam</span> <span class="string">"token"</span> <span class="predicate-type">==</span> <span class="string">"XYZ"</span> <span class="comment"># urlQueryParam</span>
<span class="query-type">bytes</span> <span class="filter-type">decode</span> <span class="string">"iso-8859-1"</span> <span class="filter-type">xpath</span> <span class="string">"string(//p)"</span> <span class="predicate-type">==</span> <span class="string">"Hello"</span> <span class="comment"># xpath</span>
</span></span></code></pre>

View File

@ -1,22 +1,22 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/float</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="section-header">[Asserts]</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[1]"</span> <span class="predicate-type">==</span> <span class="number">0.0</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[2]"</span> <span class="predicate-type">!=</span> <span class="number">0.0</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[2]"</span> <span class="predicate-type">==</span> <span class="number">0.0000000000000001</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[3]"</span> <span class="predicate-type">==</span> <span class="number">0.000000000000001</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[4]"</span> <span class="predicate-type">==</span> <span class="number">0.333</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[4]"</span> <span class="predicate-type">!=</span> <span class="number">0.3333333333333333</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[5]"</span> <span class="predicate-type">==</span> <span class="number">0.3333333333333333</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[5]"</span> <span class="predicate-type">==</span> <span class="number">0.333333333333333333</span> <span class="comment"># exceeding floating-point precision in expected value</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[6]"</span> <span class="predicate-type">==</span> <span class="number">0.333333333333333333</span> <span class="comment"># exceeding floating-point precision in json response</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[7]"</span> <span class="predicate-type">==</span> <span class="number">1.0</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[7]"</span> <span class="predicate-type">==</span> <span class="number">1</span> <span class="comment"># using an expected integer</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[8]"</span> <span class="predicate-type">==</span> <span class="number">1.001</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[9]"</span> <span class="predicate-type">==</span> <span class="number">1.07</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[9]"</span> <span class="predicate-type">==</span> <span class="number">1.070</span> <span class="comment"># additional trailing zero in expected value</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[10]"</span> <span class="predicate-type">==</span> <span class="number">1.07</span> <span class="comment"># additional trailing zero in json response</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[11]"</span> <span class="predicate-type">==</span> <span class="number">1.1</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$[12]"</span> <span class="predicate-type">==</span> <span class="number">1.5</span></span>
<span class="json"><span class="line">[ -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 ]</span></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/float</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
<span class="section-header">[Asserts]</span>
<span class="query-type">jsonpath</span> <span class="string">"$[1]"</span> <span class="predicate-type">==</span> <span class="number">0.0</span>
<span class="query-type">jsonpath</span> <span class="string">"$[2]"</span> <span class="predicate-type">!=</span> <span class="number">0.0</span>
<span class="query-type">jsonpath</span> <span class="string">"$[2]"</span> <span class="predicate-type">==</span> <span class="number">0.0000000000000001</span>
<span class="query-type">jsonpath</span> <span class="string">"$[3]"</span> <span class="predicate-type">==</span> <span class="number">0.000000000000001</span>
<span class="query-type">jsonpath</span> <span class="string">"$[4]"</span> <span class="predicate-type">==</span> <span class="number">0.333</span>
<span class="query-type">jsonpath</span> <span class="string">"$[4]"</span> <span class="predicate-type">!=</span> <span class="number">0.3333333333333333</span>
<span class="query-type">jsonpath</span> <span class="string">"$[5]"</span> <span class="predicate-type">==</span> <span class="number">0.3333333333333333</span>
<span class="query-type">jsonpath</span> <span class="string">"$[5]"</span> <span class="predicate-type">==</span> <span class="number">0.333333333333333333</span> <span class="comment"># exceeding floating-point precision in expected value</span>
<span class="query-type">jsonpath</span> <span class="string">"$[6]"</span> <span class="predicate-type">==</span> <span class="number">0.333333333333333333</span> <span class="comment"># exceeding floating-point precision in json response</span>
<span class="query-type">jsonpath</span> <span class="string">"$[7]"</span> <span class="predicate-type">==</span> <span class="number">1.0</span>
<span class="query-type">jsonpath</span> <span class="string">"$[7]"</span> <span class="predicate-type">==</span> <span class="number">1</span> <span class="comment"># using an expected integer</span>
<span class="query-type">jsonpath</span> <span class="string">"$[8]"</span> <span class="predicate-type">==</span> <span class="number">1.001</span>
<span class="query-type">jsonpath</span> <span class="string">"$[9]"</span> <span class="predicate-type">==</span> <span class="number">1.07</span>
<span class="query-type">jsonpath</span> <span class="string">"$[9]"</span> <span class="predicate-type">==</span> <span class="number">1.070</span> <span class="comment"># additional trailing zero in expected value</span>
<span class="query-type">jsonpath</span> <span class="string">"$[10]"</span> <span class="predicate-type">==</span> <span class="number">1.07</span> <span class="comment"># additional trailing zero in json response</span>
<span class="query-type">jsonpath</span> <span class="string">"$[11]"</span> <span class="predicate-type">==</span> <span class="number">1.1</span>
<span class="query-type">jsonpath</span> <span class="string">"$[12]"</span> <span class="predicate-type">==</span> <span class="number">1.5</span>
<span class="json">[ -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 ]</span>
</span></span></code></pre>

View File

@ -1,5 +1,5 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span></span>
<span class="line"><span class="section-header">[Query]</span></span>
<span class="line"><span class="string">uuid</span>: <span class="string">{{newUuid}}</span></span>
<span class="line"><span class="string">now</span>: <span class="string">{{newDate}}</span></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span>
<span class="section-header">[Query]</span>
<span class="string">uuid</span>: <span class="string">{{newUuid}}</span>
<span class="string">now</span>: <span class="string">{{newDate}}</span>
</span></span></code></pre>

View File

@ -1,50 +1,50 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/default-headers</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/default-headers</span></span>
<span class="line"><span class="string">User-Agent</span>: <span class="string">hurl/1.0</span></span>
<span class="line"><span class="string">Host</span>: <span class="string">localhost:8000</span> <span class="comment"># Comment</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/default-headers</span></span>
<span class="line"><span class="string">User-Agent</span>: <span class="string">hurl/1.0</span></span>
<span class="line"><span class="string">Host</span>: <span class="string">localhost:8000</span> <span class="comment"># Comment</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/custom-headers</span></span>
<span class="line"><span class="string">Fruit</span>: <span class="string">Raspberry</span></span>
<span class="line"><span class="string">Fruit</span>: <span class="string">Apple</span></span>
<span class="line"><span class="string">Fruit</span>: <span class="string">Banana</span></span>
<span class="line"><span class="string">Fruit</span>: <span class="string">Grape</span></span>
<span class="line"><span class="string">Color</span>: <span class="string">Green</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/custom-headers</span></span>
<span class="line"><span class="comment"># Headers name/value can use templates</span></span>
<span class="line"><span class="string">{{key}}</span>: <span class="string">Raspberry</span></span>
<span class="line"><span class="string">{{key}}</span>: <span class="string">Apple</span></span>
<span class="line"><span class="string">{{key}}</span>: <span class="string">Banana</span></span>
<span class="line"><span class="string">{{key}}</span>: <span class="string">{{foo}}</span></span>
<span class="line"><span class="string">Color</span>: <span class="string">{{color}}</span></span>
<span class="line"><span class="section-header">[Options]</span></span>
<span class="line"><span class="string">variable</span>: key=<span class="string">Fruit</span></span>
<span class="line"><span class="string">variable</span>: color=<span class="string">Green</span></span>
<span class="line"><span class="string">variable</span>: foo=<span class="string">Grape</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/custom-headers-utf8</span></span>
<span class="line"><span class="string">Beverage</span>: <span class="string">café</span> <span class="comment"># Send the utf8 string - expected to be decoded as ascii in the server side</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/custom-headers-value</span></span>
<span class="line"><span class="string">Id</span>: <span class="string">\#123</span> <span class="comment"># Send a hash in the value</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/custom-headers-quote</span></span>
<span class="line"><span class="string">Header1</span>: <span class="string">'</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/response-headers</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="string">Beverage</span>: <span class="string">cafe</span> <span class="comment"># TBC send utf8</span></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/default-headers</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
</span></span><span class="entry"><span class="request">
<span class="method">GET</span> <span class="url">http://localhost:8000/default-headers</span>
<span class="string">User-Agent</span>: <span class="string">hurl/1.0</span>
<span class="string">Host</span>: <span class="string">localhost:8000</span> <span class="comment"># Comment</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
</span></span><span class="entry"><span class="request">
<span class="method">GET</span> <span class="url">http://localhost:8000/default-headers</span>
<span class="string">User-Agent</span>: <span class="string">hurl/1.0</span>
<span class="string">Host</span>: <span class="string">localhost:8000</span> <span class="comment"># Comment</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
</span></span><span class="entry"><span class="request">
<span class="method">GET</span> <span class="url">http://localhost:8000/custom-headers</span>
<span class="string">Fruit</span>: <span class="string">Raspberry</span>
<span class="string">Fruit</span>: <span class="string">Apple</span>
<span class="string">Fruit</span>: <span class="string">Banana</span>
<span class="string">Fruit</span>: <span class="string">Grape</span>
<span class="string">Color</span>: <span class="string">Green</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
</span></span><span class="entry"><span class="request">
<span class="method">GET</span> <span class="url">http://localhost:8000/custom-headers</span>
<span class="comment"># Headers name/value can use templates</span>
<span class="string">{{key}}</span>: <span class="string">Raspberry</span>
<span class="string">{{key}}</span>: <span class="string">Apple</span>
<span class="string">{{key}}</span>: <span class="string">Banana</span>
<span class="string">{{key}}</span>: <span class="string">{{foo}}</span>
<span class="string">Color</span>: <span class="string">{{color}}</span>
<span class="section-header">[Options]</span>
<span class="string">variable</span>: key=<span class="string">Fruit</span>
<span class="string">variable</span>: color=<span class="string">Green</span>
<span class="string">variable</span>: foo=<span class="string">Grape</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
</span></span><span class="entry"><span class="request">
<span class="method">GET</span> <span class="url">http://localhost:8000/custom-headers-utf8</span>
<span class="string">Beverage</span>: <span class="string">café</span> <span class="comment"># Send the utf8 string - expected to be decoded as ascii in the server side</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
</span></span><span class="entry"><span class="request">
<span class="method">GET</span> <span class="url">http://localhost:8000/custom-headers-value</span>
<span class="string">Id</span>: <span class="string">\#123</span> <span class="comment"># Send a hash in the value</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
</span></span><span class="entry"><span class="request">
<span class="method">GET</span> <span class="url">http://localhost:8000/custom-headers-quote</span>
<span class="string">Header1</span>: <span class="string">'</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
</span></span><span class="entry"><span class="request">
<span class="method">GET</span> <span class="url">http://localhost:8000/response-headers</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
<span class="string">Beverage</span>: <span class="string">cafe</span> <span class="comment"># TBC send utf8</span>
</span></span></code></pre>

View File

@ -1,15 +1,15 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP/1.0</span> <span class="number">200</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP/1.1</span> <span class="number">200</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP/2</span> <span class="number">200</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP/3</span> <span class="number">200</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span>
</span><span class="response"><span class="version">HTTP/1.0</span> <span class="number">200</span>
</span></span><span class="entry"><span class="request">
<span class="method">GET</span> <span class="url">http://localhost:8000/hello</span>
</span><span class="response"><span class="version">HTTP/1.1</span> <span class="number">200</span>
</span></span><span class="entry"><span class="request">
<span class="method">GET</span> <span class="url">http://localhost:8000/hello</span>
</span><span class="response"><span class="version">HTTP/2</span> <span class="number">200</span>
</span></span><span class="entry"><span class="request">
<span class="method">GET</span> <span class="url">http://localhost:8000/hello</span>
</span><span class="response"><span class="version">HTTP/3</span> <span class="number">200</span>
</span></span><span class="entry"><span class="request">
<span class="method">GET</span> <span class="url">http://localhost:8000/hello</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
</span></span></code></pre>

View File

@ -1,17 +1,17 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/methods/get</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">HEAD</span> <span class="url">http://localhost:8000/methods/head</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/methods/post</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">PUT</span> <span class="url">http://localhost:8000/methods/put</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">DELETE</span> <span class="url">http://localhost:8000/methods/delete</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">CONNECT</span> <span class="url">http://localhost:8000/methods/connect</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">OPTIONS</span> <span class="url">http://localhost:8000/methods/options</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">TRACE</span> <span class="url">http://localhost:8000/methods/trace</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">PATCH</span> <span class="url">http://localhost:8000/methods/patch</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">LINK</span> <span class="url">http://localhost:8000/methods/link</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">UNLINK</span> <span class="url">http://localhost:8000/methods/unlink</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">PURGE</span> <span class="url">http://localhost:8000/methods/purge</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">LOCK</span> <span class="url">http://localhost:8000/methods/lock</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">UNLOCK</span> <span class="url">http://localhost:8000/methods/unlock</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">PROPFIND</span> <span class="url">http://localhost:8000/methods/propfind</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">VIEW</span> <span class="url">http://localhost:8000/methods/view</span></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/methods/get</span>
</span></span><span class="entry"><span class="request"><span class="method">HEAD</span> <span class="url">http://localhost:8000/methods/head</span>
</span></span><span class="entry"><span class="request"><span class="method">POST</span> <span class="url">http://localhost:8000/methods/post</span>
</span></span><span class="entry"><span class="request"><span class="method">PUT</span> <span class="url">http://localhost:8000/methods/put</span>
</span></span><span class="entry"><span class="request"><span class="method">DELETE</span> <span class="url">http://localhost:8000/methods/delete</span>
</span></span><span class="entry"><span class="request"><span class="method">CONNECT</span> <span class="url">http://localhost:8000/methods/connect</span>
</span></span><span class="entry"><span class="request"><span class="method">OPTIONS</span> <span class="url">http://localhost:8000/methods/options</span>
</span></span><span class="entry"><span class="request"><span class="method">TRACE</span> <span class="url">http://localhost:8000/methods/trace</span>
</span></span><span class="entry"><span class="request"><span class="method">PATCH</span> <span class="url">http://localhost:8000/methods/patch</span>
</span></span><span class="entry"><span class="request"><span class="method">LINK</span> <span class="url">http://localhost:8000/methods/link</span>
</span></span><span class="entry"><span class="request"><span class="method">UNLINK</span> <span class="url">http://localhost:8000/methods/unlink</span>
</span></span><span class="entry"><span class="request"><span class="method">PURGE</span> <span class="url">http://localhost:8000/methods/purge</span>
</span></span><span class="entry"><span class="request"><span class="method">LOCK</span> <span class="url">http://localhost:8000/methods/lock</span>
</span></span><span class="entry"><span class="request"><span class="method">UNLOCK</span> <span class="url">http://localhost:8000/methods/unlock</span>
</span></span><span class="entry"><span class="request"><span class="method">PROPFIND</span> <span class="url">http://localhost:8000/methods/propfind</span>
</span></span><span class="entry"><span class="request"><span class="method">VIEW</span> <span class="url">http://localhost:8000/methods/view</span>
</span></span></code></pre>

View File

@ -1,163 +1,163 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="comment"># In each request, we sent a multiline body and get</span></span>
<span class="line"><span class="comment"># the same body as response. Request body is tested server side</span></span>
<span class="line"><span class="comment"># and we assert the response here.</span></span>
<span class="line"></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/multilines/plain-text</span></span>
<span class="line"><span class="multiline">```</span></span>
<span class="line"><span class="multiline">line1</span></span>
<span class="line"><span class="multiline">line2</span></span>
<span class="line"><span class="multiline">line3</span></span>
<span class="line"><span class="multiline">A beautiful \u{2708}</span></span>
<span class="line"><span class="multiline">```</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="comment"># Different ways of testing body response:</span></span>
<span class="line"><span class="comment"># with explicit asserts:</span></span>
<span class="line"><span class="section-header">[Asserts]</span></span>
<span class="line"><span class="query-type">body</span> <span class="predicate-type">==</span> <span class="string">"line1\nline2\nline3\nA beautiful \u{2708}\n"</span></span>
<span class="line"><span class="query-type">body</span> <span class="predicate-type">==</span> <span class="multiline">```</span></span>
<span class="line"><span class="multiline">line1</span></span>
<span class="line"><span class="multiline">line2</span></span>
<span class="line"><span class="multiline">line3</span></span>
<span class="line"><span class="multiline">A beautiful \u{2708}</span></span>
<span class="line"><span class="multiline">```</span></span>
<span class="line"><span class="comment"># Or we can just test the body (implicit assert):</span></span>
<span class="line"><span class="multiline">```</span></span>
<span class="line"><span class="multiline">line1</span></span>
<span class="line"><span class="multiline">line2</span></span>
<span class="line"><span class="multiline">line3</span></span>
<span class="line"><span class="multiline">A beautiful \u{2708}</span></span>
<span class="line"><span class="multiline">```</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="comment"># escape attributes are going to be deprecated</span></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/multilines/plain-text</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="section-header">[Asserts]</span></span>
<span class="line"><span class="query-type">body</span> <span class="predicate-type">==</span> <span class="multiline">```escape</span></span>
<span class="line"><span class="multiline">line1</span></span>
<span class="line"><span class="multiline">line2</span></span>
<span class="line"><span class="multiline">line3</span></span>
<span class="line"><span class="multiline">A beautiful \u{2708}</span></span>
<span class="line"><span class="multiline">```</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/multilines/json</span></span>
<span class="line"><span class="multiline">```json</span></span>
<span class="line"><span class="multiline">{</span></span>
<span class="line"><span class="multiline"> "foo": "bar"</span></span>
<span class="line"><span class="multiline"> "baz": 123456</span></span>
<span class="line"><span class="multiline">}</span></span>
<span class="line"><span class="multiline">```</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="comment"># Different ways of testing body response:</span></span>
<span class="line"><span class="comment"># with explicit asserts:</span></span>
<span class="line"><span class="section-header">[Asserts]</span></span>
<span class="line"><span class="query-type">body</span> <span class="predicate-type">==</span> <span class="string">"{\n \"foo\": \"bar\"\n \"baz\": 123456\n}\n"</span></span>
<span class="line"><span class="query-type">body</span> <span class="predicate-type">==</span> <span class="multiline">```json</span></span>
<span class="line"><span class="multiline">{</span></span>
<span class="line"><span class="multiline"> "foo": "bar"</span></span>
<span class="line"><span class="multiline"> "baz": 123456</span></span>
<span class="line"><span class="multiline">}</span></span>
<span class="line"><span class="multiline">```</span></span>
<span class="line"><span class="comment"># Or we can just test the body (implicit assert):</span></span>
<span class="line"><span class="multiline">```json</span></span>
<span class="line"><span class="multiline">{</span></span>
<span class="line"><span class="multiline"> "foo": "bar"</span></span>
<span class="line"><span class="multiline"> "baz": 123456</span></span>
<span class="line"><span class="multiline">}</span></span>
<span class="line"><span class="multiline">```</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/multilines/xml</span></span>
<span class="line"><span class="multiline">```xml</span></span>
<span class="line"><span class="multiline">&lt;?xml version="1.0"?&gt;</span></span>
<span class="line"><span class="multiline">&lt;catalog&gt;</span></span>
<span class="line"><span class="multiline"> &lt;book id="bk101"&gt;</span></span>
<span class="line"><span class="multiline"> &lt;author&gt;Gambardella, Matthew&lt;/author&gt;</span></span>
<span class="line"><span class="multiline"> &lt;title&gt;XML Developer's Guide&lt;/title&gt;</span></span>
<span class="line"><span class="multiline"> &lt;genre&gt;Computer&lt;/genre&gt;</span></span>
<span class="line"><span class="multiline"> &lt;price&gt;44.95&lt;/price&gt;</span></span>
<span class="line"><span class="multiline"> &lt;publish_date&gt;2000-10-01&lt;/publish_date&gt;</span></span>
<span class="line"><span class="multiline"> &lt;description&gt;An in-depth look at creating applications</span></span>
<span class="line"><span class="multiline"> with XML.&lt;/description&gt;</span></span>
<span class="line"><span class="multiline"> &lt;/book&gt;</span></span>
<span class="line"><span class="multiline">&lt;/catalog&gt;</span></span>
<span class="line"><span class="multiline">```</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="comment"># Different ways of testing body response:</span></span>
<span class="line"><span class="comment"># with explicit asserts:</span></span>
<span class="line"><span class="section-header">[Asserts]</span></span>
<span class="line"><span class="query-type">body</span> <span class="predicate-type">==</span> <span class="string">"&lt;?xml version=\"1.0\"?&gt;\n&lt;catalog&gt;\n &lt;book id=\"bk101\"&gt;\n &lt;author&gt;Gambardella, Matthew&lt;/author&gt;\n &lt;title&gt;XML Developer's Guide&lt;/title&gt;\n &lt;genre&gt;Computer&lt;/genre&gt;\n &lt;price&gt;44.95&lt;/price&gt;\n &lt;publish_date&gt;2000-10-01&lt;/publish_date&gt;\n &lt;description&gt;An in-depth look at creating applications\n with XML.&lt;/description&gt;\n &lt;/book&gt;\n&lt;/catalog&gt;\n"</span></span>
<span class="line"><span class="query-type">body</span> <span class="predicate-type">==</span> <span class="multiline">```xml</span></span>
<span class="line"><span class="multiline">&lt;?xml version="1.0"?&gt;</span></span>
<span class="line"><span class="multiline">&lt;catalog&gt;</span></span>
<span class="line"><span class="multiline"> &lt;book id="bk101"&gt;</span></span>
<span class="line"><span class="multiline"> &lt;author&gt;Gambardella, Matthew&lt;/author&gt;</span></span>
<span class="line"><span class="multiline"> &lt;title&gt;XML Developer's Guide&lt;/title&gt;</span></span>
<span class="line"><span class="multiline"> &lt;genre&gt;Computer&lt;/genre&gt;</span></span>
<span class="line"><span class="multiline"> &lt;price&gt;44.95&lt;/price&gt;</span></span>
<span class="line"><span class="multiline"> &lt;publish_date&gt;2000-10-01&lt;/publish_date&gt;</span></span>
<span class="line"><span class="multiline"> &lt;description&gt;An in-depth look at creating applications</span></span>
<span class="line"><span class="multiline"> with XML.&lt;/description&gt;</span></span>
<span class="line"><span class="multiline"> &lt;/book&gt;</span></span>
<span class="line"><span class="multiline">&lt;/catalog&gt;</span></span>
<span class="line"><span class="multiline">```</span></span>
<span class="line"><span class="comment"># Or we can just test the body (implicit assert):</span></span>
<span class="line"><span class="multiline">```xml</span></span>
<span class="line"><span class="multiline">&lt;?xml version="1.0"?&gt;</span></span>
<span class="line"><span class="multiline">&lt;catalog&gt;</span></span>
<span class="line"><span class="multiline"> &lt;book id="bk101"&gt;</span></span>
<span class="line"><span class="multiline"> &lt;author&gt;Gambardella, Matthew&lt;/author&gt;</span></span>
<span class="line"><span class="multiline"> &lt;title&gt;XML Developer's Guide&lt;/title&gt;</span></span>
<span class="line"><span class="multiline"> &lt;genre&gt;Computer&lt;/genre&gt;</span></span>
<span class="line"><span class="multiline"> &lt;price&gt;44.95&lt;/price&gt;</span></span>
<span class="line"><span class="multiline"> &lt;publish_date&gt;2000-10-01&lt;/publish_date&gt;</span></span>
<span class="line"><span class="multiline"> &lt;description&gt;An in-depth look at creating applications</span></span>
<span class="line"><span class="multiline"> with XML.&lt;/description&gt;</span></span>
<span class="line"><span class="multiline"> &lt;/book&gt;</span></span>
<span class="line"><span class="multiline">&lt;/catalog&gt;</span></span>
<span class="line"><span class="multiline">```</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span class="method">POST</span> <span class="url">http://localhost:8000/multilines/graphql</span></span>
<span class="line"><span class="multiline">```graphql</span></span>
<span class="line"><span class="multiline">{</span></span>
<span class="line"><span class="multiline"> hero {</span></span>
<span class="line"><span class="multiline"> name</span></span>
<span class="line"><span class="multiline"> # Queries can have comments!</span></span>
<span class="line"><span class="multiline"> friends {</span></span>
<span class="line"><span class="multiline"> name</span></span>
<span class="line"><span class="multiline"> }</span></span>
<span class="line"><span class="multiline"> }</span></span>
<span class="line"><span class="multiline">}</span></span>
<span class="line"><span class="multiline">```</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="comment"># Different ways of testing body response:</span></span>
<span class="line"><span class="comment"># with explicit asserts:</span></span>
<span class="line"><span class="section-header">[Asserts]</span></span>
<span class="line"><span class="query-type">body</span> <span class="predicate-type">==</span> <span class="string">"{\"query\":\"{\\n hero {\\n name\\n # Queries can have comments!\\n friends {\\n name\\n }\\n }\\n}\"}"</span></span>
<span class="line"><span class="query-type">body</span> <span class="predicate-type">==</span> <span class="multiline">```graphql</span></span>
<span class="line"><span class="multiline">{</span></span>
<span class="line"><span class="multiline"> hero {</span></span>
<span class="line"><span class="multiline"> name</span></span>
<span class="line"><span class="multiline"> # Queries can have comments!</span></span>
<span class="line"><span class="multiline"> friends {</span></span>
<span class="line"><span class="multiline"> name</span></span>
<span class="line"><span class="multiline"> }</span></span>
<span class="line"><span class="multiline"> }</span></span>
<span class="line"><span class="multiline">}</span></span>
<span class="line"><span class="multiline">```</span></span>
<span class="line"><span class="comment"># Or we can just test the body (implicit assert):</span></span>
<span class="line"><span class="multiline">```graphql</span></span>
<span class="line"><span class="multiline">{</span></span>
<span class="line"><span class="multiline"> hero {</span></span>
<span class="line"><span class="multiline"> name</span></span>
<span class="line"><span class="multiline"> # Queries can have comments!</span></span>
<span class="line"><span class="multiline"> friends {</span></span>
<span class="line"><span class="multiline"> name</span></span>
<span class="line"><span class="multiline"> }</span></span>
<span class="line"><span class="multiline"> }</span></span>
<span class="line"><span class="multiline">}</span></span>
<span class="line"><span class="multiline">```</span></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="comment"># In each request, we sent a multiline body and get</span>
<span class="comment"># the same body as response. Request body is tested server side</span>
<span class="comment"># and we assert the response here.</span>
<span class="method">POST</span> <span class="url">http://localhost:8000/multilines/plain-text</span>
<span class="multiline">```
line1
line2
line3
A beautiful \u{2708}
```</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
<span class="comment"># Different ways of testing body response:</span>
<span class="comment"># with explicit asserts:</span>
<span class="section-header">[Asserts]</span>
<span class="query-type">body</span> <span class="predicate-type">==</span> <span class="string">"line1\nline2\nline3\nA beautiful \u{2708}\n"</span>
<span class="query-type">body</span> <span class="predicate-type">==</span> <span class="multiline">```
line1
line2
line3
A beautiful \u{2708}
```</span>
<span class="comment"># Or we can just test the body (implicit assert):</span>
<span class="multiline">```
line1
line2
line3
A beautiful \u{2708}
```</span>
</span></span><span class="entry"><span class="request">
<span class="comment"># escape attributes are going to be deprecated</span>
<span class="method">POST</span> <span class="url">http://localhost:8000/multilines/plain-text</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
<span class="section-header">[Asserts]</span>
<span class="query-type">body</span> <span class="predicate-type">==</span> <span class="multiline">```escape
line1
line2
line3
A beautiful \u{2708}
```</span>
</span></span><span class="entry"><span class="request">
<span class="method">POST</span> <span class="url">http://localhost:8000/multilines/json</span>
<span class="multiline">```json
{
"foo": "bar"
"baz": 123456
}
```</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
<span class="comment"># Different ways of testing body response:</span>
<span class="comment"># with explicit asserts:</span>
<span class="section-header">[Asserts]</span>
<span class="query-type">body</span> <span class="predicate-type">==</span> <span class="string">"{\n \"foo\": \"bar\"\n \"baz\": 123456\n}\n"</span>
<span class="query-type">body</span> <span class="predicate-type">==</span> <span class="multiline">```json
{
"foo": "bar"
"baz": 123456
}
```</span>
<span class="comment"># Or we can just test the body (implicit assert):</span>
<span class="multiline">```json
{
"foo": "bar"
"baz": 123456
}
```</span>
</span></span><span class="entry"><span class="request">
<span class="method">POST</span> <span class="url">http://localhost:8000/multilines/xml</span>
<span class="multiline">```xml
&lt;?xml version="1.0"?&gt;
&lt;catalog&gt;
&lt;book id="bk101"&gt;
&lt;author&gt;Gambardella, Matthew&lt;/author&gt;
&lt;title&gt;XML Developer's Guide&lt;/title&gt;
&lt;genre&gt;Computer&lt;/genre&gt;
&lt;price&gt;44.95&lt;/price&gt;
&lt;publish_date&gt;2000-10-01&lt;/publish_date&gt;
&lt;description&gt;An in-depth look at creating applications
with XML.&lt;/description&gt;
&lt;/book&gt;
&lt;/catalog&gt;
```</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
<span class="comment"># Different ways of testing body response:</span>
<span class="comment"># with explicit asserts:</span>
<span class="section-header">[Asserts]</span>
<span class="query-type">body</span> <span class="predicate-type">==</span> <span class="string">"&lt;?xml version=\"1.0\"?&gt;\n&lt;catalog&gt;\n &lt;book id=\"bk101\"&gt;\n &lt;author&gt;Gambardella, Matthew&lt;/author&gt;\n &lt;title&gt;XML Developer's Guide&lt;/title&gt;\n &lt;genre&gt;Computer&lt;/genre&gt;\n &lt;price&gt;44.95&lt;/price&gt;\n &lt;publish_date&gt;2000-10-01&lt;/publish_date&gt;\n &lt;description&gt;An in-depth look at creating applications\n with XML.&lt;/description&gt;\n &lt;/book&gt;\n&lt;/catalog&gt;\n"</span>
<span class="query-type">body</span> <span class="predicate-type">==</span> <span class="multiline">```xml
&lt;?xml version="1.0"?&gt;
&lt;catalog&gt;
&lt;book id="bk101"&gt;
&lt;author&gt;Gambardella, Matthew&lt;/author&gt;
&lt;title&gt;XML Developer's Guide&lt;/title&gt;
&lt;genre&gt;Computer&lt;/genre&gt;
&lt;price&gt;44.95&lt;/price&gt;
&lt;publish_date&gt;2000-10-01&lt;/publish_date&gt;
&lt;description&gt;An in-depth look at creating applications
with XML.&lt;/description&gt;
&lt;/book&gt;
&lt;/catalog&gt;
```</span>
<span class="comment"># Or we can just test the body (implicit assert):</span>
<span class="multiline">```xml
&lt;?xml version="1.0"?&gt;
&lt;catalog&gt;
&lt;book id="bk101"&gt;
&lt;author&gt;Gambardella, Matthew&lt;/author&gt;
&lt;title&gt;XML Developer's Guide&lt;/title&gt;
&lt;genre&gt;Computer&lt;/genre&gt;
&lt;price&gt;44.95&lt;/price&gt;
&lt;publish_date&gt;2000-10-01&lt;/publish_date&gt;
&lt;description&gt;An in-depth look at creating applications
with XML.&lt;/description&gt;
&lt;/book&gt;
&lt;/catalog&gt;
```</span>
</span></span><span class="entry"><span class="request">
<span class="method">POST</span> <span class="url">http://localhost:8000/multilines/graphql</span>
<span class="multiline">```graphql
{
hero {
name
# Queries can have comments!
friends {
name
}
}
}
```</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
<span class="comment"># Different ways of testing body response:</span>
<span class="comment"># with explicit asserts:</span>
<span class="section-header">[Asserts]</span>
<span class="query-type">body</span> <span class="predicate-type">==</span> <span class="string">"{\"query\":\"{\\n hero {\\n name\\n # Queries can have comments!\\n friends {\\n name\\n }\\n }\\n}\"}"</span>
<span class="query-type">body</span> <span class="predicate-type">==</span> <span class="multiline">```graphql
{
hero {
name
# Queries can have comments!
friends {
name
}
}
}
```</span>
<span class="comment"># Or we can just test the body (implicit assert):</span>
<span class="multiline">```graphql
{
hero {
name
# Queries can have comments!
friends {
name
}
}
}
```</span>
</span></span></code></pre>

View File

@ -1,3 +1,3 @@
<pre><code class="language-hurl"><span class="line"><span class="comment"># all the entries</span></span>
<span class="line"><span class="comment"># have been commented</span></span>
<pre><code class="language-hurl"><span class="comment"># all the entries</span>
<span class="comment"># have been commented</span>
</code></pre>

View File

@ -1,95 +1,95 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span></span>
<span class="line"><span class="section-header">[Options]</span></span>
<span class="line"><span class="string">aws-sigv4</span>: <span class="string">aws:amz:eu-central-1:sts</span></span>
<span class="line"><span class="string">cacert</span>: <span class="filename">cacertfile</span></span>
<span class="line"><span class="string">cert</span>: <span class="filename">certfile</span></span>
<span class="line"><span class="string">cert</span>: <span class="filename">certfile:qU114@q,["NO</span></span>
<span class="line"><span class="string">key</span>: <span class="filename">keyfile</span></span>
<span class="line"><span class="string">compressed</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">connect-to</span>: <span class="string">example.com:443:example.net:8443</span></span>
<span class="line"><span class="string">connect-timeout</span>: <span class="number">60</span><span class="unit">s</span></span>
<span class="line"><span class="string">delay</span>: <span class="number">1000</span></span>
<span class="line"><span class="string">delay</span>: <span class="number">1000</span><span class="unit">ms</span></span>
<span class="line"><span class="string">delay</span>: <span class="number">1</span><span class="unit">s</span></span>
<span class="line"><span class="string">location</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">location-trusted</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">header</span>: <span class="string">key: value</span></span>
<span class="line"><span class="string">http1.0</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">http1.1</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">http2</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">http3</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">insecure</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">ipv4</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">ipv6</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">limit-rate</span>: <span class="number">1000</span></span>
<span class="line"><span class="string">max-redirs</span>: <span class="number">10</span></span>
<span class="line"><span class="string">max-time</span>: <span class="number">100</span><span class="unit">s</span></span>
<span class="line"><span class="string">netrc</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">netrc-file</span>: <span class="filename">netrcfile</span></span>
<span class="line"><span class="string">netrc-optional</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">output</span>: <span class="filename">output.txt</span></span>
<span class="line"><span class="string">path-as-is</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">pinnedpubkey</span>: <span class="string">pinnedpubkeyfile</span></span>
<span class="line"><span class="string">proxy</span>: <span class="string">http://proxy.example</span></span>
<span class="line"><span class="string">repeat</span>: <span class="number">-1</span></span>
<span class="line"><span class="string">repeat</span>: <span class="number">5</span></span>
<span class="line"><span class="string">resolve</span>: <span class="string">example.com:443:127.0.0.1</span></span>
<span class="line"><span class="string">retry</span>: <span class="number">0</span></span>
<span class="line"><span class="string">retry</span>: <span class="number">-1</span></span>
<span class="line"><span class="string">retry</span>: <span class="number">4</span></span>
<span class="line"><span class="string">retry-interval</span>: <span class="number">1000</span></span>
<span class="line"><span class="string">retry-interval</span>: <span class="number">1000</span><span class="unit">ms</span></span>
<span class="line"><span class="string">retry-interval</span>: <span class="number">1</span><span class="unit">s</span></span>
<span class="line"><span class="string">skip</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">unix-socket</span>: <span class="string">build/unix_socket.sock</span></span>
<span class="line"><span class="string">user</span>: <span class="string">bob:secret</span></span>
<span class="line"><span class="string">variable</span>: user=<span class="null">null</span></span>
<span class="line"><span class="string">variable</span>: status=<span class="boolean">true</span></span>
<span class="line"><span class="string">variable</span>: count=<span class="number">2</span></span>
<span class="line"><span class="string">variable</span>: score=<span class="number">7.7</span></span>
<span class="line"><span class="string">variable</span>: name=<span class="string">Bob</span></span>
<span class="line"><span class="string">variable</span>:name = <span class="string">Bob</span></span>
<span class="line"><span class="string">verbose</span>: <span class="boolean">false</span></span>
<span class="line"><span class="string">very-verbose</span>: <span class="boolean">false</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span></span>
<span class="line"><span class="section-header">[Options]</span></span>
<span class="line"><span class="string">aws-sigv4</span>: <span class="string">{{aws-sigv4}}</span></span>
<span class="line"><span class="string">cacert</span>: <span class="filename">{{cacert}}</span></span>
<span class="line"><span class="string">cert</span>: <span class="filename">{{cert}}</span></span>
<span class="line"><span class="string">key</span>: <span class="filename">{{key}}</span></span>
<span class="line"><span class="string">compressed</span>: <span class="expr">{{compressed}}</span></span>
<span class="line"><span class="string">connect-to</span>: <span class="string">{{connect-to}}</span></span>
<span class="line"><span class="string">connect-timeout</span>: <span class="expr">{{connect-timeout}}</span></span>
<span class="line"><span class="string">delay</span>: <span class="expr">{{delay}}</span></span>
<span class="line"><span class="string">location</span>: <span class="expr">{{location}}</span></span>
<span class="line"><span class="string">location-trusted</span>: <span class="expr">{{location-trusted}}</span></span>
<span class="line"><span class="string">header</span>: <span class="string">{{header}}</span></span>
<span class="line"><span class="string">http1.0</span>: <span class="expr">{{http10}}</span></span>
<span class="line"><span class="string">http1.1</span>: <span class="expr">{{http11}}</span></span>
<span class="line"><span class="string">http2</span>: <span class="expr">{{http2}}</span></span>
<span class="line"><span class="string">http3</span>: <span class="expr">{{http3}}</span></span>
<span class="line"><span class="string">insecure</span>: <span class="expr">{{insecure}}</span></span>
<span class="line"><span class="string">ipv4</span>: <span class="expr">{{ipv4}}</span></span>
<span class="line"><span class="string">ipv6</span>: <span class="expr">{{ipv6}}</span></span>
<span class="line"><span class="string">limit-rate</span>: <span class="expr">{{limit-rate}}</span></span>
<span class="line"><span class="string">max-redirs</span>: <span class="expr">{{max-redirs}}</span></span>
<span class="line"><span class="string">max-time</span>: <span class="expr">{{max-time}}</span></span>
<span class="line"><span class="string">netrc</span>: <span class="expr">{{netrc}}</span></span>
<span class="line"><span class="string">netrc-file</span>: <span class="filename">{{netrc-file}}</span></span>
<span class="line"><span class="string">netrc-optional</span>: <span class="expr">{{netrc-optional}}</span></span>
<span class="line"><span class="string">output</span>: <span class="filename">{{output}}</span></span>
<span class="line"><span class="string">path-as-is</span>: <span class="expr">{{path-as-is}}</span></span>
<span class="line"><span class="string">pinnedpubkey</span>: <span class="string">{{pinnedpubkey}}</span></span>
<span class="line"><span class="string">proxy</span>: <span class="string">{{proxy}}</span></span>
<span class="line"><span class="string">repeat</span>: <span class="expr">{{repeat}}</span></span>
<span class="line"><span class="string">resolve</span>: <span class="string">{{resolve}}</span></span>
<span class="line"><span class="string">retry</span>: <span class="expr">{{retry}}</span></span>
<span class="line"><span class="string">retry-interval</span>: <span class="expr">{{retry-interval}}</span></span>
<span class="line"><span class="string">skip</span>: <span class="expr">{{skip}}</span></span>
<span class="line"><span class="string">unix-socket</span>: <span class="string">{{socket-file}}</span></span>
<span class="line"><span class="string">user</span>: <span class="string">{{user}}</span></span>
<span class="line"><span class="comment">#variable: {{variable}} NOT SUPPORTED YET</span></span>
<span class="line"><span class="string">verbose</span>: <span class="expr">{{verbose}}</span></span>
<span class="line"><span class="string">very-verbose</span>: <span class="expr">{{very-verbose}}</span></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span>
<span class="section-header">[Options]</span>
<span class="string">aws-sigv4</span>: <span class="string">aws:amz:eu-central-1:sts</span>
<span class="string">cacert</span>: <span class="filename">cacertfile</span>
<span class="string">cert</span>: <span class="filename">certfile</span>
<span class="string">cert</span>: <span class="filename">certfile:qU114@q,["NO</span>
<span class="string">key</span>: <span class="filename">keyfile</span>
<span class="string">compressed</span>: <span class="boolean">false</span>
<span class="string">connect-to</span>: <span class="string">example.com:443:example.net:8443</span>
<span class="string">connect-timeout</span>: <span class="number">60</span><span class="unit">s</span>
<span class="string">delay</span>: <span class="number">1000</span>
<span class="string">delay</span>: <span class="number">1000</span><span class="unit">ms</span>
<span class="string">delay</span>: <span class="number">1</span><span class="unit">s</span>
<span class="string">location</span>: <span class="boolean">false</span>
<span class="string">location-trusted</span>: <span class="boolean">false</span>
<span class="string">header</span>: <span class="string">key: value</span>
<span class="string">http1.0</span>: <span class="boolean">false</span>
<span class="string">http1.1</span>: <span class="boolean">false</span>
<span class="string">http2</span>: <span class="boolean">false</span>
<span class="string">http3</span>: <span class="boolean">false</span>
<span class="string">insecure</span>: <span class="boolean">false</span>
<span class="string">ipv4</span>: <span class="boolean">false</span>
<span class="string">ipv6</span>: <span class="boolean">false</span>
<span class="string">limit-rate</span>: <span class="number">1000</span>
<span class="string">max-redirs</span>: <span class="number">10</span>
<span class="string">max-time</span>: <span class="number">100</span><span class="unit">s</span>
<span class="string">netrc</span>: <span class="boolean">false</span>
<span class="string">netrc-file</span>: <span class="filename">netrcfile</span>
<span class="string">netrc-optional</span>: <span class="boolean">false</span>
<span class="string">output</span>: <span class="filename">output.txt</span>
<span class="string">path-as-is</span>: <span class="boolean">false</span>
<span class="string">pinnedpubkey</span>: <span class="string">pinnedpubkeyfile</span>
<span class="string">proxy</span>: <span class="string">http://proxy.example</span>
<span class="string">repeat</span>: <span class="number">-1</span>
<span class="string">repeat</span>: <span class="number">5</span>
<span class="string">resolve</span>: <span class="string">example.com:443:127.0.0.1</span>
<span class="string">retry</span>: <span class="number">0</span>
<span class="string">retry</span>: <span class="number">-1</span>
<span class="string">retry</span>: <span class="number">4</span>
<span class="string">retry-interval</span>: <span class="number">1000</span>
<span class="string">retry-interval</span>: <span class="number">1000</span><span class="unit">ms</span>
<span class="string">retry-interval</span>: <span class="number">1</span><span class="unit">s</span>
<span class="string">skip</span>: <span class="boolean">false</span>
<span class="string">unix-socket</span>: <span class="string">build/unix_socket.sock</span>
<span class="string">user</span>: <span class="string">bob:secret</span>
<span class="string">variable</span>: user=<span class="null">null</span>
<span class="string">variable</span>: status=<span class="boolean">true</span>
<span class="string">variable</span>: count=<span class="number">2</span>
<span class="string">variable</span>: score=<span class="number">7.7</span>
<span class="string">variable</span>: name=<span class="string">Bob</span>
<span class="string">variable</span>:name = <span class="string">Bob</span>
<span class="string">verbose</span>: <span class="boolean">false</span>
<span class="string">very-verbose</span>: <span class="boolean">false</span>
</span></span><span class="entry"><span class="request">
<span class="method">GET</span> <span class="url">http://localhost:8000/hello</span>
<span class="section-header">[Options]</span>
<span class="string">aws-sigv4</span>: <span class="string">{{aws-sigv4}}</span>
<span class="string">cacert</span>: <span class="filename">{{cacert}}</span>
<span class="string">cert</span>: <span class="filename">{{cert}}</span>
<span class="string">key</span>: <span class="filename">{{key}}</span>
<span class="string">compressed</span>: <span class="expr">{{compressed}}</span>
<span class="string">connect-to</span>: <span class="string">{{connect-to}}</span>
<span class="string">connect-timeout</span>: <span class="expr">{{connect-timeout}}</span>
<span class="string">delay</span>: <span class="expr">{{delay}}</span>
<span class="string">location</span>: <span class="expr">{{location}}</span>
<span class="string">location-trusted</span>: <span class="expr">{{location-trusted}}</span>
<span class="string">header</span>: <span class="string">{{header}}</span>
<span class="string">http1.0</span>: <span class="expr">{{http10}}</span>
<span class="string">http1.1</span>: <span class="expr">{{http11}}</span>
<span class="string">http2</span>: <span class="expr">{{http2}}</span>
<span class="string">http3</span>: <span class="expr">{{http3}}</span>
<span class="string">insecure</span>: <span class="expr">{{insecure}}</span>
<span class="string">ipv4</span>: <span class="expr">{{ipv4}}</span>
<span class="string">ipv6</span>: <span class="expr">{{ipv6}}</span>
<span class="string">limit-rate</span>: <span class="expr">{{limit-rate}}</span>
<span class="string">max-redirs</span>: <span class="expr">{{max-redirs}}</span>
<span class="string">max-time</span>: <span class="expr">{{max-time}}</span>
<span class="string">netrc</span>: <span class="expr">{{netrc}}</span>
<span class="string">netrc-file</span>: <span class="filename">{{netrc-file}}</span>
<span class="string">netrc-optional</span>: <span class="expr">{{netrc-optional}}</span>
<span class="string">output</span>: <span class="filename">{{output}}</span>
<span class="string">path-as-is</span>: <span class="expr">{{path-as-is}}</span>
<span class="string">pinnedpubkey</span>: <span class="string">{{pinnedpubkey}}</span>
<span class="string">proxy</span>: <span class="string">{{proxy}}</span>
<span class="string">repeat</span>: <span class="expr">{{repeat}}</span>
<span class="string">resolve</span>: <span class="string">{{resolve}}</span>
<span class="string">retry</span>: <span class="expr">{{retry}}</span>
<span class="string">retry-interval</span>: <span class="expr">{{retry-interval}}</span>
<span class="string">skip</span>: <span class="expr">{{skip}}</span>
<span class="string">unix-socket</span>: <span class="string">{{socket-file}}</span>
<span class="string">user</span>: <span class="string">{{user}}</span>
<span class="comment">#variable: {{variable}} NOT SUPPORTED YET</span>
<span class="string">verbose</span>: <span class="expr">{{verbose}}</span>
<span class="string">very-verbose</span>: <span class="expr">{{very-verbose}}</span>
</span></span></code></pre>

View File

@ -1,33 +1,33 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/dummy</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="section-header">[Asserts]</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.book"</span> <span class="not">not</span> <span class="predicate-type">==</span> <span class="string">"Dune"</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.book"</span> <span class="predicate-type">==</span> <span class="string">"Dune"</span> <span class="comment"># ==</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.color"</span> <span class="predicate-type">!=</span> <span class="string">"red"</span> <span class="comment"># !=</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.year"</span> <span class="predicate-type">&gt;</span> <span class="number">1978</span> <span class="comment"># &gt;</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.year"</span> <span class="predicate-type">&gt;=</span> <span class="number">1978</span> <span class="comment"># &gt;=</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.year"</span> <span class="predicate-type">&lt;</span> <span class="number">1978</span> <span class="comment"># &lt;</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.year"</span> <span class="predicate-type">&lt;=</span> <span class="number">1978</span> <span class="comment"># &lt;=</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.movie"</span> <span class="predicate-type">contains</span> <span class="string">"Empire"</span> <span class="comment"># contains</span></span>
<span class="line"><span class="query-type">bytes</span> <span class="predicate-type">contains</span> hex,<span class="hex">beef</span>; <span class="comment"># contains</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.movie"</span> <span class="predicate-type">endsWith</span> <span class="string">"Back"</span> <span class="comment"># endsWith</span></span>
<span class="line"><span class="query-type">bytes</span> <span class="predicate-type">endsWith</span> hex,<span class="hex">ab123456</span>; <span class="comment"># endsWith</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.book"</span> <span class="predicate-type">exists</span> <span class="comment"># exists</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.nooks"</span> <span class="predicate-type">includes</span> <span class="string">"Dune"</span> <span class="comment"># includes</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.nooks"</span> <span class="predicate-type">contains</span> <span class="string">"Dune"</span> <span class="comment"># contains</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.succeeded"</span> <span class="predicate-type">isBoolean</span> <span class="comment"># isBoolean</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.books"</span> <span class="predicate-type">isCollection</span> <span class="comment"># isCollection</span></span>
<span class="line"><span class="query-type">certificate</span> <span class="string">"Expire-Date"</span> <span class="predicate-type">isDate</span> <span class="comment"># isDate</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.publication_date"</span> <span class="predicate-type">isIsoDate</span> <span class="comment"># isIsoDate</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.movies"</span> <span class="predicate-type">isEmpty</span> <span class="comment"># isEmpty</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.height"</span> <span class="predicate-type">isFloat</span> <span class="comment"># isFloat</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.count"</span> <span class="predicate-type">isInteger</span> <span class="comment"># isInteger</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.name"</span> <span class="predicate-type">isString</span> <span class="comment"># isString</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.release"</span> <span class="predicate-type">matches</span> <span class="string">"\\d{4}"</span> <span class="comment"># matches</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.release"</span> <span class="predicate-type">matches</span> <span class="regex">/\d{4}/</span> <span class="comment"># matches</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.movie"</span> <span class="predicate-type">startsWith</span> <span class="string">"The"</span> <span class="comment"># startsWith</span></span>
<span class="line"><span class="query-type">bytes</span> <span class="predicate-type">startsWith</span> hex,<span class="hex">efbbbf</span>; <span class="comment"># startsWith</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.count"</span> <span class="predicate-type">isNumber</span> <span class="comment"># isNumber</span></span>
<span class="line"><span class="query-type">ip</span> <span class="predicate-type">isIpv6</span> <span class="comment"># isIpv6</span></span>
<span class="line"><span class="query-type">ip</span> <span class="predicate-type">isIpv4</span> <span class="comment"># isIpv4</span></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/dummy</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
<span class="section-header">[Asserts]</span>
<span class="query-type">jsonpath</span> <span class="string">"$.book"</span> <span class="not">not</span> <span class="predicate-type">==</span> <span class="string">"Dune"</span>
<span class="query-type">jsonpath</span> <span class="string">"$.book"</span> <span class="predicate-type">==</span> <span class="string">"Dune"</span> <span class="comment"># ==</span>
<span class="query-type">jsonpath</span> <span class="string">"$.color"</span> <span class="predicate-type">!=</span> <span class="string">"red"</span> <span class="comment"># !=</span>
<span class="query-type">jsonpath</span> <span class="string">"$.year"</span> <span class="predicate-type">&gt;</span> <span class="number">1978</span> <span class="comment"># &gt;</span>
<span class="query-type">jsonpath</span> <span class="string">"$.year"</span> <span class="predicate-type">&gt;=</span> <span class="number">1978</span> <span class="comment"># &gt;=</span>
<span class="query-type">jsonpath</span> <span class="string">"$.year"</span> <span class="predicate-type">&lt;</span> <span class="number">1978</span> <span class="comment"># &lt;</span>
<span class="query-type">jsonpath</span> <span class="string">"$.year"</span> <span class="predicate-type">&lt;=</span> <span class="number">1978</span> <span class="comment"># &lt;=</span>
<span class="query-type">jsonpath</span> <span class="string">"$.movie"</span> <span class="predicate-type">contains</span> <span class="string">"Empire"</span> <span class="comment"># contains</span>
<span class="query-type">bytes</span> <span class="predicate-type">contains</span> hex,<span class="hex">beef</span>; <span class="comment"># contains</span>
<span class="query-type">jsonpath</span> <span class="string">"$.movie"</span> <span class="predicate-type">endsWith</span> <span class="string">"Back"</span> <span class="comment"># endsWith</span>
<span class="query-type">bytes</span> <span class="predicate-type">endsWith</span> hex,<span class="hex">ab123456</span>; <span class="comment"># endsWith</span>
<span class="query-type">jsonpath</span> <span class="string">"$.book"</span> <span class="predicate-type">exists</span> <span class="comment"># exists</span>
<span class="query-type">jsonpath</span> <span class="string">"$.nooks"</span> <span class="predicate-type">includes</span> <span class="string">"Dune"</span> <span class="comment"># includes</span>
<span class="query-type">jsonpath</span> <span class="string">"$.nooks"</span> <span class="predicate-type">contains</span> <span class="string">"Dune"</span> <span class="comment"># contains</span>
<span class="query-type">jsonpath</span> <span class="string">"$.succeeded"</span> <span class="predicate-type">isBoolean</span> <span class="comment"># isBoolean</span>
<span class="query-type">jsonpath</span> <span class="string">"$.books"</span> <span class="predicate-type">isCollection</span> <span class="comment"># isCollection</span>
<span class="query-type">certificate</span> <span class="string">"Expire-Date"</span> <span class="predicate-type">isDate</span> <span class="comment"># isDate</span>
<span class="query-type">jsonpath</span> <span class="string">"$.publication_date"</span> <span class="predicate-type">isIsoDate</span> <span class="comment"># isIsoDate</span>
<span class="query-type">jsonpath</span> <span class="string">"$.movies"</span> <span class="predicate-type">isEmpty</span> <span class="comment"># isEmpty</span>
<span class="query-type">jsonpath</span> <span class="string">"$.height"</span> <span class="predicate-type">isFloat</span> <span class="comment"># isFloat</span>
<span class="query-type">jsonpath</span> <span class="string">"$.count"</span> <span class="predicate-type">isInteger</span> <span class="comment"># isInteger</span>
<span class="query-type">jsonpath</span> <span class="string">"$.name"</span> <span class="predicate-type">isString</span> <span class="comment"># isString</span>
<span class="query-type">jsonpath</span> <span class="string">"$.release"</span> <span class="predicate-type">matches</span> <span class="string">"\\d{4}"</span> <span class="comment"># matches</span>
<span class="query-type">jsonpath</span> <span class="string">"$.release"</span> <span class="predicate-type">matches</span> <span class="regex">/\d{4}/</span> <span class="comment"># matches</span>
<span class="query-type">jsonpath</span> <span class="string">"$.movie"</span> <span class="predicate-type">startsWith</span> <span class="string">"The"</span> <span class="comment"># startsWith</span>
<span class="query-type">bytes</span> <span class="predicate-type">startsWith</span> hex,<span class="hex">efbbbf</span>; <span class="comment"># startsWith</span>
<span class="query-type">jsonpath</span> <span class="string">"$.count"</span> <span class="predicate-type">isNumber</span> <span class="comment"># isNumber</span>
<span class="query-type">ip</span> <span class="predicate-type">isIpv6</span> <span class="comment"># isIpv6</span>
<span class="query-type">ip</span> <span class="predicate-type">isIpv4</span> <span class="comment"># isIpv4</span>
</span></span></code></pre>

View File

@ -1,19 +1,19 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/predicate-value</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="section-header">[Asserts]</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.null"</span> <span class="predicate-type">==</span> <span class="null">null</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.boolean"</span> <span class="predicate-type">==</span> <span class="boolean">true</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.integer"</span> <span class="predicate-type">==</span> <span class="number">2</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.float"</span> <span class="predicate-type">==</span> <span class="number">2.5</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.string"</span> <span class="predicate-type">==</span> <span class="string">"Hello"</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.template"</span> <span class="predicate-type">==</span> <span class="string">"Hello {{name}}!"</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.multiline_string"</span> <span class="predicate-type">==</span> <span class="multiline">```</span></span>
<span class="line"><span class="multiline">Hello</span></span>
<span class="line"><span class="multiline">Bob!</span></span>
<span class="line"><span class="multiline">```</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.hex"</span> <span class="predicate-type">==</span> hex,<span class="hex">010203</span>;</span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.base64"</span> <span class="predicate-type">==</span> base64,<span class="base64">bGluZTEKbGluZTINCmxpbmUzCg==</span>;</span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.file"</span> <span class="predicate-type">==</span> file,<span class="filename">data.bin</span>;</span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.expression"</span> <span class="predicate-type">==</span> <span class="expr">{{expression}}</span></span>
</span></span><span class="line"></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/predicate-value</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
<span class="section-header">[Asserts]</span>
<span class="query-type">jsonpath</span> <span class="string">"$.null"</span> <span class="predicate-type">==</span> <span class="null">null</span>
<span class="query-type">jsonpath</span> <span class="string">"$.boolean"</span> <span class="predicate-type">==</span> <span class="boolean">true</span>
<span class="query-type">jsonpath</span> <span class="string">"$.integer"</span> <span class="predicate-type">==</span> <span class="number">2</span>
<span class="query-type">jsonpath</span> <span class="string">"$.float"</span> <span class="predicate-type">==</span> <span class="number">2.5</span>
<span class="query-type">jsonpath</span> <span class="string">"$.string"</span> <span class="predicate-type">==</span> <span class="string">"Hello"</span>
<span class="query-type">jsonpath</span> <span class="string">"$.template"</span> <span class="predicate-type">==</span> <span class="string">"Hello {{name}}!"</span>
<span class="query-type">jsonpath</span> <span class="string">"$.multiline_string"</span> <span class="predicate-type">==</span> <span class="multiline">```
Hello
Bob!
```</span>
<span class="query-type">jsonpath</span> <span class="string">"$.hex"</span> <span class="predicate-type">==</span> hex,<span class="hex">010203</span>;
<span class="query-type">jsonpath</span> <span class="string">"$.base64"</span> <span class="predicate-type">==</span> base64,<span class="base64">bGluZTEKbGluZTINCmxpbmUzCg==</span>;
<span class="query-type">jsonpath</span> <span class="string">"$.file"</span> <span class="predicate-type">==</span> file,<span class="filename">data.bin</span>;
<span class="query-type">jsonpath</span> <span class="string">"$.expression"</span> <span class="predicate-type">==</span> <span class="expr">{{expression}}</span>
</span></span>
</code></pre>

View File

@ -1,25 +1,25 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="section-header">[Asserts]</span></span>
<span class="line"><span class="query-type">status</span> <span class="predicate-type">==</span> <span class="number">200</span></span>
<span class="line"><span class="query-type">version</span> <span class="predicate-type">==</span> <span class="string">"2"</span></span>
<span class="line"><span class="query-type">url</span> <span class="predicate-type">==</span> <span class="string">"http://localhost8080/hello"</span></span>
<span class="line"><span class="query-type">header</span> <span class="string">"content-type"</span> <span class="predicate-type">==</span> <span class="string">"application/json"</span></span>
<span class="line"><span class="query-type">certificate</span> <span class="string">"Subject"</span> <span class="filter-type">replace</span> <span class="string">" = "</span> <span class="string">"="</span> <span class="filter-type">replace</span> <span class="string">";"</span> <span class="string">", "</span> <span class="predicate-type">==</span> <span class="string">"C=US, ST=Denial, L=Springfield, O=Dis, CN=localhost"</span></span>
<span class="line"><span class="query-type">certificate</span> <span class="string">"Issuer"</span> <span class="filter-type">replace</span> <span class="string">" = "</span> <span class="string">"="</span> <span class="filter-type">replace</span> <span class="string">";"</span> <span class="string">", "</span> <span class="predicate-type">==</span> <span class="string">"C=US, ST=Denial, L=Springfield, O=Dis, CN=localhost"</span></span>
<span class="line"><span class="query-type">certificate</span> <span class="string">"Start-Date"</span> <span class="predicate-type">isDate</span></span>
<span class="line"><span class="query-type">certificate</span> <span class="string">"Start-Date"</span> <span class="filter-type">format</span> <span class="string">"%Y-%m-%d %H:%M:%S UTC"</span> <span class="predicate-type">==</span> <span class="string">"2023-01-10 08:29:52 UTC"</span></span>
<span class="line"><span class="query-type">certificate</span> <span class="string">"Expire-Date"</span> <span class="predicate-type">isDate</span></span>
<span class="line"><span class="query-type">certificate</span> <span class="string">"Expire-Date"</span> <span class="filter-type">format</span> <span class="string">"%Y-%m-%d %H:%M:%S UTC"</span> <span class="predicate-type">==</span> <span class="string">"2025-10-30 08:29:52 UTC"</span></span>
<span class="line"><span class="query-type">certificate</span> <span class="string">"Serial-Number"</span> <span class="predicate-type">==</span> <span class="string">"1e:e8:b1:7f:1b:64:d8:d6:b3:de:87:01:03:d2:a4:f5:33:53:5a:b0"</span></span>
<span class="line"><span class="query-type">cookie</span> <span class="string">"JSESSIONID"</span> <span class="predicate-type">exists</span></span>
<span class="line"><span class="query-type">body</span> <span class="predicate-type">==</span> <span class="string">"Hello"</span></span>
<span class="line"><span class="query-type">xpath</span> <span class="string">"/users"</span> <span class="filter-type">count</span> <span class="predicate-type">==</span> <span class="number">3</span></span>
<span class="line"><span class="query-type">jsonpath</span> <span class="string">"$.users"</span> <span class="filter-type">count</span> <span class="predicate-type">==</span> <span class="number">3</span></span>
<span class="line"><span class="query-type">regex</span> <span class="string">"name=.*"</span> <span class="predicate-type">==</span> <span class="string">"Bob"</span></span>
<span class="line"><span class="query-type">variable</span> <span class="string">"name"</span> <span class="predicate-type">==</span> <span class="string">"Bob"</span></span>
<span class="line"><span class="query-type">duration</span> <span class="predicate-type">&lt;</span> <span class="number">1000</span></span>
<span class="line"><span class="query-type">sha256</span> <span class="predicate-type">==</span> hex,<span class="hex">7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069</span>;</span>
<span class="line"><span class="query-type">md5</span> <span class="predicate-type">==</span> hex,<span class="hex">ed076287532e86365e841e92bfc50d8c</span>;</span>
<span class="line"><span class="query-type">bytes</span> <span class="predicate-type">startsWith</span> hex,<span class="hex">48656c6c6f</span>;</span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
<span class="section-header">[Asserts]</span>
<span class="query-type">status</span> <span class="predicate-type">==</span> <span class="number">200</span>
<span class="query-type">version</span> <span class="predicate-type">==</span> <span class="string">"2"</span>
<span class="query-type">url</span> <span class="predicate-type">==</span> <span class="string">"http://localhost8080/hello"</span>
<span class="query-type">header</span> <span class="string">"content-type"</span> <span class="predicate-type">==</span> <span class="string">"application/json"</span>
<span class="query-type">certificate</span> <span class="string">"Subject"</span> <span class="filter-type">replace</span> <span class="string">" = "</span> <span class="string">"="</span> <span class="filter-type">replace</span> <span class="string">";"</span> <span class="string">", "</span> <span class="predicate-type">==</span> <span class="string">"C=US, ST=Denial, L=Springfield, O=Dis, CN=localhost"</span>
<span class="query-type">certificate</span> <span class="string">"Issuer"</span> <span class="filter-type">replace</span> <span class="string">" = "</span> <span class="string">"="</span> <span class="filter-type">replace</span> <span class="string">";"</span> <span class="string">", "</span> <span class="predicate-type">==</span> <span class="string">"C=US, ST=Denial, L=Springfield, O=Dis, CN=localhost"</span>
<span class="query-type">certificate</span> <span class="string">"Start-Date"</span> <span class="predicate-type">isDate</span>
<span class="query-type">certificate</span> <span class="string">"Start-Date"</span> <span class="filter-type">format</span> <span class="string">"%Y-%m-%d %H:%M:%S UTC"</span> <span class="predicate-type">==</span> <span class="string">"2023-01-10 08:29:52 UTC"</span>
<span class="query-type">certificate</span> <span class="string">"Expire-Date"</span> <span class="predicate-type">isDate</span>
<span class="query-type">certificate</span> <span class="string">"Expire-Date"</span> <span class="filter-type">format</span> <span class="string">"%Y-%m-%d %H:%M:%S UTC"</span> <span class="predicate-type">==</span> <span class="string">"2025-10-30 08:29:52 UTC"</span>
<span class="query-type">certificate</span> <span class="string">"Serial-Number"</span> <span class="predicate-type">==</span> <span class="string">"1e:e8:b1:7f:1b:64:d8:d6:b3:de:87:01:03:d2:a4:f5:33:53:5a:b0"</span>
<span class="query-type">cookie</span> <span class="string">"JSESSIONID"</span> <span class="predicate-type">exists</span>
<span class="query-type">body</span> <span class="predicate-type">==</span> <span class="string">"Hello"</span>
<span class="query-type">xpath</span> <span class="string">"/users"</span> <span class="filter-type">count</span> <span class="predicate-type">==</span> <span class="number">3</span>
<span class="query-type">jsonpath</span> <span class="string">"$.users"</span> <span class="filter-type">count</span> <span class="predicate-type">==</span> <span class="number">3</span>
<span class="query-type">regex</span> <span class="string">"name=.*"</span> <span class="predicate-type">==</span> <span class="string">"Bob"</span>
<span class="query-type">variable</span> <span class="string">"name"</span> <span class="predicate-type">==</span> <span class="string">"Bob"</span>
<span class="query-type">duration</span> <span class="predicate-type">&lt;</span> <span class="number">1000</span>
<span class="query-type">sha256</span> <span class="predicate-type">==</span> hex,<span class="hex">7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069</span>;
<span class="query-type">md5</span> <span class="predicate-type">==</span> hex,<span class="hex">ed076287532e86365e841e92bfc50d8c</span>;
<span class="query-type">bytes</span> <span class="predicate-type">startsWith</span> hex,<span class="hex">48656c6c6f</span>;
</span></span></code></pre>

View File

@ -1,43 +1,43 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span></span>
<span class="line"><span class="section-header">[QueryStringParams]</span></span>
<span class="line"><span class="string">order</span>: <span class="string">newest</span></span>
<span class="line"><span class="string">search</span>: <span class="string">{{custom-search}}</span></span>
<span class="line"><span class="string">count</span>: <span class="string">100</span></span>
<span class="line"><span class="section-header">[BasicAuth]</span></span>
<span class="line"><span class="string">bob</span>: <span class="string">secret</span></span>
<span class="line"><span class="section-header">[FormParams]</span></span>
<span class="line"><span class="string">default</span>: <span class="string">false</span></span>
<span class="line"><span class="string">token</span>: <span class="string">{{token}}</span></span>
<span class="line"><span class="string">email</span>: <span class="string">john.doe@rookie.org</span></span>
<span class="line"><span class="string">number</span>: <span class="string">33611223344</span></span>
<span class="line"><span class="section-header">[MultipartFormData]</span></span>
<span class="line"><span class="string">field1</span>: <span class="string">value1</span></span>
<span class="line"><span class="string">field2</span>: file,<span class="filename">example.txt</span>;</span>
<span class="line"><span class="string">field3</span>: file,<span class="filename">example.zip</span>; <span class="string">application/zip</span></span>
<span class="line"><span class="section-header">[Cookies]</span></span>
<span class="line"><span class="string">theme</span>: <span class="string">light</span></span>
<span class="line"><span class="string">sessionToken</span>: <span class="string">abc123</span></span>
<span class="line"><span class="section-header">[Options]</span></span>
<span class="line"><span class="string">verbose</span>: <span class="boolean">true</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="section-header">[Captures]</span></span>
<span class="line"><span class="string">count</span>: <span class="query-type">jsonpath</span> <span class="string">"$.count"</span></span>
<span class="line"><span class="section-header">[Asserts]</span></span>
<span class="line"><span class="query-type">variable</span> <span class="string">"count"</span> <span class="predicate-type">==</span> <span class="number">1</span></span>
<span class="line"></span>
<span class="line"><span class="string">`Hello World!`</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"></span>
<span class="line"><span class="comment"># Empty sections</span></span>
<span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span></span>
<span class="line"><span class="section-header">[QueryStringParams]</span></span>
<span class="line"><span class="comment"># FIXME: [BasicAuth] section can't be empty</span></span>
<span class="line"><span class="comment">#[BasicAuth]</span></span>
<span class="line"><span class="section-header">[FormParams]</span></span>
<span class="line"><span class="section-header">[MultipartFormData]</span></span>
<span class="line"><span class="section-header">[Cookies]</span></span>
<span class="line"><span class="section-header">[Options]</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<span class="line"><span class="section-header">[Captures]</span></span>
<span class="line"><span class="section-header">[Asserts]</span></span>
<span class="line"><span class="string">`Hello World!`</span></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span>
<span class="section-header">[QueryStringParams]</span>
<span class="string">order</span>: <span class="string">newest</span>
<span class="string">search</span>: <span class="string">{{custom-search}}</span>
<span class="string">count</span>: <span class="string">100</span>
<span class="section-header">[BasicAuth]</span>
<span class="string">bob</span>: <span class="string">secret</span>
<span class="section-header">[FormParams]</span>
<span class="string">default</span>: <span class="string">false</span>
<span class="string">token</span>: <span class="string">{{token}}</span>
<span class="string">email</span>: <span class="string">john.doe@rookie.org</span>
<span class="string">number</span>: <span class="string">33611223344</span>
<span class="section-header">[MultipartFormData]</span>
<span class="string">field1</span>: <span class="string">value1</span>
<span class="string">field2</span>: file,<span class="filename">example.txt</span>;
<span class="string">field3</span>: file,<span class="filename">example.zip</span>; <span class="string">application/zip</span>
<span class="section-header">[Cookies]</span>
<span class="string">theme</span>: <span class="string">light</span>
<span class="string">sessionToken</span>: <span class="string">abc123</span>
<span class="section-header">[Options]</span>
<span class="string">verbose</span>: <span class="boolean">true</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
<span class="section-header">[Captures]</span>
<span class="string">count</span>: <span class="query-type">jsonpath</span> <span class="string">"$.count"</span>
<span class="section-header">[Asserts]</span>
<span class="query-type">variable</span> <span class="string">"count"</span> <span class="predicate-type">==</span> <span class="number">1</span>
<span class="string">`Hello World!`</span>
</span></span><span class="entry"><span class="request">
<span class="comment"># Empty sections</span>
<span class="method">GET</span> <span class="url">http://localhost:8000/hello</span>
<span class="section-header">[QueryStringParams]</span>
<span class="comment"># FIXME: [BasicAuth] section can't be empty</span>
<span class="comment">#[BasicAuth]</span>
<span class="section-header">[FormParams]</span>
<span class="section-header">[MultipartFormData]</span>
<span class="section-header">[Cookies]</span>
<span class="section-header">[Options]</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
<span class="section-header">[Captures]</span>
<span class="section-header">[Asserts]</span>
<span class="string">`Hello World!`</span>
</span></span></code></pre>

View File

@ -1,2 +1,2 @@
<pre><code class="language-hurl"><span class="line"><span class="comment"># The following line contains a trailing space</span></span>
<span class="line"> </span></code></pre>
<pre><code class="language-hurl"><span class="comment"># The following line contains a trailing space</span>
</code></pre>

View File

@ -1,7 +1,7 @@
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/~user</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/%7Euser</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/!$&amp;()*+,;=:@[]</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000?foo={bar}</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">{{url}}</span></span>
</span></span><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">{{ url }}</span></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/~user</span>
</span></span><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/%7Euser</span>
</span></span><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/!$&amp;()*+,;=:@[]</span>
</span></span><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000?foo={bar}</span>
</span></span><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">{{url}}</span>
</span></span><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">{{ url }}</span>
</span></span></code></pre>

View File

@ -94,8 +94,8 @@ code {
</style>
</head>
<body>
<pre><code class="language-hurl"><span class="hurl-entry"><span class="request"><span class="line"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span></span>
</span><span class="response"><span class="line"><span class="version">HTTP</span> <span class="number">200</span></span>
<pre><code class="language-hurl"><span class="entry"><span class="request"><span class="method">GET</span> <span class="url">http://localhost:8000/hello</span>
</span><span class="response"><span class="version">HTTP</span> <span class="number">200</span>
</span></span></code></pre>
</body>
</html>

View File

@ -98,46 +98,30 @@ mod tests {
let content = r#"
<pre>
<code class="language-hurl">
<span class="hurl-entry">
<span class="entry">
<span class="request">
<span class="line">
<span class="method">GET</span> <span class="url">http://foo.com</span>
</span>
<span class="line">
<span class="string">x-bar</span><span>:</span> <span class="string">baz</span>
</span>
<span class="method">GET</span> <span class="url">http://foo.com</span>
<span class="string">x-bar</span><span>:</span> <span class="string">baz</span>
</span>
<span class="response">
<span class="line">
<span class="version">HTTP</span> <span class="number">200</span>
</span>
<span class="version">HTTP</span> <span class="number">200</span>
</span>
</span>
<span class="line">
</span>
</code>
</pre>"#;
let underlined_content = r#"
<pre>
<code class="language-hurl">
<span class="hurl-entry">
<span class="entry">
<span class="request">
<span class="line">
<span class="method">GET</span> <span class="url">http://foo.com</span>
</span>
<span class="line line-error">
<span class="string">x-bar</span><span>:</span> <span class="string">baz</span>
</span>
<span class="method">GET</span> <span class="url">http://foo.com</span>
<span class="string">x-bar</span><span>:</span> <span class="string">baz</span>
</span>
<span class="response">
<span class="line">
<span class="version">HTTP</span> <span class="number">200</span>
</span>
<span class="version">HTTP</span> <span class="number">200</span>
</span>
</span>
<span class="line">
</span>
</code>
</pre>"#;

View File

@ -186,7 +186,6 @@ pub fn run_par(
.output_type
.to_output_type(options.include, options.color);
let max_width = terminal_size::terminal_size().map(|(w, _)| w.0 as usize);
let jobs = files
.iter()
.enumerate()

View File

@ -112,7 +112,7 @@ impl HtmlFormatter {
}
fn fmt_entry(&mut self, entry: &Entry) {
self.fmt_span_open("hurl-entry");
self.fmt_span_open("entry");
self.fmt_request(&entry.request);
if let Some(response) = &entry.response {
self.fmt_response(response);
@ -123,7 +123,6 @@ impl HtmlFormatter {
fn fmt_request(&mut self, request: &Request) {
self.fmt_span_open("request");
self.fmt_lts(&request.line_terminators);
self.fmt_span_open("line");
self.fmt_space(&request.space0);
self.fmt_method(&request.method);
self.fmt_space(&request.space1);
@ -141,7 +140,6 @@ impl HtmlFormatter {
fn fmt_response(&mut self, response: &Response) {
self.fmt_span_open("response");
self.fmt_lts(&response.line_terminators);
self.fmt_span_open("line");
self.fmt_space(&response.space0);
self.fmt_version(&response.version);
self.fmt_space(&response.space1);
@ -170,7 +168,6 @@ impl HtmlFormatter {
fn fmt_section(&mut self, section: &Section) {
self.fmt_lts(&section.line_terminators);
self.fmt_space(&section.space0);
self.fmt_span_open("line");
let name = format!("[{}]", section.identifier());
self.fmt_span("section-header", &name);
self.fmt_lt(&section.line_terminator0);
@ -200,7 +197,6 @@ impl HtmlFormatter {
fn fmt_kv(&mut self, kv: &KeyValue) {
self.fmt_lts(&kv.line_terminators);
self.fmt_span_open("line");
self.fmt_space(&kv.space0);
self.fmt_template(&kv.key);
self.fmt_space(&kv.space1);
@ -212,7 +208,6 @@ impl HtmlFormatter {
fn fmt_entry_option(&mut self, option: &EntryOption) {
self.fmt_lts(&option.line_terminators);
self.fmt_span_open("line");
self.fmt_space(&option.space0);
self.fmt_string(option.kind.identifier());
self.fmt_space(&option.space1);
@ -301,7 +296,6 @@ impl HtmlFormatter {
fn fmt_file_param(&mut self, param: &FilenameParam) {
self.fmt_lts(&param.line_terminators);
self.fmt_span_open("line");
self.fmt_space(&param.space0);
self.fmt_template(&param.key);
self.fmt_space(&param.space1);
@ -332,7 +326,6 @@ impl HtmlFormatter {
fn fmt_cookie(&mut self, cookie: &Cookie) {
self.fmt_lts(&cookie.line_terminators);
self.fmt_span_open("line");
self.fmt_space(&cookie.space0);
self.fmt_template(&cookie.name);
self.fmt_space(&cookie.space1);
@ -344,7 +337,6 @@ impl HtmlFormatter {
fn fmt_capture(&mut self, capture: &Capture) {
self.fmt_lts(&capture.line_terminators);
self.fmt_span_open("line");
self.fmt_space(&capture.space0);
self.fmt_template(&capture.name);
self.fmt_space(&capture.space1);
@ -450,7 +442,6 @@ impl HtmlFormatter {
fn fmt_assert(&mut self, assert: &Assert) {
self.fmt_lts(&assert.line_terminators);
self.fmt_span_open("line");
self.fmt_space(&assert.space0);
self.fmt_query(&assert.query);
for (space, filter) in assert.filters.iter() {
@ -542,7 +533,7 @@ impl HtmlFormatter {
fn fmt_predicate_value(&mut self, predicate_value: &PredicateValue) {
match predicate_value {
PredicateValue::String(value) => self.fmt_template(value),
PredicateValue::MultilineString(value) => self.fmt_multiline_string(value, false),
PredicateValue::MultilineString(value) => self.fmt_multiline_string(value),
PredicateValue::Number(value) => self.fmt_number(value.to_source()),
PredicateValue::Bool(value) => self.fmt_bool(*value),
PredicateValue::File(value) => self.fmt_file(value),
@ -554,36 +545,10 @@ impl HtmlFormatter {
};
}
fn fmt_multiline_string(&mut self, multiline_string: &MultilineString, as_body: bool) {
fn fmt_multiline_string(&mut self, multiline_string: &MultilineString) {
let body = multiline_string.to_source();
let mut body = format_lines(body.as_str(), true);
if !as_body {
// A multiline AST element spans multiple line. When used as an assert, the AST element in
// in the middle of the current line:
//
// ~~~
// GET https://foo.com
// HTTP 200
// [Asserts]
// body == ```
// line1
// line2
// ```
// ~~~
//
// We don't want the multiline AST to begin a new `<span clas="line">`
// element so we split the multiline AST element in a list of single-line "multiline"
// elements. This way, each new multiline element is wrapped in a single line.
// NOTE: this still feels hacky to me, I'm not sure that we should add span for lines, it
// intermixes an AST hierarchical view and a line oriented HTML view.
body = body
.strip_prefix("<span class=\"line\">")
.unwrap()
.strip_suffix("</span>")
.unwrap()
.to_string();
}
self.buffer.push_str(&body);
let body = escape_xml(body.as_str());
self.fmt_span("multiline", &body);
}
fn fmt_body(&mut self, body: &Body) {
@ -601,27 +566,19 @@ impl HtmlFormatter {
fn fmt_bytes(&mut self, bytes: &Bytes) {
match bytes {
Bytes::Base64(value) => {
self.fmt_span_open("line");
self.fmt_base64(value);
self.fmt_span_close();
}
Bytes::File(value) => {
self.fmt_span_open("line");
self.fmt_file(value);
self.fmt_span_close();
}
Bytes::Hex(value) => {
self.fmt_span_open("line");
self.fmt_hex(value);
self.fmt_span_close();
}
Bytes::OnelineString(value) => {
self.fmt_span_open("line");
self.fmt_template(value);
self.fmt_span_close();
}
Bytes::Json(value) => self.fmt_json_value(value),
Bytes::MultilineString(value) => self.fmt_multiline_string(value, true),
Bytes::MultilineString(value) => self.fmt_multiline_string(value),
Bytes::Xml(value) => self.fmt_xml(value),
}
}
@ -667,12 +624,13 @@ impl HtmlFormatter {
}
fn fmt_xml(&mut self, value: &str) {
let xml = format_lines(value, false);
self.fmt_span("xml", &xml);
let value = escape_xml(value);
self.fmt_span("xml", &value);
}
fn fmt_json_value(&mut self, json_value: &JsonValue) {
let json = format_lines(json_value.to_source().as_str(), false);
let json = json_value.to_source();
let json = escape_xml(json.as_str());
self.fmt_span("json", &json);
}
@ -688,7 +646,6 @@ impl HtmlFormatter {
if let Some(v) = &lt.comment {
self.fmt_comment(v);
}
self.fmt_span_close();
self.buffer.push_str(lt.newline.as_str());
}
@ -812,12 +769,10 @@ impl HtmlFormatter {
fn fmt_lts(&mut self, line_terminators: &[LineTerminator]) {
for lt in line_terminators {
self.fmt_span_open("line");
self.fmt_space(&lt.space0);
if let Some(v) = &lt.comment {
self.fmt_comment(v);
}
self.fmt_span_close();
if !lt.newline.value.is_empty() {
self.buffer.push_str(lt.newline.as_str());
}
@ -835,22 +790,6 @@ fn encode_html(s: &str) -> String {
s.replace('>', "&gt;").replace('<', "&lt;")
}
fn format_lines(s: &str, use_multiline_class: bool) -> String {
regex::Regex::new(r"\n|\r\n")
.unwrap()
.split(s)
.map(|l| {
let text = escape_xml(l);
if use_multiline_class {
format!("<span class=\"line\"><span class=\"multiline\">{text}</span></span>")
} else {
format!("<span class=\"line\">{text}</span>")
}
})
.collect::<Vec<String>>()
.join("\n")
}
#[cfg(test)]
mod tests {
use super::*;
@ -892,69 +831,10 @@ mod tests {
kind,
};
let mut fmt = HtmlFormatter::new();
fmt.fmt_multiline_string(&multiline_string, true);
fmt.fmt_multiline_string(&multiline_string);
assert_eq!(
fmt.buffer,
"<span class=\"line\">\
<span class=\"multiline\">```</span>\
</span>\n\
<span class=\"line\">\
<span class=\"multiline\">line1</span>\
</span>\n\
<span class=\"line\">\
<span class=\"multiline\">line2</span>\
</span>\n\
<span class=\"line\">\
<span class=\"multiline\">```</span>\
</span>"
);
let mut fmt = HtmlFormatter::new();
fmt.fmt_multiline_string(&multiline_string, false);
assert_eq!(
fmt.buffer,
"<span class=\"multiline\">```</span>\
</span>\n\
<span class=\"line\">\
<span class=\"multiline\">line1</span>\
</span>\n\
<span class=\"line\">\
<span class=\"multiline\">line2</span>\
</span>\n\
<span class=\"line\">\
<span class=\"multiline\">```</span>"
);
}
#[test]
fn test_multilines() {
assert_eq!(
format_lines("{\n \"id\": 1\n}", false),
"<span class=\"line\">{</span>\n\
<span class=\"line\"> \"id\": 1</span>\n\
<span class=\"line\">}</span>"
);
assert_eq!(
format_lines("{\n \"id\": 1\n}", true),
"<span class=\"line\"><span class=\"multiline\">{</span></span>\n\
<span class=\"line\"><span class=\"multiline\"> \"id\": 1</span></span>\n\
<span class=\"line\"><span class=\"multiline\">}</span></span>"
);
assert_eq!(
format_lines(
"<?xml version=\"1.0\"?>\n\
<drink>café</drink>",
false
),
"<span class=\"line\">&lt;?xml version=\"1.0\"?&gt;</span>\n\
<span class=\"line\">&lt;drink&gt;café&lt;/drink&gt;</span>"
);
assert_eq!(
format_lines("Hello\n", false),
"<span class=\"line\">Hello</span>\n\
<span class=\"line\"></span>"
"<span class=\"multiline\">```\nline1\nline2\n```</span>"
);
}
@ -980,14 +860,7 @@ mod tests {
}],
};
fmt.fmt_json_value(&value);
assert_eq!(
fmt.buffer,
"<span class=\"json\">\
<span class=\"line\">{</span>\n\
<span class=\"line\"> \"id\": 1</span>\n\
<span class=\"line\">}</span>\
</span>"
);
assert_eq!(fmt.buffer, "<span class=\"json\">{\n \"id\": 1\n}</span>");
}
#[test]
@ -1002,10 +875,7 @@ mod tests {
SourceInfo::new(Pos::new(0, 0), Pos::new(0, 0)),
));
fmt.fmt_json_value(&value);
assert_eq!(
fmt.buffer,
"<span class=\"json\"><span class=\"line\">\"\\n\"</span></span>"
);
assert_eq!(fmt.buffer, "<span class=\"json\">\"\\n\"</span>");
}
#[test]
@ -1015,7 +885,7 @@ mod tests {
fmt.fmt_xml(value);
assert_eq!(
fmt.buffer,
"<span class=\"xml\"><span class=\"line\">&lt;?xml version=\"1.0\"?&gt;</span>\n<span class=\"line\">&lt;drink&gt;café&lt;/drink&gt;</span></span>"
"<span class=\"xml\">&lt;?xml version=\"1.0\"?&gt;\n&lt;drink&gt;café&lt;/drink&gt;</span>"
);
}