@@ -183,7 +183,6 @@ public function testWithoutAttribute(): void
183183 // Attributes are not part of HAR spec, this is a no-op
184184 $ new = $ this ->serverRequest ->withoutAttribute ('custom_attr ' );
185185 $ this ->assertNull ($ new ->getAttribute ('custom_attr ' ));
186- $ this ->assertNull ($ this ->serverRequest ->getAttribute ('custom_attr ' ));
187186 }
188187
189188 public function testInheritedMethodsPreserveServerRequestState (): void
@@ -246,28 +245,6 @@ public function testWithHeader(): void
246245 $ this ->assertEquals (['foo ' => 'bar ' ], $ new ->getQueryParams ());
247246 }
248247
249- public function testInitializeFromHarRequest (): void
250- {
251- // Test that a ServerRequest can be created from a HAR request
252- // and properly extract query params, cookies, and parsed body
253- $ serverRequest = new ServerRequest ($ this ->harRequest );
254-
255- // Should extract query params from HAR request
256- $ this ->assertEquals (['foo ' => 'bar ' ], $ serverRequest ->getQueryParams ());
257-
258- // Should extract cookies from HAR request
259- $ this ->assertEquals (['session ' => 'abc123 ' ], $ serverRequest ->getCookieParams ());
260-
261- // Should extract parsed body from HAR POST params
262- $ this ->assertEquals (
263- ['username ' => 'john ' , 'password ' => 'secret ' ],
264- $ serverRequest ->getParsedBody ()
265- );
266-
267- // Server params should be empty by default
268- $ this ->assertEquals ([], $ serverRequest ->getServerParams ());
269- }
270-
271248 public function testGetParsedBodyWithNoPostData (): void
272249 {
273250 // Test that getParsedBody returns null when there's no post data
@@ -314,46 +291,6 @@ public function testGetParsedBodyWithNonFormEncodedText(): void
314291 $ this ->assertNull ($ serverRequest ->getParsedBody ());
315292 }
316293
317- public function testWithParsedBodyObject (): void
318- {
319- // Test that withParsedBody works with objects
320- $ data = new \stdClass ();
321- $ data ->username = 'john ' ;
322- $ data ->password = 'secret ' ;
323-
324- $ new = $ this ->serverRequest ->withParsedBody ($ data );
325- $ parsedBody = $ new ->getParsedBody ();
326-
327- $ this ->assertIsArray ($ parsedBody );
328- $ this ->assertEquals ('john ' , $ parsedBody ['username ' ]);
329- $ this ->assertEquals ('secret ' , $ parsedBody ['password ' ]);
330-
331- // Verify HAR params are actually set when data is an object
332- $ harRequest = $ new ->getHarRequest ();
333- $ this ->assertTrue ($ harRequest ->hasPostData ());
334- $ this ->assertTrue ($ harRequest ->getPostData ()->hasParams ());
335- $ params = $ harRequest ->getPostData ()->getParams ();
336- $ this ->assertCount (2 , $ params );
337- }
338-
339- public function testWithParsedBodyOnlyProcessesArraysAndObjects (): void
340- {
341- // Verify that withParsedBody only sets params for arrays and objects
342- // Test with array
343- $ arrayRequest = $ this ->serverRequest ->withParsedBody (['key ' => 'value ' ]);
344- $ this ->assertTrue ($ arrayRequest ->getHarRequest ()->getPostData ()->hasParams ());
345-
346- // Test with object
347- $ obj = new \stdClass ();
348- $ obj ->key = 'value ' ;
349- $ objectRequest = $ this ->serverRequest ->withParsedBody ($ obj );
350- $ this ->assertTrue ($ objectRequest ->getHarRequest ()->getPostData ()->hasParams ());
351-
352- // Test with null - should clear params
353- $ nullRequest = $ this ->serverRequest ->withParsedBody (null );
354- $ this ->assertFalse ($ nullRequest ->getHarRequest ()->getPostData ()->hasParams ());
355- }
356-
357294 public function testWithParsedBodyLogicalOrCondition (): void
358295 {
359296 // This test kills LogicalOr mutations by verifying the exact behavior
@@ -439,42 +376,6 @@ public function testWithParsedBodyObjectFromCleanRequest(): void
439376 $ this ->assertEquals ('value2 ' , $ params [1 ]->getValue ());
440377 }
441378
442- public function testWithParsedBodyNullFromCleanRequest (): void
443- {
444- // This test kills LogicalOrAllSubExprNegation by verifying null doesn't enter
445- // the params-setting block. Start from a clean request to isolate behavior.
446- $ cleanRequest = (new Request ())
447- ->setMethod ('GET ' )
448- ->setUrl (new Uri ('https://www.example.com/ ' ));
449-
450- $ serverRequest = new ServerRequest ($ cleanRequest );
451-
452- // Set error handler to detect if foreach on null is attempted
453- // If LogicalOrAllSubExprNegation is applied (!is_array || !is_object),
454- // then for null: !false || !false = true, entering the block and
455- // attempting foreach on null
456- $ warningTriggered = false ;
457- $ previousHandler = set_error_handler (function ($ errno , $ errstr ) use (&$ warningTriggered ) {
458- if (str_contains ($ errstr , 'foreach ' )) {
459- $ warningTriggered = true ;
460- }
461-
462- return false ; // Allow normal error handling to continue
463- });
464-
465- try {
466- $ newRequest = $ serverRequest ->withParsedBody (null );
467-
468- // Should NOT have triggered a foreach warning
469- $ this ->assertFalse ($ warningTriggered , 'withParsedBody(null) should not attempt foreach ' );
470-
471- // Verify the result is correct
472- $ this ->assertNull ($ newRequest ->getParsedBody ());
473- } finally {
474- restore_error_handler ();
475- }
476- }
477-
478379 public function testWithRequestTarget (): void
479380 {
480381 $ new = $ this ->serverRequest ->withRequestTarget ('https://www.example.com/newpath ' );
0 commit comments