/** * 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'); }