|
2 | 2 |
|
3 | 3 | use Mockery as m;
|
4 | 4 | use Illuminate\Http\Request;
|
| 5 | +use Illuminate\Routing\Route; |
5 | 6 | use Symfony\Component\HttpFoundation\Request as SymfonyRequest;
|
6 | 7 |
|
7 | 8 | class HttpRequestTest extends PHPUnit_Framework_TestCase
|
@@ -538,6 +539,80 @@ public function testCreateFromBase()
|
538 | 539 | $this->assertEquals($request->request->all(), $body);
|
539 | 540 | }
|
540 | 541 |
|
| 542 | + /** |
| 543 | + * Tests for Http\Request magic methods `__get()` and `__isset()`. |
| 544 | + * |
| 545 | + * @link https://github.com/laravel/framework/issues/10403 Form request object attribute returns empty when have some string. |
| 546 | + */ |
| 547 | + public function testMagicMethods() |
| 548 | + { |
| 549 | + // Simulates QueryStrings. |
| 550 | + $request = Request::create('/', 'GET', ['foo' => 'bar', 'empty' => '']); |
| 551 | + |
| 552 | + // Parameter 'foo' is 'bar', then it ISSET and is NOT EMPTY. |
| 553 | + $this->assertEquals($request->foo, 'bar'); |
| 554 | + $this->assertEquals(isset($request->foo), true); |
| 555 | + $this->assertEquals(empty($request->foo), false); |
| 556 | + |
| 557 | + // Parameter 'empty' is '', then it ISSET and is EMPTY. |
| 558 | + $this->assertEquals($request->empty, ''); |
| 559 | + $this->assertEquals(isset($request->empty), true); |
| 560 | + $this->assertEquals(empty($request->empty), true); |
| 561 | + |
| 562 | + // Parameter 'undefined' is undefined/null, then it NOT ISSET and is EMPTY. |
| 563 | + $this->assertEquals($request->undefined, null); |
| 564 | + $this->assertEquals(isset($request->undefined), false); |
| 565 | + $this->assertEquals(empty($request->undefined), true); |
| 566 | + |
| 567 | + // Simulates Route parameters. |
| 568 | + $request = Request::create('/example/bar', 'GET', ['xyz' => 'overwrited']); |
| 569 | + $request->setRouteResolver(function () use ($request) { |
| 570 | + $route = new Route('GET', '/example/{foo}/{xyz?}/{undefined?}', []); |
| 571 | + $route->bind($request); |
| 572 | + |
| 573 | + return $route; |
| 574 | + }); |
| 575 | + |
| 576 | + // Router parameter 'foo' is 'bar', then it ISSET and is NOT EMPTY. |
| 577 | + $this->assertEquals($request->foo, 'bar'); |
| 578 | + $this->assertEquals(isset($request->foo), true); |
| 579 | + $this->assertEquals(empty($request->foo), false); |
| 580 | + |
| 581 | + // Router parameter 'undefined' is undefined/null, then it NOT ISSET and is EMPTY. |
| 582 | + $this->assertEquals($request->undefined, null); |
| 583 | + $this->assertEquals(isset($request->undefined), false); |
| 584 | + $this->assertEquals(empty($request->undefined), true); |
| 585 | + |
| 586 | + // Special case: router parameter 'xyz' is 'overwrited' by QueryString, then it ISSET and is NOT EMPTY. |
| 587 | + // Basically, QueryStrings have priority over router parameters. |
| 588 | + $this->assertEquals($request->xyz, 'overwrited'); |
| 589 | + $this->assertEquals(isset($request->foo), true); |
| 590 | + $this->assertEquals(empty($request->foo), false); |
| 591 | + |
| 592 | + // Simulates empty QueryString and Routes. |
| 593 | + $request = Request::create('/', 'GET'); |
| 594 | + $request->setRouteResolver(function () use ($request) { |
| 595 | + $route = new Route('GET', '/', []); |
| 596 | + $route->bind($request); |
| 597 | + |
| 598 | + return $route; |
| 599 | + }); |
| 600 | + |
| 601 | + // Parameter 'undefined' is undefined/null, then it NOT ISSET and is EMPTY. |
| 602 | + $this->assertEquals($request->undefined, null); |
| 603 | + $this->assertEquals(isset($request->undefined), false); |
| 604 | + $this->assertEquals(empty($request->undefined), true); |
| 605 | + |
| 606 | + // Special case: simulates empty QueryString and Routes, without the Route Resolver. |
| 607 | + // It'll happen when you try to get a parameter outside a route. |
| 608 | + $request = Request::create('/', 'GET'); |
| 609 | + |
| 610 | + // Parameter 'undefined' is undefined/null, then it NOT ISSET and is EMPTY. |
| 611 | + $this->assertEquals($request->undefined, null); |
| 612 | + $this->assertEquals(isset($request->undefined), false); |
| 613 | + $this->assertEquals(empty($request->undefined), true); |
| 614 | + } |
| 615 | + |
541 | 616 | public function testHttpRequestFlashCallsSessionFlashInputWithInputData()
|
542 | 617 | {
|
543 | 618 | $session = m::mock('Illuminate\Session\Store');
|
|
0 commit comments