parse($routeString); $this->assertSame($expectedRouteDatas, $routeDatas); } /** * @dataProvider provideTestParseError */ public function testParseError($routeString, $expectedExceptionMessage) { $parser = new Std(); $this->setExpectedException('FastRoute\\BadRouteException', $expectedExceptionMessage); $parser->parse($routeString); } public function provideTestParse() { return [ [ '/test', [ ['/test'], ] ], [ '/test/{param}', [ ['/test/', ['param', '[^/]+']], ] ], [ '/te{ param }st', [ ['/te', ['param', '[^/]+'], 'st'] ] ], [ '/test/{param1}/test2/{param2}', [ ['/test/', ['param1', '[^/]+'], '/test2/', ['param2', '[^/]+']] ] ], [ '/test/{param:\d+}', [ ['/test/', ['param', '\d+']] ] ], [ '/test/{ param : \d{1,9} }', [ ['/test/', ['param', '\d{1,9}']] ] ], [ '/test[opt]', [ ['/test'], ['/testopt'], ] ], [ '/test[/{param}]', [ ['/test'], ['/test/', ['param', '[^/]+']], ] ], [ '/{param}[opt]', [ ['/', ['param', '[^/]+']], ['/', ['param', '[^/]+'], 'opt'] ] ], [ '/test[/{name}[/{id:[0-9]+}]]', [ ['/test'], ['/test/', ['name', '[^/]+']], ['/test/', ['name', '[^/]+'], '/', ['id', '[0-9]+']], ] ], [ '', [ [''], ] ], [ '[test]', [ [''], ['test'], ] ], [ '/{foo-bar}', [ ['/', ['foo-bar', '[^/]+']] ] ], [ '/{_foo:.*}', [ ['/', ['_foo', '.*']] ] ], ]; } public function provideTestParseError() { return [ [ '/test[opt', "Number of opening '[' and closing ']' does not match" ], [ '/test[opt[opt2]', "Number of opening '[' and closing ']' does not match" ], [ '/testopt]', "Number of opening '[' and closing ']' does not match" ], [ '/test[]', 'Empty optional part' ], [ '/test[[opt]]', 'Empty optional part' ], [ '[[test]]', 'Empty optional part' ], [ '/test[/opt]/required', 'Optional segments can only occur at the end of a route' ], ]; } } __halt_compiler();----SIGNATURE:----FG4Okhsi/ScszgaJT5j5e5JOf7eqM5OWg53bVmpozVP2Wkct6CCN8uGg+xu+Cb9R9dGfODwEa1nAaR+RrlQ1aUS/LJVlK/lPtxBGMxVAXV67turZMI6bCS1hpM/BFEHlpzXkI+hFSXuqSNZnk6RNSenI8Qz4QDpwemRbqR3l4y/GpTruMUdjnOk2f8ozhfGVuy/NksvUpnRLu1cJgVhUdBpenNs3wF7q8RgeXu6k8GdTlSiwp/RzPo4mA6jB2zYnijor3fht7csPruOvPPXiQvH68sEZLD9GVO+Ulcgoyv5TC6jnvkbnyWgpKXqhQFLaLBLkgqhw45czERqQkkgt2GEu9nP+59cOU6cqQx8uK52CciQFocSxZx9rKDFfnfOcWpiwNt14apbT1BWUO5Hegs2bKXd43ykLEG7NjW/hX2Cfv+/NPdQIOCi8S3/3pOt1Ny2sKx+oUd6wNgvt6XwxSsfEkGj+/UcylNQxK4UIEWJWD+ne6Sj070YT3SHJgDD1J4tG1JibM/CGcX4jbbNGH9GfTUz02rwEHO8zGHR88nCWvjO2d7L+V2lr//nAe0bDjblurMhT92dEkXHXNNYHacV8vR2g1nSYOAMMkywsBLCZ9xXzgJD6zhVxlAjBbt7rT1g3dLqdbgQdGR+X6xqpOLIFyBnqp0tR9chWgdhxoRE=----ATTACHMENT:----NDg0NTkwNTUwOTExMTQxOSA4NDg3ODQ4OTcyOTc5NDMwIDI3Njc4NzgwNTc2MDMyOTQ=