Yii2 framework backup
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
3.0 KiB

11 years ago
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yiiunit\framework\di;
use yii\di\Container;
11 years ago
use yii\di\Instance;
use yiiunit\framework\di\stubs\Bar;
use yiiunit\framework\di\stubs\Foo;
use yiiunit\framework\di\stubs\Qux;
11 years ago
use yiiunit\TestCase;
/**
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class ContainerTest extends TestCase
{
public function testDefault()
{
11 years ago
$namespace = __NAMESPACE__ . '\stubs';
$QuxInterface = "$namespace\\QuxInterface";
$Foo = Foo::className();
$Bar = Bar::className();
$Qux = Qux::className();
11 years ago
11 years ago
// automatic wiring
11 years ago
$container = new Container;
11 years ago
$container->set($QuxInterface, $Qux);
$foo = $container->get($Foo);
$this->assertTrue($foo instanceof $Foo);
$this->assertTrue($foo->bar instanceof $Bar);
$this->assertTrue($foo->bar->qux instanceof $Qux);
$foo2 = $container->get($Foo);
$this->assertFalse($foo === $foo2);
11 years ago
11 years ago
// full wiring
11 years ago
$container = new Container;
11 years ago
$container->set($QuxInterface, $Qux);
$container->set($Bar);
$container->set($Qux);
$container->set($Foo);
$foo = $container->get($Foo);
$this->assertTrue($foo instanceof $Foo);
$this->assertTrue($foo->bar instanceof $Bar);
$this->assertTrue($foo->bar->qux instanceof $Qux);
11 years ago
11 years ago
// wiring by closure
11 years ago
$container = new Container;
11 years ago
$container->set('foo', function () {
$qux = new Qux;
$bar = new Bar($qux);
return new Foo($bar);
});
$foo = $container->get('foo');
$this->assertTrue($foo instanceof $Foo);
$this->assertTrue($foo->bar instanceof $Bar);
$this->assertTrue($foo->bar->qux instanceof $Qux);
11 years ago
11 years ago
// wiring by closure which uses container
11 years ago
$container = new Container;
11 years ago
$container->set($QuxInterface, $Qux);
$container->set('foo', function (Container $c, $params, $config) {
11 years ago
return $c->get(Foo::className());
});
$foo = $container->get('foo');
$this->assertTrue($foo instanceof $Foo);
$this->assertTrue($foo->bar instanceof $Bar);
$this->assertTrue($foo->bar->qux instanceof $Qux);
11 years ago
11 years ago
// predefined constructor parameters
11 years ago
$container = new Container;
11 years ago
$container->set('foo', $Foo, [Instance::of('bar')]);
$container->set('bar', $Bar, [Instance::of('qux')]);
$container->set('qux', $Qux);
$foo = $container->get('foo');
$this->assertTrue($foo instanceof $Foo);
$this->assertTrue($foo->bar instanceof $Bar);
$this->assertTrue($foo->bar->qux instanceof $Qux);
// wiring by closure
$container = new Container;
$container->set('qux', new Qux);
$qux1 = $container->get('qux');
$qux2 = $container->get('qux');
$this->assertTrue($qux1 === $qux2);
11 years ago
}
}