Esempio n. 1
0
 /**
  * Test all possible service definition types
  *
  * @param string $serviceName
  * @param mixed $definition service definition
  * @param string $className service class name
  * @dataProvider serviceDefinitionsTestProvider
  */
 public function testServiceDefinitions($serviceName, $definition, $className)
 {
     // set service using the standard set() method
     $service1 = $serviceName . 'a';
     self::$di->set($service1, $definition, true);
     // set service using the magic set<ServiceName>() method
     $service2 = $serviceName . 'b';
     $method = 'set' . ucfirst($service2);
     self::$di->{$method}($definition);
     // set service using the attribute notation: $di->service = <definition>;
     $service3 = $serviceName . 'c';
     self::$di->{$service3} = $definition;
     // get services using the standard get() method
     $service1a = self::$di->get($service1);
     $service2a = self::$di->get($service2);
     $service3a = self::$di->get($service3);
     $this->assertTrue(is_a($service1a, $className));
     $this->assertTrue(is_a($service2a, $className));
     $this->assertTrue(is_a($service3a, $className));
     // get services using the magic get<ServiceName>() method
     $method1 = 'get' . ucfirst($service1);
     $method2 = 'get' . ucfirst($service2);
     $method3 = 'get' . ucfirst($service3);
     $service1b = self::$di->{$method1}();
     $service2b = self::$di->{$method2}();
     $service3b = self::$di->{$method3}();
     $this->assertTrue(is_a($service1b, $className));
     $this->assertTrue(is_a($service2b, $className));
     $this->assertTrue(is_a($service3b, $className));
     // service is shared - the same instance should be returned
     $this->assertTrue($service1b === $service1a, $service1 . ': $service1b !== $service1a');
     // get services using the attribute notation: $di->service
     $service1c = self::$di->{$service1};
     $service2c = self::$di->{$service2};
     $service3c = self::$di->{$service3};
     $this->assertTrue(is_a($service1c, $className));
     $this->assertTrue(is_a($service2c, $className));
     $this->assertTrue(is_a($service3c, $className));
     // service is shared - the same instance should be returned
     $this->assertTrue($service1c === $service1a, $service1 . ': $service1c !== $service1a');
 }