Version 1
[yaffs-website] / vendor / symfony / routing / Tests / Loader / ObjectRouteLoaderTest.php
diff --git a/vendor/symfony/routing/Tests/Loader/ObjectRouteLoaderTest.php b/vendor/symfony/routing/Tests/Loader/ObjectRouteLoaderTest.php
new file mode 100644 (file)
index 0000000..408fa0b
--- /dev/null
@@ -0,0 +1,123 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Routing\Tests\Loader;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\Routing\Loader\ObjectRouteLoader;
+use Symfony\Component\Routing\Route;
+use Symfony\Component\Routing\RouteCollection;
+
+class ObjectRouteLoaderTest extends TestCase
+{
+    public function testLoadCallsServiceAndReturnsCollection()
+    {
+        $loader = new ObjectRouteLoaderForTest();
+
+        // create a basic collection that will be returned
+        $collection = new RouteCollection();
+        $collection->add('foo', new Route('/foo'));
+
+        $loader->loaderMap = array(
+            'my_route_provider_service' => new RouteService($collection),
+        );
+
+        $actualRoutes = $loader->load(
+            'my_route_provider_service:loadRoutes',
+            'service'
+        );
+
+        $this->assertSame($collection, $actualRoutes);
+        // the service file should be listed as a resource
+        $this->assertNotEmpty($actualRoutes->getResources());
+    }
+
+    /**
+     * @expectedException \InvalidArgumentException
+     * @dataProvider getBadResourceStrings
+     */
+    public function testExceptionWithoutSyntax($resourceString)
+    {
+        $loader = new ObjectRouteLoaderForTest();
+        $loader->load($resourceString);
+    }
+
+    public function getBadResourceStrings()
+    {
+        return array(
+            array('Foo'),
+            array('Bar::baz'),
+            array('Foo:Bar:baz'),
+        );
+    }
+
+    /**
+     * @expectedException \LogicException
+     */
+    public function testExceptionOnNoObjectReturned()
+    {
+        $loader = new ObjectRouteLoaderForTest();
+        $loader->loaderMap = array('my_service' => 'NOT_AN_OBJECT');
+        $loader->load('my_service:method');
+    }
+
+    /**
+     * @expectedException \BadMethodCallException
+     */
+    public function testExceptionOnBadMethod()
+    {
+        $loader = new ObjectRouteLoaderForTest();
+        $loader->loaderMap = array('my_service' => new \stdClass());
+        $loader->load('my_service:method');
+    }
+
+    /**
+     * @expectedException \LogicException
+     */
+    public function testExceptionOnMethodNotReturningCollection()
+    {
+        $service = $this->getMockBuilder('stdClass')
+            ->setMethods(array('loadRoutes'))
+            ->getMock();
+        $service->expects($this->once())
+            ->method('loadRoutes')
+            ->will($this->returnValue('NOT_A_COLLECTION'));
+
+        $loader = new ObjectRouteLoaderForTest();
+        $loader->loaderMap = array('my_service' => $service);
+        $loader->load('my_service:loadRoutes');
+    }
+}
+
+class ObjectRouteLoaderForTest extends ObjectRouteLoader
+{
+    public $loaderMap = array();
+
+    protected function getServiceObject($id)
+    {
+        return isset($this->loaderMap[$id]) ? $this->loaderMap[$id] : null;
+    }
+}
+
+class RouteService
+{
+    private $collection;
+
+    public function __construct($collection)
+    {
+        $this->collection = $collection;
+    }
+
+    public function loadRoutes()
+    {
+        return $this->collection;
+    }
+}