@@ -49,6 +49,67 @@ public function test_form_requests_contain_the_correct_state_across_subsequent_r
4949 $ this ->assertEquals ('Abigail ' , $ client ->responses [1 ]->original ['name ' ]);
5050 $ this ->assertNotEquals ($ client ->responses [0 ]->original ['container ' ], $ client ->responses [1 ]->original ['container ' ]);
5151 }
52+
53+ public function test_request_routes_flush_controller_state ()
54+ {
55+ [$ app , $ worker , $ client ] = $ this ->createOctaneContext ([
56+ Request::create ('/users ' , 'GET ' ),
57+ Request::create ('/users ' , 'GET ' ),
58+ ]);
59+
60+ $ app ['router ' ]->get ('/users ' , UserControllerStub::class);
61+
62+ $ worker ->run ();
63+
64+ $ this ->assertEquals (1 , $ client ->responses [0 ]->original );
65+ $ this ->assertEquals (1 , $ client ->responses [1 ]->original );
66+
67+ $ worker ->run ();
68+
69+ $ this ->assertEquals (1 , $ client ->responses [0 ]->original );
70+ $ this ->assertEquals (1 , $ client ->responses [1 ]->original );
71+ }
72+
73+ public function test_request_routes_controller_does_not_leak ()
74+ {
75+ UserControllerStub::$ destroyedCount = 0 ;
76+
77+ [$ app , $ worker , $ client ] = $ this ->createOctaneContext ([
78+ Request::create ('/users ' , 'GET ' ),
79+ Request::create ('/users ' , 'GET ' ),
80+ ]);
81+
82+ $ app ['router ' ]->get ('/users ' , UserControllerStub::class);
83+
84+ $ worker ->run ();
85+
86+ gc_collect_cycles ();
87+ $ this ->assertEquals (2 , UserControllerStub::$ destroyedCount );
88+
89+ $ worker ->run ();
90+
91+ gc_collect_cycles ();
92+ $ this ->assertEquals (4 , UserControllerStub::$ destroyedCount );
93+ }
94+ }
95+
96+ class UserControllerStub
97+ {
98+ protected $ invokedCount = 0 ;
99+
100+ public static $ destroyedCount = 0 ;
101+
102+ public function __invoke ()
103+ {
104+ $ this ->invokedCount ++;
105+
106+ return $ this ->invokedCount ;
107+ }
108+
109+ public function __destruct ()
110+ {
111+ static ::$ destroyedCount ++;
112+ }
52113}
53114
54115class RequestStateTestFormRequest extends FormRequest
0 commit comments