123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- <?php
-
- require_once 'Swift/Tests/SwiftUnitTestCase.php';
- require_once 'Swift/DependencyContainer.php';
-
- class One {
- public $arg1, $arg2;
- public function __construct($arg1 = null, $arg2 = null) {
- $this->arg1 = $arg1;
- $this->arg2 = $arg2;
- }
- }
-
- class Swift_DependencyContainerTest extends Swift_Tests_SwiftUnitTestCase
- {
-
- private $_container;
-
- public function setUp()
- {
- $this->_container = new Swift_DependencyContainer();
- }
-
- public function testRegisterAndLookupValue()
- {
- $this->_container->register('foo')->asValue('bar');
- $this->assertIdentical('bar', $this->_container->lookup('foo'));
- }
-
- public function testHasReturnsTrueForRegisteredValue()
- {
- $this->_container->register('foo')->asValue('bar');
- $this->assertTrue($this->_container->has('foo'));
- }
-
- public function testHasReturnsFalseForUnregisteredValue()
- {
- $this->assertFalse($this->_container->has('foo'));
- }
-
- public function testRegisterAndLookupNewInstance()
- {
- $this->_container->register('one')->asNewInstanceOf('One');
- $this->assertIsA($this->_container->lookup('one'), 'One');
- }
-
- public function testHasReturnsTrueForRegisteredInstance()
- {
- $this->_container->register('one')->asNewInstanceOf('One');
- $this->assertTrue($this->_container->has('one'));
- }
-
- public function testNewInstanceIsAlwaysNew()
- {
- $this->_container->register('one')->asNewInstanceOf('One');
- $a = $this->_container->lookup('one');
- $b = $this->_container->lookup('one');
- $this->assertClone($a, $b);
- }
-
- public function testRegisterAndLookupSharedInstance()
- {
- $this->_container->register('one')->asSharedInstanceOf('One');
- $this->assertIsA($this->_container->lookup('one'), 'One');
- }
-
- public function testHasReturnsTrueForSharedInstance()
- {
- $this->_container->register('one')->asSharedInstanceOf('One');
- $this->assertTrue($this->_container->has('one'));
- }
-
- public function testMultipleSharedInstancesAreSameInstance()
- {
- $this->_container->register('one')->asSharedInstanceOf('One');
- $a = $this->_container->lookup('one');
- $b = $this->_container->lookup('one');
- $this->assertSame($a, $b);
- }
-
- public function testNewInstanceWithDependencies()
- {
- $this->_container->register('foo')->asValue('FOO');
- $this->_container->register('one')->asNewInstanceOf('One')
- ->withDependencies(array('foo'));
- $obj = $this->_container->lookup('one');
- $this->assertIdentical('FOO', $obj->arg1);
- }
-
- public function testNewInstanceWithMultipleDependencies()
- {
- $this->_container->register('foo')->asValue('FOO');
- $this->_container->register('bar')->asValue(42);
- $this->_container->register('one')->asNewInstanceOf('One')
- ->withDependencies(array('foo', 'bar'));
- $obj = $this->_container->lookup('one');
- $this->assertIdentical('FOO', $obj->arg1);
- $this->assertIdentical(42, $obj->arg2);
- }
-
- public function testNewInstanceWithInjectedObjects()
- {
- $this->_container->register('foo')->asValue('FOO');
- $this->_container->register('one')->asNewInstanceOf('One');
- $this->_container->register('two')->asNewInstanceOf('One')
- ->withDependencies(array('one', 'foo'));
- $obj = $this->_container->lookup('two');
- $this->assertClone($this->_container->lookup('one'), $obj->arg1);
- $this->assertIdentical('FOO', $obj->arg2);
- }
-
- public function testNewInstanceWithAddConstructorValue()
- {
- $this->_container->register('one')->asNewInstanceOf('One')
- ->addConstructorValue('x')
- ->addConstructorValue(99);
- $obj = $this->_container->lookup('one');
- $this->assertIdentical('x', $obj->arg1);
- $this->assertIdentical(99, $obj->arg2);
- }
-
- public function testNewInstanceWithAddConstructorLookup()
- {
- $this->_container->register('foo')->asValue('FOO');
- $this->_container->register('bar')->asValue(42);
- $this->_container->register('one')->asNewInstanceOf('One')
- ->addConstructorLookup('foo')
- ->addConstructorLookup('bar');
-
- $obj = $this->_container->lookup('one');
- $this->assertIdentical('FOO', $obj->arg1);
- $this->assertIdentical(42, $obj->arg2);
- }
-
- public function testResolvedDependenciesCanBeLookedUp()
- {
- $this->_container->register('foo')->asValue('FOO');
- $this->_container->register('one')->asNewInstanceOf('One');
- $this->_container->register('two')->asNewInstanceOf('One')
- ->withDependencies(array('one', 'foo'));
- $deps = $this->_container->createDependenciesFor('two');
- $this->assertEqual(
- array($this->_container->lookup('one'), 'FOO'), $deps
- );
- }
-
- public function testArrayOfDependenciesCanBeSpecified()
- {
- $this->_container->register('foo')->asValue('FOO');
- $this->_container->register('one')->asNewInstanceOf('One');
- $this->_container->register('two')->asNewInstanceOf('One')
- ->withDependencies(array(array('one', 'foo'), 'foo'));
-
- $obj = $this->_container->lookup('two');
- $this->assertEqual(array($this->_container->lookup('one'), 'FOO'), $obj->arg1);
- $this->assertIdentical('FOO', $obj->arg2);
- }
-
- public function testAliasCanBeSet()
- {
- $this->_container->register('foo')->asValue('FOO');
- $this->_container->register('bar')->asAliasOf('foo');
-
- $this->assertIdentical('FOO', $this->_container->lookup('bar'));
- }
-
- public function testAliasOfAliasCanBeSet()
- {
- $this->_container->register('foo')->asValue('FOO');
- $this->_container->register('bar')->asAliasOf('foo');
- $this->_container->register('zip')->asAliasOf('bar');
- $this->_container->register('button')->asAliasOf('zip');
-
- $this->assertIdentical('FOO', $this->_container->lookup('button'));
- }
-
- }
|