public function provideCompileData() {
return array(
array(
'Static route',
array(
'/foo',
),
'/foo',
'#^/foo$#s',
array(),
array(
array(
'text',
'/foo',
),
),
),
array(
'Route with a variable',
array(
'/foo/{bar}',
),
'/foo',
'#^/foo/(?<bar>[^/]+)$#s',
array(
'bar',
),
array(
array(
'variable',
'/',
'[^/]+',
'bar',
),
array(
'text',
'/foo',
),
),
),
array(
'Route with a variable that has a default value',
array(
'/foo/{bar}',
array(
'bar' => 'bar',
),
),
'/foo',
'#^/foo(?:/(?<bar>[^/]+))?$#s',
array(
'bar',
),
array(
array(
'variable',
'/',
'[^/]+',
'bar',
),
array(
'text',
'/foo',
),
),
),
array(
'Route with several variables',
array(
'/foo/{bar}/{foobar}',
),
'/foo',
'#^/foo/(?<bar>[^/]+)/(?<foobar>[^/]+)$#s',
array(
'bar',
'foobar',
),
array(
array(
'variable',
'/',
'[^/]+',
'foobar',
),
array(
'variable',
'/',
'[^/]+',
'bar',
),
array(
'text',
'/foo',
),
),
),
array(
'Route with several variables that have default values',
array(
'/foo/{bar}/{foobar}',
array(
'bar' => 'bar',
'foobar' => '',
),
),
'/foo',
'#^/foo(?:/(?<bar>[^/]+)(?:/(?<foobar>[^/]+))?)?$#s',
array(
'bar',
'foobar',
),
array(
array(
'variable',
'/',
'[^/]+',
'foobar',
),
array(
'variable',
'/',
'[^/]+',
'bar',
),
array(
'text',
'/foo',
),
),
),
array(
'Route with several variables but some of them have no default values',
array(
'/foo/{bar}/{foobar}',
array(
'bar' => 'bar',
),
),
'/foo',
'#^/foo/(?<bar>[^/]+)/(?<foobar>[^/]+)$#s',
array(
'bar',
'foobar',
),
array(
array(
'variable',
'/',
'[^/]+',
'foobar',
),
array(
'variable',
'/',
'[^/]+',
'bar',
),
array(
'text',
'/foo',
),
),
),
array(
'Route with an optional variable as the first segment',
array(
'/{bar}',
array(
'bar' => 'bar',
),
),
'',
'#^/(?<bar>[^/]+)?$#s',
array(
'bar',
),
array(
array(
'variable',
'/',
'[^/]+',
'bar',
),
),
),
array(
'Route with an optional variable as the first segment with requirements',
array(
'/{bar}',
array(
'bar' => 'bar',
),
array(
'bar' => '(foo|bar)',
),
),
'',
'#^/(?<bar>(foo|bar))?$#s',
array(
'bar',
),
array(
array(
'variable',
'/',
'(foo|bar)',
'bar',
),
),
),
array(
'Route with only optional variables',
array(
'/{foo}/{bar}',
array(
'foo' => 'foo',
'bar' => 'bar',
),
),
'',
'#^/(?<foo>[^/]+)?(?:/(?<bar>[^/]+))?$#s',
array(
'foo',
'bar',
),
array(
array(
'variable',
'/',
'[^/]+',
'bar',
),
array(
'variable',
'/',
'[^/]+',
'foo',
),
),
),
array(
'Route with a variable in last position',
array(
'/foo-{bar}',
),
'/foo',
'#^/foo\\-(?<bar>[^\\-]+)$#s',
array(
'bar',
),
array(
array(
'variable',
'-',
'[^\\-]+',
'bar',
),
array(
'text',
'/foo',
),
),
),
array(
'Route with a format',
array(
'/foo/{bar}.{_format}',
),
'/foo',
'#^/foo/(?<bar>[^/\\.]+)\\.(?<_format>[^\\.]+)$#s',
array(
'bar',
'_format',
),
array(
array(
'variable',
'.',
'[^\\.]+',
'_format',
),
array(
'variable',
'/',
'[^/\\.]+',
'bar',
),
array(
'text',
'/foo',
),
),
),
);
}