Merge "Add dropSequence to postgres"
[lhc/web/wiklou.git] / tests / phpunit / includes / libs / ObjectFactoryTest.php
index 622fce2..35a7b60 100644 (file)
@@ -24,62 +24,109 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
         * @covers ObjectFactory::getObjectFromSpec
         */
        public function testClosureExpansionDisabled() {
-               $obj = ObjectFactory::getObjectFromSpec( array(
+               $obj = ObjectFactory::getObjectFromSpec( [
                        'class' => 'ObjectFactoryTestFixture',
-                       'args' => array( function() {
-                               return 'unwrapped';
-                       }, ),
-                       'calls' => array(
-                               'setter' => array( function() {
-                                       return 'unwrapped';
-                               }, ),
-                       ),
+                       'args' => [
+                               function () {
+                                       return 'wrapped';
+                               },
+                               'unwrapped',
+                       ],
+                       'calls' => [
+                               'setter' => [ function () {
+                                       return 'wrapped';
+                               }, ],
+                       ],
                        'closure_expansion' => false,
-               ) );
+               ] );
                $this->assertInstanceOf( 'Closure', $obj->args[0] );
-               $this->assertSame( 'unwrapped', $obj->args[0]() );
+               $this->assertSame( 'wrapped', $obj->args[0]() );
+               $this->assertSame( 'unwrapped', $obj->args[1] );
                $this->assertInstanceOf( 'Closure', $obj->setterArgs[0] );
-               $this->assertSame( 'unwrapped', $obj->setterArgs[0]() );
+               $this->assertSame( 'wrapped', $obj->setterArgs[0]() );
        }
 
        /**
         * @covers ObjectFactory::getObjectFromSpec
+        * @covers ObjectFactory::expandClosures
         */
        public function testClosureExpansionEnabled() {
-               $obj = ObjectFactory::getObjectFromSpec( array(
+               $obj = ObjectFactory::getObjectFromSpec( [
                        'class' => 'ObjectFactoryTestFixture',
-                       'args' => array( function() {
-                               return 'unwrapped';
-                       }, ),
-                       'calls' => array(
-                               'setter' => array( function() {
-                                       return 'unwrapped';
-                               }, ),
-                       ),
+                       'args' => [
+                               function () {
+                                       return 'wrapped';
+                               },
+                               'unwrapped',
+                       ],
+                       'calls' => [
+                               'setter' => [ function () {
+                                       return 'wrapped';
+                               }, ],
+                       ],
                        'closure_expansion' => true,
-               ) );
+               ] );
                $this->assertInternalType( 'string', $obj->args[0] );
-               $this->assertSame( 'unwrapped', $obj->args[0] );
+               $this->assertSame( 'wrapped', $obj->args[0] );
+               $this->assertSame( 'unwrapped', $obj->args[1] );
                $this->assertInternalType( 'string', $obj->setterArgs[0] );
-               $this->assertSame( 'unwrapped', $obj->setterArgs[0] );
+               $this->assertSame( 'wrapped', $obj->setterArgs[0] );
 
-               $obj = ObjectFactory::getObjectFromSpec( array(
+               $obj = ObjectFactory::getObjectFromSpec( [
                        'class' => 'ObjectFactoryTestFixture',
-                       'args' => array( function() {
+                       'args' => [ function () {
                                return 'unwrapped';
-                       }, ),
-                       'calls' => array(
-                               'setter' => array( function() {
+                       }, ],
+                       'calls' => [
+                               'setter' => [ function () {
                                        return 'unwrapped';
-                               }, ),
-                       ),
-               ) );
+                               }, ],
+                       ],
+               ] );
                $this->assertInternalType( 'string', $obj->args[0] );
                $this->assertSame( 'unwrapped', $obj->args[0] );
                $this->assertInternalType( 'string', $obj->setterArgs[0] );
                $this->assertSame( 'unwrapped', $obj->setterArgs[0] );
        }
 
+       /**
+        * @covers ObjectFactory::getObjectFromSpec
+        */
+       public function testGetObjectFromFactory() {
+               $args = [ 'a', 'b' ];
+               $obj = ObjectFactory::getObjectFromSpec( [
+                       'factory' => function ( $a, $b ) {
+                               return new ObjectFactoryTestFixture( $a, $b );
+                       },
+                       'args' => $args,
+               ] );
+               $this->assertSame( $args, $obj->args );
+       }
+
+       /**
+        * @covers ObjectFactory::getObjectFromSpec
+        * @expectedException InvalidArgumentException
+        */
+       public function testGetObjectFromInvalid() {
+               $args = [ 'a', 'b' ];
+               $obj = ObjectFactory::getObjectFromSpec( [
+                       // Missing 'class' or 'factory'
+                       'args' => $args,
+               ] );
+       }
+
+       /**
+        * @covers ObjectFactory::getObjectFromSpec
+        * @dataProvider provideConstructClassInstance
+        */
+       public function testGetObjectFromClass( $args ) {
+               $obj = ObjectFactory::getObjectFromSpec( [
+                       'class' => 'ObjectFactoryTestFixture',
+                       'args' => $args,
+               ] );
+               $this->assertSame( $args, $obj->args );
+       }
+
        /**
         * @covers ObjectFactory::constructClassInstance
         * @dataProvider provideConstructClassInstance
@@ -91,21 +138,32 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
                $this->assertSame( $args, $obj->args );
        }
 
-       public function provideConstructClassInstance() {
+       public static function provideConstructClassInstance() {
                // These args go to 11. I thought about making 10 one louder, but 11!
-               return array(
-                       '0 args' => array( array() ),
-                       '1 args' => array( array( 1, ) ),
-                       '2 args' => array( array( 1, 2, ) ),
-                       '3 args' => array( array( 1, 2, 3, ) ),
-                       '4 args' => array( array( 1, 2, 3, 4, ) ),
-                       '5 args' => array( array( 1, 2, 3, 4, 5, ) ),
-                       '6 args' => array( array( 1, 2, 3, 4, 5, 6, ) ),
-                       '7 args' => array( array( 1, 2, 3, 4, 5, 6, 7, ) ),
-                       '8 args' => array( array( 1, 2, 3, 4, 5, 6, 7, 8, ) ),
-                       '9 args' => array( array( 1, 2, 3, 4, 5, 6, 7, 8, 9, ) ),
-                       '10 args' => array( array( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ) ),
-                       '11 args' => array( array( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ) ),
+               return [
+                       '0 args' => [ [] ],
+                       '1 args' => [ [ 1, ] ],
+                       '2 args' => [ [ 1, 2, ] ],
+                       '3 args' => [ [ 1, 2, 3, ] ],
+                       '4 args' => [ [ 1, 2, 3, 4, ] ],
+                       '5 args' => [ [ 1, 2, 3, 4, 5, ] ],
+                       '6 args' => [ [ 1, 2, 3, 4, 5, 6, ] ],
+                       '7 args' => [ [ 1, 2, 3, 4, 5, 6, 7, ] ],
+                       '8 args' => [ [ 1, 2, 3, 4, 5, 6, 7, 8, ] ],
+                       '9 args' => [ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, ] ],
+                       '10 args' => [ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ] ],
+                       '11 args' => [ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ] ],
+               ];
+       }
+
+       /**
+        * @covers ObjectFactory::constructClassInstance
+        * @expectedException InvalidArgumentException
+        */
+       public function testNamedArgs() {
+               $args = [ 'foo' => 1, 'bar' => 2, 'baz' => 3 ];
+               $obj = ObjectFactory::constructClassInstance(
+                       'ObjectFactoryTestFixture', $args
                );
        }
 }