Allow template variables to be named as alpha followed by alphanumeric and underscore.
This commit is contained in:
parent
81ce6dae9d
commit
f08691fff1
|
|
@ -27,7 +27,7 @@ class TemplateRoute extends RegexRoute
|
|||
/** Regular expression matching letters and digits */
|
||||
const RE_ALPHANUM = '[0-9a-zA-Z]+';
|
||||
/** Regular expression matching a URI template variable (e.g., {id}) */
|
||||
const URI_TEMPLATE_EXPRESSION_RE = '/{([a-zA-Z]+)}/';
|
||||
const URI_TEMPLATE_EXPRESSION_RE = '/{([[a-zA-Z][a-zA-Z0-_]*)}/';
|
||||
|
||||
/**
|
||||
* Create a new route that matches a URI template to a Handler.
|
||||
|
|
|
|||
|
|
@ -99,6 +99,56 @@ class TemplateRouteTest extends \PHPUnit_Framework_TestCase
|
|||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider allowedVariableNamesProvider
|
||||
*/
|
||||
public function testMatchesAllowedVariablesNames($template, $path, $expectedCaptures)
|
||||
{
|
||||
$this->request->getPath()->willReturn($path);
|
||||
$route = new TemplateRoute($template, $this->handler->reveal(), null, null);
|
||||
$route->getResponse($this->request->reveal());
|
||||
$this->handler->getResponse(
|
||||
Argument::any(),
|
||||
Argument::that(
|
||||
function ($args) use ($expectedCaptures) {
|
||||
return count(array_diff_assoc($expectedCaptures, $args)) === 0;
|
||||
}
|
||||
)
|
||||
)->shouldHaveBeenCalled();
|
||||
}
|
||||
|
||||
public function allowedVariableNamesProvider()
|
||||
{
|
||||
return [
|
||||
["/{n}", "/lower", ["n" => "lower"]],
|
||||
["/{N}", "/UPPER", ["N" => "UPPER"]],
|
||||
["/{var1024}", "/digits", ["var1024" => "digits"]],
|
||||
["/{variable_name}", "/underscore", ["variable_name" => "underscore"]],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider illegalVariableNamesProvider
|
||||
*/
|
||||
public function testFailsToMatchIllegalVariablesNames($template, $path)
|
||||
{
|
||||
$this->request->getPath()->willReturn($path);
|
||||
$route = new TemplateRoute($template, $this->handler->reveal(), null, null);
|
||||
$route->getResponse($this->request->reveal());
|
||||
$this->handler->getResponse(Argument::cetera())->shouldNotHaveBeenCalled();
|
||||
}
|
||||
|
||||
public function illegalVariableNamesProvider()
|
||||
{
|
||||
return [
|
||||
["/{not-legal}", "/hyphen"],
|
||||
["/{1digitfirst}", "/digitfirst"],
|
||||
["/{%2f}", "/percent-encoded"],
|
||||
["/{}", "/empty"],
|
||||
["/{{nested}}", "/nested"]
|
||||
];
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
$this->request = $this->prophesize("\\pjdietz\\WellRESTed\\Interfaces\\RequestInterface");
|
||||
|
|
|
|||
Loading…
Reference in New Issue