Skip to content

Commit

Permalink
[DependencyInjection] Adding to InvalidArgumentException messages to …
Browse files Browse the repository at this point in the history
…clarify when a service is given an invalid "tags" value.
  • Loading branch information
weaverryan authored and fabpot committed Feb 17, 2011
1 parent a0fc424 commit c5e4dfb
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 0 deletions.
Expand Up @@ -239,7 +239,15 @@ protected function parseDefinition($id, $service, $file)
}

if (isset($service['tags'])) {
if (!is_array($service['tags'])) {
throw new \InvalidArgumentException(sprintf('Parameter "tags" must be an array for service "%s" in %s.', $id, $file));
}

foreach ($service['tags'] as $tag) {
if (!isset($tag['name'])) {
throw new \InvalidArgumentException(sprintf('A "tags" entry is missing a "name" key must be an array for service "%s" in %s.', $id, $file));
}

$name = $tag['name'];
unset($tag['name']);

Expand Down
@@ -0,0 +1,5 @@
services:
foo_service:
class: FooClass
# tags is not an array
tags: string
@@ -0,0 +1,6 @@
services:
foo_service:
class: FooClass
tags:
# tag is missing the name key
foo_tag: { foo: bar }
Expand Up @@ -166,6 +166,30 @@ public function testLoadInterfaceInjectors()
$interface = $interfaces['FooClass'];
$this->assertTrue($interface->hasMethodCall('setBar'), '->load() parses interfaces elements');
}

public function testNonArrayTagThrowsException()
{
$loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator(self::$fixturesPath.'/yaml'));
try {
$loader->load('badtag1.yml');
$this->fail('->load() should throw an exception when the tags key of a service is not an array');
} catch (\Exception $e) {
$this->assertInstanceOf('\InvalidArgumentException', $e, '->load() throws an InvalidArgumentException if the tags key is not an array');
$this->assertStringStartsWith('Parameter "tags" must be an array for service', $e->getMessage(), '->load() throws an InvalidArgumentException if the tags key is not an array');
}
}

public function testTagWithoutNameThrowsException()
{
$loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator(self::$fixturesPath.'/yaml'));
try {
$loader->load('badtag2.yml');
$this->fail('->load() should throw an exception when a tag is missing the name key');
} catch (\Exception $e) {
$this->assertInstanceOf('\InvalidArgumentException', $e, '->load() throws an InvalidArgumentException if a tag is missing the name key');
$this->assertStringStartsWith('A "tags" entry is missing a "name" key must be an array for service ', $e->getMessage(), '->load() throws an InvalidArgumentException if a tag is missing the name key');
}
}
}

class ProjectLoader3 extends YamlFileLoader
Expand Down

0 comments on commit c5e4dfb

Please sign in to comment.