class ParameterBagTest in Service Container 7
Same name and namespace in other branches
- 7.2 modules/providers/service_container_symfony/lib/Symfony/Component/DependencyInjection/Tests/ParameterBag/ParameterBagTest.php \Symfony\Component\DependencyInjection\Tests\ParameterBag\ParameterBagTest
Hierarchy
- class \Symfony\Component\DependencyInjection\Tests\ParameterBag\ParameterBagTest extends \Symfony\Component\DependencyInjection\Tests\ParameterBag\PHPUnit_Framework_TestCase
Expanded class hierarchy of ParameterBagTest
File
- modules/
providers/ service_container_symfony/ lib/ Symfony/ Component/ DependencyInjection/ Tests/ ParameterBag/ ParameterBagTest.php, line 19
Namespace
Symfony\Component\DependencyInjection\Tests\ParameterBagView source
class ParameterBagTest extends \PHPUnit_Framework_TestCase {
/**
* @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag::__construct
*/
public function testConstructor() {
$bag = new ParameterBag($parameters = array(
'foo' => 'foo',
'bar' => 'bar',
));
$this
->assertEquals($parameters, $bag
->all(), '__construct() takes an array of parameters as its first argument');
}
/**
* @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag::clear
*/
public function testClear() {
$bag = new ParameterBag($parameters = array(
'foo' => 'foo',
'bar' => 'bar',
));
$bag
->clear();
$this
->assertEquals(array(), $bag
->all(), '->clear() removes all parameters');
}
/**
* @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag::remove
*/
public function testRemove() {
$bag = new ParameterBag(array(
'foo' => 'foo',
'bar' => 'bar',
));
$bag
->remove('foo');
$this
->assertEquals(array(
'bar' => 'bar',
), $bag
->all(), '->remove() removes a parameter');
$bag
->remove('BAR');
$this
->assertEquals(array(), $bag
->all(), '->remove() converts key to lowercase before removing');
}
/**
* @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag::get
* @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag::set
*/
public function testGetSet() {
$bag = new ParameterBag(array(
'foo' => 'bar',
));
$bag
->set('bar', 'foo');
$this
->assertEquals('foo', $bag
->get('bar'), '->set() sets the value of a new parameter');
$bag
->set('foo', 'baz');
$this
->assertEquals('baz', $bag
->get('foo'), '->set() overrides previously set parameter');
$bag
->set('Foo', 'baz1');
$this
->assertEquals('baz1', $bag
->get('foo'), '->set() converts the key to lowercase');
$this
->assertEquals('baz1', $bag
->get('FOO'), '->get() converts the key to lowercase');
try {
$bag
->get('baba');
$this
->fail('->get() throws an Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException if the key does not exist');
} catch (\Exception $e) {
$this
->assertInstanceOf('Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException', $e, '->get() throws an Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException if the key does not exist');
$this
->assertEquals('You have requested a non-existent parameter "baba".', $e
->getMessage(), '->get() throws an Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException if the key does not exist');
}
}
public function testGetThrowParameterNotFoundException() {
$bag = new ParameterBag(array(
'foo' => 'foo',
'bar' => 'bar',
'baz' => 'baz',
));
try {
$bag
->get('foo1');
$this
->fail('->get() throws an Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException if the key does not exist');
} catch (\Exception $e) {
$this
->assertInstanceOf('Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException', $e, '->get() throws an Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException if the key does not exist');
$this
->assertEquals('You have requested a non-existent parameter "foo1". Did you mean this: "foo"?', $e
->getMessage(), '->get() throws an Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException with some advices');
}
try {
$bag
->get('bag');
$this
->fail('->get() throws an Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException if the key does not exist');
} catch (\Exception $e) {
$this
->assertInstanceOf('Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException', $e, '->get() throws an Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException if the key does not exist');
$this
->assertEquals('You have requested a non-existent parameter "bag". Did you mean one of these: "bar", "baz"?', $e
->getMessage(), '->get() throws an Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException with some advices');
}
try {
$bag
->get('');
$this
->fail('->get() throws an Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException if the key does not exist');
} catch (\Exception $e) {
$this
->assertInstanceOf('Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException', $e, '->get() throws an Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException if the key does not exist');
$this
->assertEquals('You have requested a non-existent parameter "".', $e
->getMessage(), '->get() throws an Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException with some advices');
}
}
/**
* @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag::has
*/
public function testHas() {
$bag = new ParameterBag(array(
'foo' => 'bar',
));
$this
->assertTrue($bag
->has('foo'), '->has() returns true if a parameter is defined');
$this
->assertTrue($bag
->has('Foo'), '->has() converts the key to lowercase');
$this
->assertFalse($bag
->has('bar'), '->has() returns false if a parameter is not defined');
}
/**
* @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag::resolveValue
*/
public function testResolveValue() {
$bag = new ParameterBag(array());
$this
->assertEquals('foo', $bag
->resolveValue('foo'), '->resolveValue() returns its argument unmodified if no placeholders are found');
$bag = new ParameterBag(array(
'foo' => 'bar',
));
$this
->assertEquals('I\'m a bar', $bag
->resolveValue('I\'m a %foo%'), '->resolveValue() replaces placeholders by their values');
$this
->assertEquals(array(
'bar' => 'bar',
), $bag
->resolveValue(array(
'%foo%' => '%foo%',
)), '->resolveValue() replaces placeholders in keys and values of arrays');
$this
->assertEquals(array(
'bar' => array(
'bar' => array(
'bar' => 'bar',
),
),
), $bag
->resolveValue(array(
'%foo%' => array(
'%foo%' => array(
'%foo%' => '%foo%',
),
),
)), '->resolveValue() replaces placeholders in nested arrays');
$this
->assertEquals('I\'m a %%foo%%', $bag
->resolveValue('I\'m a %%foo%%'), '->resolveValue() supports % escaping by doubling it');
$this
->assertEquals('I\'m a bar %%foo bar', $bag
->resolveValue('I\'m a %foo% %%foo %foo%'), '->resolveValue() supports % escaping by doubling it');
$this
->assertEquals(array(
'foo' => array(
'bar' => array(
'ding' => 'I\'m a bar %%foo %%bar',
),
),
), $bag
->resolveValue(array(
'foo' => array(
'bar' => array(
'ding' => 'I\'m a bar %%foo %%bar',
),
),
)), '->resolveValue() supports % escaping by doubling it');
$bag = new ParameterBag(array(
'foo' => true,
));
$this
->assertTrue($bag
->resolveValue('%foo%'), '->resolveValue() replaces arguments that are just a placeholder by their value without casting them to strings');
$bag = new ParameterBag(array(
'foo' => null,
));
$this
->assertNull($bag
->resolveValue('%foo%'), '->resolveValue() replaces arguments that are just a placeholder by their value without casting them to strings');
$bag = new ParameterBag(array(
'foo' => 'bar',
'baz' => '%%%foo% %foo%%% %%foo%% %%%foo%%%',
));
$this
->assertEquals('%%bar bar%% %%foo%% %%bar%%', $bag
->resolveValue('%baz%'), '->resolveValue() replaces params placed besides escaped %');
$bag = new ParameterBag(array(
'baz' => '%%s?%%s',
));
$this
->assertEquals('%%s?%%s', $bag
->resolveValue('%baz%'), '->resolveValue() is not replacing greedily');
$bag = new ParameterBag(array());
try {
$bag
->resolveValue('%foobar%');
$this
->fail('->resolveValue() throws an InvalidArgumentException if a placeholder references a non-existent parameter');
} catch (ParameterNotFoundException $e) {
$this
->assertEquals('You have requested a non-existent parameter "foobar".', $e
->getMessage(), '->resolveValue() throws a ParameterNotFoundException if a placeholder references a non-existent parameter');
}
try {
$bag
->resolveValue('foo %foobar% bar');
$this
->fail('->resolveValue() throws a ParameterNotFoundException if a placeholder references a non-existent parameter');
} catch (ParameterNotFoundException $e) {
$this
->assertEquals('You have requested a non-existent parameter "foobar".', $e
->getMessage(), '->resolveValue() throws a ParameterNotFoundException if a placeholder references a non-existent parameter');
}
$bag = new ParameterBag(array(
'foo' => 'a %bar%',
'bar' => array(),
));
try {
$bag
->resolveValue('%foo%');
$this
->fail('->resolveValue() throws a RuntimeException when a parameter embeds another non-string parameter');
} catch (RuntimeException $e) {
$this
->assertEquals('A string value must be composed of strings and/or numbers, but found parameter "bar" of type array inside string value "a %bar%".', $e
->getMessage(), '->resolveValue() throws a RuntimeException when a parameter embeds another non-string parameter');
}
$bag = new ParameterBag(array(
'foo' => '%bar%',
'bar' => '%foobar%',
'foobar' => '%foo%',
));
try {
$bag
->resolveValue('%foo%');
$this
->fail('->resolveValue() throws a ParameterCircularReferenceException when a parameter has a circular reference');
} catch (ParameterCircularReferenceException $e) {
$this
->assertEquals('Circular reference detected for parameter "foo" ("foo" > "bar" > "foobar" > "foo").', $e
->getMessage(), '->resolveValue() throws a ParameterCircularReferenceException when a parameter has a circular reference');
}
$bag = new ParameterBag(array(
'foo' => 'a %bar%',
'bar' => 'a %foobar%',
'foobar' => 'a %foo%',
));
try {
$bag
->resolveValue('%foo%');
$this
->fail('->resolveValue() throws a ParameterCircularReferenceException when a parameter has a circular reference');
} catch (ParameterCircularReferenceException $e) {
$this
->assertEquals('Circular reference detected for parameter "foo" ("foo" > "bar" > "foobar" > "foo").', $e
->getMessage(), '->resolveValue() throws a ParameterCircularReferenceException when a parameter has a circular reference');
}
$bag = new ParameterBag(array(
'host' => 'foo.bar',
'port' => 1337,
));
$this
->assertEquals('foo.bar:1337', $bag
->resolveValue('%host%:%port%'));
}
/**
* @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag::resolve
*/
public function testResolveIndicatesWhyAParameterIsNeeded() {
$bag = new ParameterBag(array(
'foo' => '%bar%',
));
try {
$bag
->resolve();
} catch (ParameterNotFoundException $e) {
$this
->assertEquals('The parameter "foo" has a dependency on a non-existent parameter "bar".', $e
->getMessage());
}
$bag = new ParameterBag(array(
'foo' => '%bar%',
));
try {
$bag
->resolve();
} catch (ParameterNotFoundException $e) {
$this
->assertEquals('The parameter "foo" has a dependency on a non-existent parameter "bar".', $e
->getMessage());
}
}
/**
* @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag::resolve
*/
public function testResolveUnescapesValue() {
$bag = new ParameterBag(array(
'foo' => array(
'bar' => array(
'ding' => 'I\'m a bar %%foo %%bar',
),
),
'bar' => 'I\'m a %%foo%%',
));
$bag
->resolve();
$this
->assertEquals('I\'m a %foo%', $bag
->get('bar'), '->resolveValue() supports % escaping by doubling it');
$this
->assertEquals(array(
'bar' => array(
'ding' => 'I\'m a bar %foo %bar',
),
), $bag
->get('foo'), '->resolveValue() supports % escaping by doubling it');
}
/**
* @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag::escapeValue
*/
public function testEscapeValue() {
$bag = new ParameterBag();
$bag
->add(array(
'foo' => $bag
->escapeValue(array(
'bar' => array(
'ding' => 'I\'m a bar %foo %bar',
'zero' => null,
),
)),
'bar' => $bag
->escapeValue('I\'m a %foo%'),
));
$this
->assertEquals('I\'m a %%foo%%', $bag
->get('bar'), '->escapeValue() escapes % by doubling it');
$this
->assertEquals(array(
'bar' => array(
'ding' => 'I\'m a bar %%foo %%bar',
'zero' => null,
),
), $bag
->get('foo'), '->escapeValue() escapes % by doubling it');
}
/**
* @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag::resolve
* @dataProvider stringsWithSpacesProvider
*/
public function testResolveStringWithSpacesReturnsString($expected, $test, $description) {
$bag = new ParameterBag(array(
'foo' => 'bar',
));
try {
$this
->assertEquals($expected, $bag
->resolveString($test), $description);
} catch (ParameterNotFoundException $e) {
$this
->fail(sprintf('%s - "%s"', $description, $expected));
}
}
public function stringsWithSpacesProvider() {
return array(
array(
'bar',
'%foo%',
'Parameters must be wrapped by %.',
),
array(
'% foo %',
'% foo %',
'Parameters should not have spaces.',
),
array(
'{% set my_template = "foo" %}',
'{% set my_template = "foo" %}',
'Twig-like strings are not parameters.',
),
array(
'50% is less than 100%',
'50% is less than 100%',
'Text between % signs is allowed, if there are spaces.',
),
);
}
}