<?php
/**
* Test: NetteDIContainerBuilder and Container: getByClass()
*
* @author David Grudl
* @package NetteDI
* @subpackage UnitTests
*/
use NetteDI;
require __DIR__ . '/../bootstrap.php';
class Service extends NetteObject
{
}
$builder = new DIContainerBuilder;
$builder->addDefinition('one')
->setClass('Service');
$builder->addDefinition('two')
->setClass('NetteObject');
// compile-time
$builder->prepareClassList();
assert::
same( 'one',
$builder->
getByClass('service') );
assert::
same( null,
$builder->
getByClass('unknown') );
assert::
throws(function() use
($builder) {
$builder->getByClass('NetteObject');
}, 'NetteDIServiceCreationException', 'Multiple preferred services of type NetteObject found: one, two, container');
// run-time
$code = (string) $builder->generateClass();
file_put_contents(TEMP_DIR . '/code.php', "<?phpn$code");
require TEMP_DIR . '/code.php';
$container = new Container;
assert::
true( $container->
getByClass('service') instanceof Service
);
assert::
same( null,
$container->
getByClass('unknown',
false) );
assert::
throws(function() use
($container) {
$container->getByClass('unknown');
}, 'NetteDIMissingServiceException', 'Service of type unknown not found.');
assert::
throws(function() use
($container) {
$container->getByClass('NetteObject');
}, 'NetteDIMissingServiceException', 'Multiple services of type NetteObject found.');