No Description

DumperPrefixCollectionTest.php 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Component\Routing\Tests\Matcher\Dumper;
  11. use Symfony\Component\Routing\Route;
  12. use Symfony\Component\Routing\Matcher\Dumper\DumperPrefixCollection;
  13. use Symfony\Component\Routing\Matcher\Dumper\DumperRoute;
  14. use Symfony\Component\Routing\Matcher\Dumper\DumperCollection;
  15. class DumperPrefixCollectionTest extends \PHPUnit_Framework_TestCase
  16. {
  17. public function testAddPrefixRoute()
  18. {
  19. $coll = new DumperPrefixCollection();
  20. $coll->setPrefix('');
  21. $route = new DumperRoute('bar', new Route('/foo/bar'));
  22. $coll = $coll->addPrefixRoute($route);
  23. $route = new DumperRoute('bar2', new Route('/foo/bar'));
  24. $coll = $coll->addPrefixRoute($route);
  25. $route = new DumperRoute('qux', new Route('/foo/qux'));
  26. $coll = $coll->addPrefixRoute($route);
  27. $route = new DumperRoute('bar3', new Route('/foo/bar'));
  28. $coll = $coll->addPrefixRoute($route);
  29. $route = new DumperRoute('bar4', new Route(''));
  30. $result = $coll->addPrefixRoute($route);
  31. $expect = <<<'EOF'
  32. |-coll /
  33. | |-coll /f
  34. | | |-coll /fo
  35. | | | |-coll /foo
  36. | | | | |-coll /foo/
  37. | | | | | |-coll /foo/b
  38. | | | | | | |-coll /foo/ba
  39. | | | | | | | |-coll /foo/bar
  40. | | | | | | | | |-route bar /foo/bar
  41. | | | | | | | | |-route bar2 /foo/bar
  42. | | | | | |-coll /foo/q
  43. | | | | | | |-coll /foo/qu
  44. | | | | | | | |-coll /foo/qux
  45. | | | | | | | | |-route qux /foo/qux
  46. | | | | | |-coll /foo/b
  47. | | | | | | |-coll /foo/ba
  48. | | | | | | | |-coll /foo/bar
  49. | | | | | | | | |-route bar3 /foo/bar
  50. | |-route bar4 /
  51. EOF;
  52. $this->assertSame($expect, $this->collectionToString($result->getRoot(), ' '));
  53. }
  54. public function testMergeSlashNodes()
  55. {
  56. $coll = new DumperPrefixCollection();
  57. $coll->setPrefix('');
  58. $route = new DumperRoute('bar', new Route('/foo/bar'));
  59. $coll = $coll->addPrefixRoute($route);
  60. $route = new DumperRoute('bar2', new Route('/foo/bar'));
  61. $coll = $coll->addPrefixRoute($route);
  62. $route = new DumperRoute('qux', new Route('/foo/qux'));
  63. $coll = $coll->addPrefixRoute($route);
  64. $route = new DumperRoute('bar3', new Route('/foo/bar'));
  65. $result = $coll->addPrefixRoute($route);
  66. $result->getRoot()->mergeSlashNodes();
  67. $expect = <<<'EOF'
  68. |-coll /f
  69. | |-coll /fo
  70. | | |-coll /foo
  71. | | | |-coll /foo/b
  72. | | | | |-coll /foo/ba
  73. | | | | | |-coll /foo/bar
  74. | | | | | | |-route bar /foo/bar
  75. | | | | | | |-route bar2 /foo/bar
  76. | | | |-coll /foo/q
  77. | | | | |-coll /foo/qu
  78. | | | | | |-coll /foo/qux
  79. | | | | | | |-route qux /foo/qux
  80. | | | |-coll /foo/b
  81. | | | | |-coll /foo/ba
  82. | | | | | |-coll /foo/bar
  83. | | | | | | |-route bar3 /foo/bar
  84. EOF;
  85. $this->assertSame($expect, $this->collectionToString($result->getRoot(), ' '));
  86. }
  87. private function collectionToString(DumperCollection $collection, $prefix)
  88. {
  89. $string = '';
  90. foreach ($collection as $route) {
  91. if ($route instanceof DumperCollection) {
  92. $string .= sprintf("%s|-coll %s\n", $prefix, $route->getPrefix());
  93. $string .= $this->collectionToString($route, $prefix.'| ');
  94. } else {
  95. $string .= sprintf("%s|-route %s %s\n", $prefix, $route->getName(), $route->getRoute()->getPath());
  96. }
  97. }
  98. return $string;
  99. }
  100. }