View source
<?php
namespace Drupal\little_helpers\Services;
use Upal\DrupalUnitTestCase;
class ContainerTest extends DrupalUnitTestCase {
public function testStringSpec() {
$class_a = get_class($this
->createMock('stdclass'));
$specs['a'] = $class_a;
$container = new Container();
$container
->setSpecs($specs);
$a = $container
->loadService('a');
$this
->assertInstanceOf($class_a, $a);
}
public function testConstructorArgs() {
$specs['a'] = [
'class' => \SplFixedArray::class,
'arguments' => [
1,
],
];
$container = new Container();
$container
->setSpecs($specs);
$a = $container
->loadService('a');
$this
->assertEqual(1, $a
->getSize());
}
public function testConstructorMethod() {
$specs['a'] = [
'class' => \SplFixedArray::class,
'constructor' => 'fromArray',
'arguments' => [
[
1,
2,
3,
],
],
];
$container = new Container();
$container
->setSpecs($specs);
$a = $container
->loadService('a');
$this
->assertEqual([
1,
2,
3,
], $a
->toArray());
}
public function testCalls() {
$specs['a'] = [
'class' => \SplFixedArray::class,
'arguments' => [
2,
],
'calls' => [
[
'offsetSet',
[
0,
1,
],
],
[
'offsetSet',
[
1,
2,
],
],
],
];
$container = new Container();
$container
->setSpecs($specs);
$a = $container
->loadService('a');
$this
->assertEqual([
1,
2,
], $a
->toArray());
}
public function testServiceResolvingInCalls() {
$specs['a'] = [
'class' => \SplFixedArray::class,
'constructor' => 'fromArray',
'arguments' => [
[
1,
2,
3,
],
],
];
$specs['nested_a'] = [
'class' => \SplFixedArray::class,
'arguments' => [
1,
],
'calls' => [
[
'offsetSet',
[
0,
'@a',
],
],
],
];
$container = new Container();
$container
->setSpecs($specs);
$a = $container
->loadService('nested_a');
$this
->assertEqual([
\SplFixedArray::fromArray([
1,
2,
3,
]),
], $a
->toArray());
}
public function testUnknownServiceException() {
$container = new Container();
$this
->expectException(UnknownServiceException::class);
$container
->loadService('unknown');
}
public function testUnknownService() {
$container = new Container();
$this
->assertFalse($container
->loadService('unknown', FALSE));
}
public function testInjection() {
$container = new Container();
$container
->inject('foo', 'bar');
$this
->assertEqual('bar', $container
->loadService('foo'));
}
public function testGettingContainerAsService() {
$container = new Container();
$this
->assertSame($container, $container
->loadService('container'));
}
public function testLoadWithKwargs() {
$container = new Container();
$container
->setSpecs([
'fixed_array' => [
'class' => \SplFixedArray::class,
'constructor' => 'fromArray',
'arguments' => [
'%initial',
],
],
]);
$a = $container
->getSpec('fixed_array')
->instantiate([
'initial' => [
1,
2,
3,
],
]);
$this
->assertEqual([
1,
2,
3,
], $a
->toArray());
}
public function testLoadWithVariables() {
$container = new Container();
$container
->setSpecs([
'fixed_array' => [
'class' => \SplFixedArray::class,
'constructor' => 'fromArray',
'arguments' => [
'!initial',
],
],
]);
$GLOBALS['conf']['initial'] = [
1,
2,
3,
];
$a = $container
->getSpec('fixed_array')
->instantiate();
$this
->assertEqual([
1,
2,
3,
], $a
->toArray());
}
public function testSetContainer() {
$container = new Container();
$container
->inject('foo', 'bar');
$container2 = new Container();
$container2
->setSpecs([
'queue' => [
'class' => \SplStack::class,
'calls' => [
[
'push',
[
'@foo',
],
],
],
],
]);
$container2
->setContainer($container);
$q = $container2
->loadService('queue');
$this
->assertEqual('bar', $q
->top());
}
public function testSetSpecsOverwrites() {
$container = new Container();
$specs1['x'] = [
'class' => \SplStack::class,
'calls' => [
[
'push',
[
'foo',
],
],
],
];
$specs1['y'] = [
'class' => \SplStack::class,
'calls' => [
[
'push',
[
'baz',
],
],
],
];
$container
->setSpecs($specs1);
$specs2['x'] = [
'class' => \SplStack::class,
'calls' => [
[
'push',
[
'bar',
],
],
],
];
$container
->setSpecs($specs2);
$this
->assertEqual('bar', $container
->loadService('x')
->top());
$this
->assertEqual('baz', $container
->loadService('y')
->top());
}
public function testDefaults() {
$defaults = [
'class' => \SplStack::class,
'calls' => [
[
'push',
[
'bar',
],
],
],
];
$container = new Container();
$container
->setDefaults($defaults);
$container
->setSpecs([
'queue' => [],
]);
$q = $container
->loadService('queue');
$this
->assertEqual('bar', $q
->top());
}
}