@@ -226,37 +226,48 @@ public function testSerialize()
226226 $ this ->assertNotSame ($ route , $ unserialized );
227227 }
228228
229- public function testInlineDefaultAndRequirement ()
229+ /**
230+ * @dataProvider provideInlineDefaultAndRequirementCases
231+ */
232+ public function testInlineDefaultAndRequirement (Route $ route , string $ expectedPath , string $ expectedHost , array $ expectedDefaults , array $ expectedRequirements )
233+ {
234+ self ::assertSame ($ expectedPath , $ route ->getPath ());
235+ self ::assertSame ($ expectedHost , $ route ->getHost ());
236+ self ::assertSame ($ expectedDefaults , $ route ->getDefaults ());
237+ self ::assertSame ($ expectedRequirements , $ route ->getRequirements ());
238+ }
239+
240+ public static function provideInlineDefaultAndRequirementCases (): iterable
230241 {
231- $ this -> assertEquals (( new Route ('/foo/{bar} ' ))-> setDefault ( ' bar ' , null ), new Route ( '/foo/{bar?} ' )) ;
232- $ this -> assertEquals (( new Route ('/foo/{bar} ' ))-> setDefault ( ' bar ' , 'baz ' ), new Route ( ' /foo/{ bar? baz} ' )) ;
233- $ this -> assertEquals (( new Route ('/foo/{bar} ' ))-> setDefault ( ' bar ' , ' baz<buz> ' ), new Route ( '/foo/{bar? baz<buz>} ' )) ;
234- $ this -> assertEquals (( new Route ('/foo/{!bar} ' ))-> setDefault ( ' bar ' , ' baz<buz> ' ), new Route ( '/foo/{!bar? baz<buz>} ' )) ;
235- $ this -> assertEquals (( new Route ('/foo/{bar} ' ))-> setDefault ( 'bar ' , 'baz ' ), new Route ( '/foo/{bar? } ' , ['bar ' => 'baz ' ])) ;
236-
237- $ this -> assertEquals (( new Route ('/foo/{bar} ' ))-> setRequirement ( ' bar ' , '.* ' ), new Route ( ' /foo/{ bar<.*>} ' )) ;
238- $ this -> assertEquals (( new Route ('/foo/{bar} ' ))-> setRequirement ( ' bar ' , '> ' ), new Route ( ' /foo/{ bar<>>} ' )) ;
239- $ this -> assertEquals (( new Route ('/foo/{bar} ' ))-> setRequirement ( 'bar ' , '\d+ ' ), new Route ( '/foo/{bar<.*> } ' , [], ['bar ' => '\d+ ' ])) ;
240- $ this -> assertEquals (( new Route ('/foo/{bar} ' ))-> setRequirement ( ' bar ' , ' [a-z]{2} ' ), new Route ( '/foo/{bar<[ a-z]{2}>} ' )) ;
241- $ this -> assertEquals (( new Route ('/foo/{!bar} ' ))-> setRequirement ( ' bar ' , '\d+ ' ), new Route ( ' /foo/{! bar< \d+>} ' )) ;
242-
243- $ this -> assertEquals (( new Route ('/foo/{bar} ' ))-> setDefault ( ' bar ' , null )-> setRequirement ( ' bar ' , ' .* ' ), new Route ( ' /foo/{ bar<.*>?} ' )) ;
244- $ this -> assertEquals (( new Route ('/foo/{bar} ' ))-> setDefault ( ' bar ' , '<> ' )-> setRequirement ( 'bar ' , ' > ' ), new Route ( ' /foo/{ bar<>>?<>} ' )) ;
245-
246- $ this -> assertEquals (( new Route ('/{foo}/{!bar} ' ))-> setDefaults ([ ' bar ' => ' <> ' , 'foo ' => '\\' ])-> setRequirements ([ 'bar ' => '\\' , 'foo ' => '. ' ]), new Route ( ' /{foo<.>?\}/{!bar<\>?<>} ' )) ;
247-
248- $ this -> assertEquals (( new Route ('/ ' ))-> setHost ( '{bar} ' )-> setDefault ( ' bar ' , null ), ( new Route ( '/ ' ))-> setHost ( '{bar?} ' )) ;
249- $ this -> assertEquals (( new Route ('/ ' ))-> setHost ( '{bar} ' )-> setDefault ( ' bar ' , 'baz ' ), ( new Route ( ' / ' ))-> setHost ( ' {bar? baz} ' )) ;
250- $ this -> assertEquals (( new Route ('/ ' ))-> setHost ( '{bar} ' )-> setDefault ( ' bar ' , 'baz<buz> ' ), ( new Route ( ' / ' ))-> setHost ( ' {bar? baz<buz>} ' )) ;
251- $ this -> assertEquals (( new Route ('/ ' ))-> setHost ( ' { bar} ' )-> setDefault ( ' bar ' , null ), ( new Route ( '/ ' , ['bar ' => ' baz ' ]))-> setHost ( ' {bar?} ' )) ;
252-
253- $ this -> assertEquals (( new Route ('/ ' ))-> setHost ( '{bar} ' )-> setRequirement ( ' bar ' , '.* ' ), ( new Route ( ' / ' ))-> setHost ( ' {bar<.*>} ' )) ;
254- $ this -> assertEquals (( new Route ('/ ' ))-> setHost ( '{bar} ' )-> setRequirement ( ' bar ' , '> ' ), ( new Route ( ' / ' ))-> setHost ( ' {bar<>>} ' )) ;
255- $ this -> assertEquals (( new Route ('/ ' ))-> setHost ( ' { bar} ' )-> setRequirement ( ' bar ' , ' .* ' ), ( new Route ( '/ ' , [], ['bar ' => '\d+ ' ]))-> setHost ( ' {bar<.*>} ' )) ;
256- $ this -> assertEquals (( new Route ('/ ' ))-> setHost ( ' {bar} ' )-> setRequirement ( ' bar ' , ' [a-z]{2} ' ), ( new Route ( '/ ' ))-> setHost ( '{bar<[ a-z]{2}>} ' )) ;
257-
258- $ this -> assertEquals (( new Route ('/ ' ))-> setHost ( '{bar} ' )-> setDefault ( ' bar ' , null )-> setRequirement ( ' bar ' , ' .* ' ), ( new Route ( ' / ' ))-> setHost ( ' {bar<.*>?} ' )) ;
259- $ this -> assertEquals (( new Route ('/ ' ))-> setHost ( '{bar} ' )-> setDefault ( ' bar ' , '<> ' )-> setRequirement ( 'bar ' , ' > ' ), ( new Route ( ' / ' ))-> setHost ( ' {bar<>>?<>} ' )) ;
242+ yield [ new Route ('/foo/{bar? } ' ), '/foo/{bar} ' , '' , [ ' bar ' => null ], []] ;
243+ yield [ new Route ('/foo/{bar?baz } ' ), ' /foo/{ bar} ' , '' , [ ' bar ' => ' baz ' ], []] ;
244+ yield [ new Route ('/foo/{bar? baz<buz>} ' ), '/foo/{bar} ' , '' , [ ' bar ' => ' baz<buz> ' ], []] ;
245+ yield [ new Route ('/foo/{!bar? baz<buz>} ' ), '/foo/{!bar} ' , '' , [ ' bar ' => ' baz<buz> ' ], []] ;
246+ yield [ new Route ('/foo/{bar?} ' , [ 'bar ' => 'baz ' ] ), '/foo/{bar} ' , '' , ['bar ' => 'baz ' ], []] ;
247+
248+ yield [ new Route ('/foo/{bar<.*> } ' ), ' /foo/{ bar} ' , '' , [], [ ' bar ' => ' .* ' ]] ;
249+ yield [ new Route ('/foo/{bar<>> } ' ), ' /foo/{ bar} ' , '' , [], [ ' bar ' => ' > ' ]] ;
250+ yield [ new Route ('/foo/{bar<.*>} ' , [], [ 'bar ' => '\d+ ' ] ), '/foo/{bar} ' , '' , [], ['bar ' => '\d+ ' ]] ;
251+ yield [ new Route ('/foo/{bar< [a-z]{2}>} ' ), '/foo/{bar} ' , '' , [], [ ' bar ' => ' [ a-z]{2}' ]] ;
252+ yield [ new Route ('/foo/{!bar<\d+> } ' ), ' /foo/{! bar} ' , '' , [], [ ' bar ' => ' \d+ ' ]] ;
253+
254+ yield [ new Route ('/foo/{bar<.*>? } ' ), ' /foo/{ bar} ' , ' ' , [ ' bar ' => null ], [ ' bar ' => ' .* ' ]] ;
255+ yield [ new Route ('/foo/{bar<>>?<> } ' ), ' /foo/{ bar} ' , '' , [ 'bar ' => ' <> ' ], [ ' bar ' => ' > ' ]] ;
256+
257+ yield [ new Route ('/{foo<.>?\ }/{!bar<\>?<> } ' ), ' /{foo}/{! bar} ' , ' ' , [ 'foo ' => '\\' , 'bar ' => '<> ' ], [ 'foo ' => '. ' , ' bar ' => '\\' ]] ;
258+
259+ yield [ new Route ('/ ' , host: '{bar? } ' ), '/ ' , '{bar} ' , [ ' bar ' => null ], []] ;
260+ yield [ new Route ('/ ' , host: '{bar?baz } ' ), ' / ' , '{bar} ' , [ ' bar ' => ' baz ' ], []] ;
261+ yield [ new Route ('/ ' , host: '{bar?baz<buz> } ' ), ' / ' , '{bar} ' , [ ' bar ' => ' baz<buz> ' ], []] ;
262+ yield [ new Route ('/ ' , [ ' bar ' => ' baz ' ], host: ' {bar?} ' ), '/ ' , ' {bar} ' , ['bar ' => null ], []] ;
263+
264+ yield [ new Route ('/ ' , host: '{bar<.*> } ' ), ' / ' , '{bar} ' , [], [ ' bar ' => ' .* ' ]] ;
265+ yield [ new Route ('/ ' , host: '{bar<>> } ' ), ' / ' , '{bar} ' , [], [ ' bar ' => ' > ' ]] ;
266+ yield [ new Route ('/ ' , [], [ ' bar ' => ' \d+ ' ], host: ' {bar<.*>} ' ), '/ ' , ' {bar} ' , [], ['bar ' => '.* ' ]] ;
267+ yield [ new Route ('/ ' , host: ' {bar< [a-z]{2}>} ' ), '/ ' , '{bar} ' , [], [ ' bar ' => ' [ a-z]{2}' ]] ;
268+
269+ yield [ new Route ('/ ' , host: '{bar<.*>? } ' ), ' / ' , ' { bar} ' , [ ' bar ' => null ], [ ' bar ' => ' .* ' ]] ;
270+ yield [ new Route ('/ ' , host: '{bar<>>?<> } ' ), ' / ' , '{bar} ' , [ 'bar ' => ' <> ' ], [ ' bar ' => ' > ' ]] ;
260271 }
261272
262273 /**
0 commit comments