fix for bug where magic bind method would not work if binder class had dependencies.
authorBob McKee <bob@bluestatedigital.com>
Thu, 24 Sep 2009 20:09:03 +0000 (16:09 -0400)
committerBob McKee <bob@bluestatedigital.com>
Thu, 24 Sep 2009 20:09:03 +0000 (16:09 -0400)
framework/Injector/lib/Horde/Injector.php
framework/Injector/test/Horde/Injector/InjectorTest.php

index af0368d..d31b8d0 100644 (file)
@@ -75,8 +75,9 @@ class Horde_Injector implements Horde_Injector_Scope
 
         if ($reflectionClass->getConstructor()) {
             $this->_addBinder($interface, $reflectionClass->newInstanceArgs($args));
+        } else {
+            $this->_addBinder($interface, $reflectionClass->newInstance());
         }
-        $this->_addBinder($interface, $reflectionClass->newInstance());
 
         return $this->_getBinder($interface);
     }
index 1bf61da..701a24c 100644 (file)
@@ -30,6 +30,17 @@ class Horde_Injector_InjectorTest extends PHPUnit_Framework_TestCase
         $this->assertType('Horde_Injector_Binder_Mock', $injector->bindMock('BOUND_INTERFACE'));
         $this->assertType('Horde_Injector_Binder_Mock', $injector->getBinder('BOUND_INTERFACE'));
     }
+    
+    public function testShouldProvideMagicFactoryMethodForBinderAdditionWhereBinderHasDependencies()
+    {
+        $injector = new Horde_Injector(new Horde_Injector_TopLevel());
+
+        // binds a Horde_Injector_Binder_Mock object
+        $this->assertType('Horde_Injector_Binder_MockWithDependencies', 
+            $injector->bindMockWithDependencies('BOUND_INTERFACE', 'PARAMETER1'));
+        $this->assertType('Horde_Injector_Binder_MockWithDependencies', 
+            $injector->getBinder('BOUND_INTERFACE'));
+    }
 
     /**
      * @expectedException BadMethodCallException
@@ -241,3 +252,20 @@ class Horde_Injector_Binder_Mock implements Horde_Injector_Binder
         return $otherBinder === $this;
     }
 }
+
+class Horde_Injector_Binder_MockWithDependencies implements Horde_Injector_Binder
+{
+    private $_interface;
+    
+    public function __construct($parameter1) {}
+    
+    public function create(Horde_Injector $injector)
+    {
+        return $injector;
+    }
+
+    public function equals(Horde_Injector_Binder $otherBinder)
+    {
+        return $otherBinder === $this;
+    }
+}