@@ -29,7 +29,7 @@ describe("Parser", function()
29
29
assert .is_not_nil (request )
30
30
assert .are .equal (request .method , " GET" )
31
31
assert .are .equal (request .url , " /test1" )
32
- assert .are .equal (request .body , " Body1 " )
32
+ assert .are .equal (request .body , nil )
33
33
end )
34
34
35
35
it (" should handle cases where cursor is on line before separator" , function ()
@@ -91,7 +91,7 @@ describe("Parser", function()
91
91
assert .are .equal (request .url , " /test" )
92
92
assert .are .equal (request .http_version , " HTTP/1.1" )
93
93
assert .are .same (request .headers , { Header1 = " Value1" , Header2 = " Value2" })
94
- assert .are .equal (request .body , " Body " )
94
+ assert .are .equal (request .body , nil )
95
95
end )
96
96
97
97
it (" should parse a basic GET request" , function ()
@@ -174,6 +174,35 @@ describe("Parser", function()
174
174
response_handler = " print(response.body)\n "
175
175
}, request )
176
176
end )
177
+
178
+ it (" should handle a GET request with query parameters" , function ()
179
+ local lines = {
180
+ " GET /api/users?page=1&limit=10 HTTP/1.1" ,
181
+ " Host: example.com" ,
182
+ " "
183
+ }
184
+ local request = parser .parse_request (lines )
185
+ assert .are .same ({
186
+ method = " GET" ,
187
+ url = " /api/users?page=1&limit=10" ,
188
+ http_version = " HTTP/1.1" ,
189
+ headers = {
190
+ Host = " example.com"
191
+ },
192
+ body = nil
193
+ }, request )
194
+ end )
195
+
196
+ it (" should handle comment on header line" , function ()
197
+ local lines = {
198
+ " GET https://test.com/" ,
199
+ " User-Agent: heilgar/http-client" ,
200
+ " #X-Not-in: false"
201
+ }
202
+
203
+ local request = parser .parse_request (lines )
204
+ assert .are .equal (request .headers [' #X-Not-in' ], nil )
205
+ end )
177
206
end )
178
207
179
208
describe (" parse_all_requests" , function ()
@@ -198,6 +227,75 @@ describe("Parser", function()
198
227
assert .are .equal (requests [2 ].method , " POST" )
199
228
assert .are .equal (requests [2 ].url , " /test2" )
200
229
end )
230
+
231
+ it (" should parse multiple requests correctly with comments" , function ()
232
+ local lines = {
233
+ " ### Test 1" ,
234
+ " # This is a comment" ,
235
+ " GET /test1 HTTP/1.1" ,
236
+ " Header1: Value1 # Inline comment" ,
237
+ " " ,
238
+ " Body1" ,
239
+ " ### Test 2" ,
240
+ " POST /test2 HTTP/1.1 # Another comment" ,
241
+ " Header2: Value2" ,
242
+ " " ,
243
+ " Body2 # Not a comment in body"
244
+ }
245
+
246
+ local requests = parser .parse_all_requests (lines )
247
+ assert .are .equal (# requests , 2 )
248
+ assert .are .equal (requests [1 ].method , " GET" )
249
+ assert .are .equal (requests [1 ].url , " /test1" )
250
+ assert .are .equal (requests [1 ].headers [" Header1" ], " Value1" )
251
+ assert .are .equal (requests [2 ].method , " POST" )
252
+ assert .are .equal (requests [2 ].url , " /test2" )
253
+ assert .are .equal (requests [2 ].body , " Body2" )
254
+ end )
255
+
256
+ it (" should handle requests with mixed inline comments and empty lines" , function ()
257
+ local lines = {
258
+ " ### Request 1" ,
259
+ " GET /resource1 HTTP/1.1" , -- Request line
260
+ " # This is a comment" ,
261
+ " Header1: Value1 # Inline comment" , -- Header with inline comment
262
+ " " , -- Empty line
263
+ " Body1 # Comment in body" , -- Body with comment
264
+ " ### Request 2" ,
265
+ " POST /resource2 HTTP/1.1" ,
266
+ " Header2: Value2" ,
267
+ " Header3: Value3 # Another inline comment" ,
268
+ " " , -- Empty line
269
+ " Body2" , -- Body without comments
270
+ " " , -- Extra empty line
271
+ " ### Request 3" , -- Third request
272
+ " " ,
273
+ " # Another comment" ,
274
+ " PUT /resource3 HTTP/1.1" ,
275
+ " " , -- Empty line, no headers
276
+ " Body3" -- Body without comments
277
+ }
278
+
279
+ local requests = parser .parse_all_requests (lines )
280
+
281
+ assert .are .equal (# requests , 3 )
282
+
283
+ assert .are .equal (requests [1 ].method , " GET" )
284
+ assert .are .equal (requests [1 ].url , " /resource1" )
285
+ assert .are .equal (requests [1 ].headers [" Header1" ], " Value1" )
286
+ assert .are .equal (requests [1 ].body , nil )
287
+
288
+ assert .are .equal (requests [2 ].method , " POST" )
289
+ assert .are .equal (requests [2 ].url , " /resource2" )
290
+ assert .are .equal (requests [2 ].headers [" Header2" ], " Value2" )
291
+ assert .are .equal (requests [2 ].headers [" Header3" ], " Value3" )
292
+ assert .are .equal (requests [2 ].body , " Body2" )
293
+
294
+ assert .are .equal (requests [3 ].method , " PUT" )
295
+ assert .are .equal (requests [3 ].url , " /resource3" )
296
+ assert .is_nil (requests [3 ].headers [" Header2" ]) -- No headers
297
+ assert .are .equal (requests [3 ].body , " Body3" )
298
+ end )
201
299
end )
202
300
203
301
describe (" replace_placeholders" , function ()
0 commit comments