<?php
|
|
|
|
namespace FastRoute\RouteParser;
|
|
|
|
class StdTest extends \PhpUnit_Framework_TestCase {
|
|
/** @dataProvider provideTestParse */
|
|
public function testParse($routeString, $expectedRouteDatas) {
|
|
$parser = new Std();
|
|
$routeDatas = $parser->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"
|
|
],
|
|
];
|
|
}
|
|
}
|