$builder->register('baz', 'stdClass')->setArguments(array(new sfServiceReference('baz'))); try { @$builder->getService('baz'); $t->fail('->getService() throws a LogicException if the service has a circular reference to itself'); } catch (LogicException $e) { $t->pass('->getService() throws a LogicException if the service has a circular reference to itself'); } $builder->register('foobar', 'stdClass')->setShared(true); $t->ok($builder->getService('bar') === $builder->getService('bar'), '->getService() always returns the same instance if the service is shared'); // ->getServiceIds() $t->diag('->getServiceIds()'); $builder = new sfServiceContainerBuilder(); $builder->register('foo', 'stdClass'); $builder->bar = $bar = new stdClass(); $builder->register('bar', 'stdClass'); $t->is($builder->getServiceIds(), array('foo', 'bar', 'service_container'), '->getServiceIds() returns all defined service ids'); // ->createService() # file $t->diag('->createService() # file'); $builder = new sfServiceContainerBuilder(); $builder->register('foo1', 'FooClass')->setFile(dirname(__FILE__) . '/fixtures/includes/foo.php'); $t->ok($builder->getService('foo1'), '->createService() requires the file defined by the service definition'); $builder->register('foo2', 'FooClass')->setFile(dirname(__FILE__) . '/fixtures/includes/%file%.php'); $builder->setParameter('file', 'foo'); $t->ok($builder->getService('foo2'), '->createService() replaces parameters in the file provided by the service definition'); // ->createService() # class $t->diag('->createService() # class'); $builder = new sfServiceContainerBuilder(); $builder->register('foo1', '%class%'); $builder->setParameter('class', 'stdClass'); $t->ok($builder->getService('foo1') instanceof stdClass, '->createService() replaces parameters in the class provided by the service definition'); // ->createService() # arguments