Overview

Namespaces

  • Evenement
  • None
  • PHP
  • Psr
    • Http
      • Message
  • Ratchet
    • Http
    • RFC6455
      • Handshake
      • Messaging
    • Server
    • Session
      • Serialize
      • Storage
        • Proxy
    • Wamp
    • WebSocket
  • React
    • EventLoop
      • Tick
      • Timer
    • Socket
    • Stream
  • Symfony
    • Component
      • HttpFoundation
        • Session
          • Attribute
          • Flash
          • Storage
            • Handler
            • Proxy
      • Routing
        • Annotation
        • Exception
        • Generator
          • Dumper
        • Loader
          • DependencyInjection
        • Matcher
          • Dumper
        • Tests
          • Annotation
          • Fixtures
            • AnnotatedClasses
            • OtherAnnotatedClasses
          • Generator
            • Dumper
          • Loader
          • Matcher
            • Dumper

Classes

  • AbstractAnnotationLoaderTest
  • AnnotationClassLoaderTest
  • AnnotationDirectoryLoaderTest
  • AnnotationFileLoaderTest
  • ClosureLoaderTest
  • DirectoryLoaderTest
  • ObjectRouteLoaderForTest
  • ObjectRouteLoaderTest
  • PhpFileLoaderTest
  • RouteService
  • XmlFileLoaderTest
  • YamlFileLoaderTest
  • Overview
  • Namespace
  • Class
  • Tree
  1: <?php
  2: 
  3: /*
  4:  * This file is part of the Symfony package.
  5:  *
  6:  * (c) Fabien Potencier <[email protected]>
  7:  *
  8:  * For the full copyright and license information, please view the LICENSE
  9:  * file that was distributed with this source code.
 10:  */
 11: 
 12: namespace Symfony\Component\Routing\Tests\Loader;
 13: 
 14: use PHPUnit\Framework\TestCase;
 15: use Symfony\Component\Config\FileLocator;
 16: use Symfony\Component\Routing\Loader\XmlFileLoader;
 17: use Symfony\Component\Routing\Tests\Fixtures\CustomXmlFileLoader;
 18: 
 19: class XmlFileLoaderTest extends TestCase
 20: {
 21:     public function testSupports()
 22:     {
 23:         $loader = new XmlFileLoader($this->getMockBuilder('Symfony\Component\Config\FileLocator')->getMock());
 24: 
 25:         $this->assertTrue($loader->supports('foo.xml'), '->supports() returns true if the resource is loadable');
 26:         $this->assertFalse($loader->supports('foo.foo'), '->supports() returns true if the resource is loadable');
 27: 
 28:         $this->assertTrue($loader->supports('foo.xml', 'xml'), '->supports() checks the resource type if specified');
 29:         $this->assertFalse($loader->supports('foo.xml', 'foo'), '->supports() checks the resource type if specified');
 30:     }
 31: 
 32:     public function testLoadWithRoute()
 33:     {
 34:         $loader = new XmlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures')));
 35:         $routeCollection = $loader->load('validpattern.xml');
 36:         $route = $routeCollection->get('blog_show');
 37: 
 38:         $this->assertInstanceOf('Symfony\Component\Routing\Route', $route);
 39:         $this->assertSame('/blog/{slug}', $route->getPath());
 40:         $this->assertSame('{locale}.example.com', $route->getHost());
 41:         $this->assertSame('MyBundle:Blog:show', $route->getDefault('_controller'));
 42:         $this->assertSame('\w+', $route->getRequirement('locale'));
 43:         $this->assertSame('RouteCompiler', $route->getOption('compiler_class'));
 44:         $this->assertEquals(array('GET', 'POST', 'PUT', 'OPTIONS'), $route->getMethods());
 45:         $this->assertEquals(array('https'), $route->getSchemes());
 46:         $this->assertEquals('context.getMethod() == "GET"', $route->getCondition());
 47:     }
 48: 
 49:     /**
 50:      * @group legacy
 51:      */
 52:     public function testLegacyRouteDefinitionLoading()
 53:     {
 54:         $loader = new XmlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures')));
 55:         $routeCollection = $loader->load('legacy_validpattern.xml');
 56:         $route = $routeCollection->get('blog_show_legacy');
 57: 
 58:         $this->assertInstanceOf('Symfony\Component\Routing\Route', $route);
 59:         $this->assertSame('/blog/{slug}', $route->getPath());
 60:         $this->assertSame('{locale}.example.com', $route->getHost());
 61:         $this->assertSame('MyBundle:Blog:show', $route->getDefault('_controller'));
 62:         $this->assertSame('\w+', $route->getRequirement('locale'));
 63:         $this->assertSame('RouteCompiler', $route->getOption('compiler_class'));
 64:         $this->assertEquals(array('GET', 'POST', 'PUT', 'OPTIONS'), $route->getMethods());
 65:         $this->assertEquals(array('https'), $route->getSchemes());
 66:         $this->assertEquals('context.getMethod() == "GET"', $route->getCondition());
 67:     }
 68: 
 69:     public function testLoadWithNamespacePrefix()
 70:     {
 71:         $loader = new XmlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures')));
 72:         $routeCollection = $loader->load('namespaceprefix.xml');
 73: 
 74:         $this->assertCount(1, $routeCollection->all(), 'One route is loaded');
 75: 
 76:         $route = $routeCollection->get('blog_show');
 77:         $this->assertSame('/blog/{slug}', $route->getPath());
 78:         $this->assertSame('{_locale}.example.com', $route->getHost());
 79:         $this->assertSame('MyBundle:Blog:show', $route->getDefault('_controller'));
 80:         $this->assertSame('\w+', $route->getRequirement('slug'));
 81:         $this->assertSame('en|fr|de', $route->getRequirement('_locale'));
 82:         $this->assertNull($route->getDefault('slug'));
 83:         $this->assertSame('RouteCompiler', $route->getOption('compiler_class'));
 84:     }
 85: 
 86:     public function testLoadWithImport()
 87:     {
 88:         $loader = new XmlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures')));
 89:         $routeCollection = $loader->load('validresource.xml');
 90:         $routes = $routeCollection->all();
 91: 
 92:         $this->assertCount(2, $routes, 'Two routes are loaded');
 93:         $this->assertContainsOnly('Symfony\Component\Routing\Route', $routes);
 94: 
 95:         foreach ($routes as $route) {
 96:             $this->assertSame('/{foo}/blog/{slug}', $route->getPath());
 97:             $this->assertSame('123', $route->getDefault('foo'));
 98:             $this->assertSame('\d+', $route->getRequirement('foo'));
 99:             $this->assertSame('bar', $route->getOption('foo'));
100:             $this->assertSame('', $route->getHost());
101:             $this->assertSame('context.getMethod() == "POST"', $route->getCondition());
102:         }
103:     }
104: 
105:     /**
106:      * @expectedException \InvalidArgumentException
107:      * @dataProvider getPathsToInvalidFiles
108:      */
109:     public function testLoadThrowsExceptionWithInvalidFile($filePath)
110:     {
111:         $loader = new XmlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures')));
112:         $loader->load($filePath);
113:     }
114: 
115:     /**
116:      * @expectedException \InvalidArgumentException
117:      * @dataProvider getPathsToInvalidFiles
118:      */
119:     public function testLoadThrowsExceptionWithInvalidFileEvenWithoutSchemaValidation($filePath)
120:     {
121:         $loader = new CustomXmlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures')));
122:         $loader->load($filePath);
123:     }
124: 
125:     public function getPathsToInvalidFiles()
126:     {
127:         return array(array('nonvalidnode.xml'), array('nonvalidroute.xml'), array('nonvalid.xml'), array('missing_id.xml'), array('missing_path.xml'));
128:     }
129: 
130:     /**
131:      * @expectedException \InvalidArgumentException
132:      * @expectedExceptionMessage Document types are not allowed.
133:      */
134:     public function testDocTypeIsNotAllowed()
135:     {
136:         $loader = new XmlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures')));
137:         $loader->load('withdoctype.xml');
138:     }
139: 
140:     public function testNullValues()
141:     {
142:         $loader = new XmlFileLoader(new FileLocator(array(__DIR__.'/../Fixtures')));
143:         $routeCollection = $loader->load('null_values.xml');
144:         $route = $routeCollection->get('blog_show');
145: 
146:         $this->assertTrue($route->hasDefault('foo'));
147:         $this->assertNull($route->getDefault('foo'));
148:         $this->assertTrue($route->hasDefault('bar'));
149:         $this->assertNull($route->getDefault('bar'));
150:         $this->assertEquals('foo', $route->getDefault('foobar'));
151:         $this->assertEquals('bar', $route->getDefault('baz'));
152:     }
153: }
154: 
Ratchet API documentation generated by ApiGen 2.8.0