/** * @test */ public function The_has_method_returns_true_if_a_service_is_defined_and_false_if_not() { // given $IdentifyingType = Type::fromName('tueena\\spec\\core\\stubs\\IMyService'); $ImplementingType = Type::fromName('tueena\\spec\\core\\stubs\\MyService'); $Target = new ServiceDefinitions(); $Target->add(IdentifyingType::is($IdentifyingType), ImplementingType::is($ImplementingType)); // when, then $this->assertTrue($Target->has(Type::fromName('tueena\\spec\\core\\stubs\\IMyService'))); $this->assertFalse($Target->has(Type::fromName('tueena\\spec\\core\\stubs\\MyService'))); }
/** * @param ServiceDefinition $ServiceDefinition * @param ServiceDefinitions $ServiceDefinitions * @param string $functionType * @param Type $RequiredType * @param string $parameterName */ private static function ensureParameterIsAService(ServiceDefinition $ServiceDefinition, ServiceDefinitions $ServiceDefinitions, $functionType, Type $RequiredType, $parameterName) { if ($ServiceDefinitions->has($RequiredType)) { return; } $functionTypeString = $functionType === 'factory' ? 'a factory function' : 'an init function'; $message = "Invalid parameter \${$parameterName}: "; $message .= $RequiredType->getName() . ' is not defined as a service (means: has not been added to the ServiceDefinitions instance with the add() method). '; $message .= "Each parameter of {$functionTypeString} must have a defined service as type hint."; throw new InvalidServiceDefinition($ServiceDefinition, $message); }