Yaffs site version 1.1
[yaffs-website] / vendor / phpdocumentor / reflection-docblock / tests / phpDocumentor / Reflection / DocBlock / Type / CollectionTest.php
diff --git a/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php b/vendor/phpdocumentor/reflection-docblock/tests/phpDocumentor/Reflection/DocBlock/Type/CollectionTest.php
new file mode 100644 (file)
index 0000000..383a6c0
--- /dev/null
@@ -0,0 +1,253 @@
+<?php
+/**
+ * phpDocumentor Collection Test
+ * 
+ * PHP version 5.3
+ *
+ * @author    Mike van Riel <mike.vanriel@naenius.com>
+ * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
+ * @license   http://www.opensource.org/licenses/mit-license.php MIT
+ * @link      http://phpdoc.org
+ */
+
+namespace phpDocumentor\Reflection\DocBlock\Type;
+
+use phpDocumentor\Reflection\DocBlock\Context;
+
+/**
+ * Test class for \phpDocumentor\Reflection\DocBlock\Type\Collection
+ * 
+ * @covers phpDocumentor\Reflection\DocBlock\Type\Collection
+ *
+ * @author    Mike van Riel <mike.vanriel@naenius.com>
+ * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
+ * @license   http://www.opensource.org/licenses/mit-license.php MIT
+ * @link      http://phpdoc.org
+ */
+class CollectionTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::__construct
+     * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::getContext
+     * 
+     * @return void
+     */
+    public function testConstruct()
+    {
+        $collection = new Collection();
+        $this->assertCount(0, $collection);
+        $this->assertEquals('', $collection->getContext()->getNamespace());
+        $this->assertCount(0, $collection->getContext()->getNamespaceAliases());
+    }
+
+    /**
+     * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::__construct
+     * 
+     * @return void
+     */
+    public function testConstructWithTypes()
+    {
+        $collection = new Collection(array('integer', 'string'));
+        $this->assertCount(2, $collection);
+    }
+
+    /**
+     * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::__construct
+     * 
+     * @return void
+     */
+    public function testConstructWithNamespace()
+    {
+        $collection = new Collection(array(), new Context('\My\Space'));
+        $this->assertEquals('My\Space', $collection->getContext()->getNamespace());
+
+        $collection = new Collection(array(), new Context('My\Space'));
+        $this->assertEquals('My\Space', $collection->getContext()->getNamespace());
+
+        $collection = new Collection(array(), null);
+        $this->assertEquals('', $collection->getContext()->getNamespace());
+    }
+
+    /**
+     * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::__construct
+     * 
+     * @return void
+     */
+    public function testConstructWithNamespaceAliases()
+    {
+        $fixture = array('a' => 'b');
+        $collection = new Collection(array(), new Context(null, $fixture));
+        $this->assertEquals(
+            array('a' => '\b'),
+            $collection->getContext()->getNamespaceAliases()
+        );
+    }
+
+    /**
+     * @param string $fixture
+     * @param array  $expected
+     *
+     * @dataProvider provideTypesToExpand
+     * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::add
+     * 
+     * @return void
+     */
+    public function testAdd($fixture, $expected)
+    {
+        $collection = new Collection(
+            array(),
+            new Context('\My\Space', array('Alias' => '\My\Space\Aliasing'))
+        );
+        $collection->add($fixture);
+
+        $this->assertSame($expected, $collection->getArrayCopy());
+    }
+
+    /**
+     * @param string $fixture
+     * @param array  $expected
+     *
+     * @dataProvider provideTypesToExpandWithoutNamespace
+     * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::add
+     * 
+     * @return void
+     */
+    public function testAddWithoutNamespace($fixture, $expected)
+    {
+        $collection = new Collection(
+            array(),
+            new Context(null, array('Alias' => '\My\Space\Aliasing'))
+        );
+        $collection->add($fixture);
+
+        $this->assertSame($expected, $collection->getArrayCopy());
+    }
+
+    /**
+     * @param string $fixture
+     * @param array  $expected
+     *
+     * @dataProvider provideTypesToExpandWithPropertyOrMethod
+     * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::add
+     *
+     * @return void
+     */
+    public function testAddMethodsAndProperties($fixture, $expected)
+    {
+        $collection = new Collection(
+            array(),
+            new Context(null, array('LinkDescriptor' => '\phpDocumentor\LinkDescriptor'))
+        );
+        $collection->add($fixture);
+
+        $this->assertSame($expected, $collection->getArrayCopy());
+    }
+
+    /**
+     * @covers phpDocumentor\Reflection\DocBlock\Type\Collection::add
+     * @expectedException InvalidArgumentException
+     * 
+     * @return void
+     */
+    public function testAddWithInvalidArgument()
+    {
+        $collection = new Collection();
+        $collection->add(array());
+    }
+
+    /**
+     * Returns the types and their expected values to test the retrieval of
+     * types.
+     *
+     * @param string $method    Name of the method consuming this data provider.
+     * @param string $namespace Name of the namespace to user as basis.
+     *
+     * @return string[]
+     */
+    public function provideTypesToExpand($method, $namespace = '\My\Space\\')
+    {
+        return array(
+            array('', array()),
+            array(' ', array()),
+            array('int', array('int')),
+            array('int ', array('int')),
+            array('string', array('string')),
+            array('DocBlock', array($namespace.'DocBlock')),
+            array('DocBlock[]', array($namespace.'DocBlock[]')),
+            array(' DocBlock ', array($namespace.'DocBlock')),
+            array('\My\Space\DocBlock', array('\My\Space\DocBlock')),
+            array('Alias\DocBlock', array('\My\Space\Aliasing\DocBlock')),
+            array(
+                'DocBlock|Tag',
+                array($namespace .'DocBlock', $namespace .'Tag')
+            ),
+            array(
+                'DocBlock|null',
+                array($namespace.'DocBlock', 'null')
+            ),
+            array(
+                '\My\Space\DocBlock|Tag',
+                array('\My\Space\DocBlock', $namespace.'Tag')
+            ),
+            array(
+                'DocBlock[]|null',
+                array($namespace.'DocBlock[]', 'null')
+            ),
+            array(
+                'DocBlock[]|int[]',
+                array($namespace.'DocBlock[]', 'int[]')
+            ),
+            array(
+                'LinkDescriptor::setLink()',
+                array($namespace.'LinkDescriptor::setLink()')
+            ),
+            array(
+                'Alias\LinkDescriptor::setLink()',
+                array('\My\Space\Aliasing\LinkDescriptor::setLink()')
+            ),
+        );
+    }
+
+    /**
+     * Returns the types and their expected values to test the retrieval of
+     * types when no namespace is available.
+     *
+     * @param string $method Name of the method consuming this data provider.
+     *
+     * @return string[]
+     */
+    public function provideTypesToExpandWithoutNamespace($method)
+    {
+        return $this->provideTypesToExpand($method, '\\');
+    }
+
+    /**
+     * Returns the method and property types and their expected values to test
+     * the retrieval of types.
+     *
+     * @param string $method Name of the method consuming this data provider.
+     *
+     * @return string[]
+     */
+    public function provideTypesToExpandWithPropertyOrMethod($method)
+    {
+        return array(
+            array(
+                'LinkDescriptor::setLink()',
+                array('\phpDocumentor\LinkDescriptor::setLink()')
+            ),
+            array(
+                'phpDocumentor\LinkDescriptor::setLink()',
+                array('\phpDocumentor\LinkDescriptor::setLink()')
+            ),
+            array(
+                'LinkDescriptor::$link',
+                array('\phpDocumentor\LinkDescriptor::$link')
+            ),
+            array(
+                'phpDocumentor\LinkDescriptor::$link',
+                array('\phpDocumentor\LinkDescriptor::$link')
+            ),
+        );
+    }
+}