<?php
/**
* Test: NetteDIContainerBuilder.
*
* @author David Grudl
* @package NetteDI
* @subpackage UnitTests
*/
use NetteDI;
require __DIR__ . '/../bootstrap.php';
class Service
{
public $args;
public $methods;
static function create
(DIIContainer
$container =
null)
{
return new self($args);
}
function __construct()
{
}
function __call($nm, $args)
{
$this->
methods[] =
array($nm,
$args);
}
}
$builder = new DIContainerBuilder;
$builder->
parameters =
array(
'serviceClass' => 'Service',
'arg1' => 'a',
'tag' => 'attrs',
);
$builder->addDefinition('one')
->
setClass('%serviceClass%',
array('%arg1%',
'b'))
->
addSetup('methodA',
array('%arg1%',
'b'));
$builder->addDefinition('two')
->
setFactory('%serviceClass%::create',
array('@container',
'%arg1%',
'@one'));
$builder->addDefinition('three')
->
setFactory(array('%serviceClass%',
'create'));
$code = (string) $builder->generateClass();
file_put_contents(TEMP_DIR . '/code.php', "<?phpn$code");
require TEMP_DIR . '/code.php';
$container = new Container;
assert::
true( $container->
getService('one') instanceof Service
);
assert::
same( array('a',
'b'),
$container->
getService('one')->
args );
assert::
true( $container->
getService('two') instanceof Service
);
assert::
equal( array(array(1 =>
'a',
$container->
getService('one'))),
$container->
getService('two')->
args );
assert::
true( $container->
getService('three') instanceof Service
);