提交代码
This commit is contained in:
177
vendor/symfony/routing/Tests/Matcher/Dumper/StaticPrefixCollectionTest.php
vendored
Normal file
177
vendor/symfony/routing/Tests/Matcher/Dumper/StaticPrefixCollectionTest.php
vendored
Normal file
@@ -0,0 +1,177 @@
|
||||
<?php
|
||||
|
||||
namespace Symfony\Component\Routing\Tests\Matcher\Dumper;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Routing\Matcher\Dumper\StaticPrefixCollection;
|
||||
use Symfony\Component\Routing\Route;
|
||||
|
||||
class StaticPrefixCollectionTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider routeProvider
|
||||
*/
|
||||
public function testGrouping(array $routes, $expected)
|
||||
{
|
||||
$collection = new StaticPrefixCollection('/');
|
||||
|
||||
foreach ($routes as $route) {
|
||||
list($path, $name) = $route;
|
||||
$staticPrefix = (new Route($path))->compile()->getStaticPrefix();
|
||||
$collection->addRoute($staticPrefix, [$name]);
|
||||
}
|
||||
|
||||
$dumped = $this->dumpCollection($collection);
|
||||
$this->assertEquals($expected, $dumped);
|
||||
}
|
||||
|
||||
public function routeProvider()
|
||||
{
|
||||
return [
|
||||
'Simple - not nested' => [
|
||||
[
|
||||
['/', 'root'],
|
||||
['/prefix/segment/', 'prefix_segment'],
|
||||
['/leading/segment/', 'leading_segment'],
|
||||
],
|
||||
<<<EOF
|
||||
root
|
||||
prefix_segment
|
||||
leading_segment
|
||||
EOF
|
||||
],
|
||||
'Nested - small group' => [
|
||||
[
|
||||
['/', 'root'],
|
||||
['/prefix/segment/aa', 'prefix_segment'],
|
||||
['/prefix/segment/bb', 'leading_segment'],
|
||||
],
|
||||
<<<EOF
|
||||
root
|
||||
/prefix/segment/
|
||||
-> prefix_segment
|
||||
-> leading_segment
|
||||
EOF
|
||||
],
|
||||
'Nested - contains item at intersection' => [
|
||||
[
|
||||
['/', 'root'],
|
||||
['/prefix/segment/', 'prefix_segment'],
|
||||
['/prefix/segment/bb', 'leading_segment'],
|
||||
],
|
||||
<<<EOF
|
||||
root
|
||||
/prefix/segment/
|
||||
-> prefix_segment
|
||||
-> leading_segment
|
||||
EOF
|
||||
],
|
||||
'Simple one level nesting' => [
|
||||
[
|
||||
['/', 'root'],
|
||||
['/group/segment/', 'nested_segment'],
|
||||
['/group/thing/', 'some_segment'],
|
||||
['/group/other/', 'other_segment'],
|
||||
],
|
||||
<<<EOF
|
||||
root
|
||||
/group/
|
||||
-> nested_segment
|
||||
-> some_segment
|
||||
-> other_segment
|
||||
EOF
|
||||
],
|
||||
'Retain matching order with groups' => [
|
||||
[
|
||||
['/group/aa/', 'aa'],
|
||||
['/group/bb/', 'bb'],
|
||||
['/group/cc/', 'cc'],
|
||||
['/(.*)', 'root'],
|
||||
['/group/dd/', 'dd'],
|
||||
['/group/ee/', 'ee'],
|
||||
['/group/ff/', 'ff'],
|
||||
],
|
||||
<<<EOF
|
||||
/group/
|
||||
-> aa
|
||||
-> bb
|
||||
-> cc
|
||||
root
|
||||
/group/
|
||||
-> dd
|
||||
-> ee
|
||||
-> ff
|
||||
EOF
|
||||
],
|
||||
'Retain complex matching order with groups at base' => [
|
||||
[
|
||||
['/aaa/111/', 'first_aaa'],
|
||||
['/prefixed/group/aa/', 'aa'],
|
||||
['/prefixed/group/bb/', 'bb'],
|
||||
['/prefixed/group/cc/', 'cc'],
|
||||
['/prefixed/(.*)', 'root'],
|
||||
['/prefixed/group/dd/', 'dd'],
|
||||
['/prefixed/group/ee/', 'ee'],
|
||||
['/prefixed/', 'parent'],
|
||||
['/prefixed/group/ff/', 'ff'],
|
||||
['/aaa/222/', 'second_aaa'],
|
||||
['/aaa/333/', 'third_aaa'],
|
||||
],
|
||||
<<<EOF
|
||||
/aaa/
|
||||
-> first_aaa
|
||||
-> second_aaa
|
||||
-> third_aaa
|
||||
/prefixed/
|
||||
-> /prefixed/group/
|
||||
-> -> aa
|
||||
-> -> bb
|
||||
-> -> cc
|
||||
-> root
|
||||
-> /prefixed/group/
|
||||
-> -> dd
|
||||
-> -> ee
|
||||
-> -> ff
|
||||
-> parent
|
||||
EOF
|
||||
],
|
||||
|
||||
'Group regardless of segments' => [
|
||||
[
|
||||
['/aaa-111/', 'a1'],
|
||||
['/aaa-222/', 'a2'],
|
||||
['/aaa-333/', 'a3'],
|
||||
['/group-aa/', 'g1'],
|
||||
['/group-bb/', 'g2'],
|
||||
['/group-cc/', 'g3'],
|
||||
],
|
||||
<<<EOF
|
||||
/aaa-
|
||||
-> a1
|
||||
-> a2
|
||||
-> a3
|
||||
/group-
|
||||
-> g1
|
||||
-> g2
|
||||
-> g3
|
||||
EOF
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
private function dumpCollection(StaticPrefixCollection $collection, $prefix = '')
|
||||
{
|
||||
$lines = [];
|
||||
|
||||
foreach ($collection->getRoutes() as $item) {
|
||||
if ($item instanceof StaticPrefixCollection) {
|
||||
$lines[] = $prefix.$item->getPrefix();
|
||||
$lines[] = $this->dumpCollection($item, $prefix.'-> ');
|
||||
} else {
|
||||
$lines[] = $prefix.implode(' ', $item);
|
||||
}
|
||||
}
|
||||
|
||||
return implode("\n", $lines);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user