public function testCreateDefinition()
 {
     $definition = new Definition('Demo', array(new Reference('service_id')));
     $definition->addArgument('welcome')->setProperty('message', 'Hello world')->addMethodCall('setMessage', array('Just Hello'))->setAbstract('DemoInterface')->share();
     $this->assertEquals('Demo', $definition->getClass());
     $this->assertCount(2, $definition->getArgument()->all());
     $this->assertInstanceOf('\\Borobudur\\DependencyInjection\\Reference', $definition->getArgument()->get(0));
     $this->assertCount(1, $definition->getProperty()->all());
     $this->assertEquals('Hello world', $definition->getProperty()->get('message'));
     $this->assertCount(1, $definition->getMethodCall()->all());
     $this->assertSame(array('setMessage', array('Just Hello')), $definition->getMethodCall()->get(0));
     $this->assertTrue($definition->isAbstract());
     $this->assertEquals('DemoInterface', $definition->getAbstract());
     $this->assertTrue($definition->isShared());
 }
 /**
  * Add tags on definition.
  *
  * @param Definition $definition
  * @param string     $id
  * @param array      $service
  */
 private function addDefinitionTagsFromArray(Definition &$definition, $id, array $service)
 {
     if ($this->isArrayServiceHasTags($service)) {
         foreach ($service['tags'] as $tag) {
             if (!isset($tag['name'])) {
                 throw new InvalidArgumentException(sprintf('Undefined tag name on service "%s"', $id));
             }
             $name = $tag['name'];
             unset($tag['name']);
             $definition->addTag($name, $tag);
         }
     }
 }
 /**
  * Constructor.
  *
  * @param string $class
  * @param string $abstract
  * @param array  $arguments
  */
 public function __construct($class, $abstract, array $arguments = array())
 {
     parent::__construct($class, $arguments);
     $this->setAbstract($abstract);
 }
 /**
  * Register abstract definition if possible.
  *
  * @param string     $id
  * @param Definition $definition
  */
 private function setAlias($id, Definition $definition)
 {
     if ($definition->isAbstract()) {
         $class = $definition->getAbstract();
     } else {
         $class = $definition->getClass();
     }
     $class = '\\' . ltrim($class, '\\');
     $this->aliases[$class][] = $id;
     $this->lockAlias[$id] = true;
 }