/** * @test */ public function injectWithProviderClass() { $binder = new Binder(); $binder->bind(Answer::class)->toProviderClass(new \ReflectionClass(MyProviderClass::class)); $question = $binder->getInjector()->getInstance(AnotherQuestion::class); assert($question->getAnswer(), isInstanceOf(Answer::class)); }
/** * @test */ public function classAnnotatedWithSingletonWillOnlyBeCreatedOnce() { $binder = new Binder(); $binder->bind(Number::class)->to(RandomSingleton::class); $slot = $binder->getInjector()->getInstance(SlotMachine::class); assert($slot->number1, isInstanceOf(RandomSingleton::class)->and(isSameAs($slot->number2))); }
/** * @test */ public function injectWithClosure() { $binder = new Binder(); $answer = new Answer(); $binder->bind(Answer::class)->toClosure(function () use($answer) { return $answer; }); $question = $binder->getInjector()->getInstance(AnotherQuestion::class); assert($question, isInstanceOf(AnotherQuestion::class)); assert($question->getAnswer(), isSameAs($answer)); }
/** * @test */ public function explicitBindingOverwritesProvidedByAnnotation() { $binder = new Binder(); $binder->bind(Person2::class)->to(Mikey::class); assert($binder->getInjector()->getInstance(Person2::class), isInstanceOf(Mikey::class)); }
/** * @test * @since 4.1.3 */ public function propertyBindingUsedWhenParamHasTypeHintButIsAnnotated() { try { $binder = new Binder(); $properties = new Properties(['config' => ['example.password' => 'somePassword']]); $binder->bindProperties($properties, 'PROD'); $example = $binder->getInjector()->getInstance(Example::class); assert($example->password, isInstanceOf(Secret::class)); } finally { // ensure all references are removed to clean up environment unset($properties); $example->password = null; unset($example); unset($binder); gc_collect_cycles(); } }
/** * @since 3.1.0 * @test */ public function functionShortcut() { assert(\stubbles\peer\http('http://example.net/'), isInstanceOf(HttpConnection::class)); }
/** * @test * @since 6.0.0 */ public function usesImplementationSpecifiedForMode() { $binder = new Binder(); assert($binder->setEnvironment('DEV')->getInjector()->getInstance(Person3::class), isInstanceOf(Mikey::class)); }
/** * @test */ public function createOutputStream() { assert($this->memoryStreamFactory->createOutputStream('buffer'), isInstanceOf(MemoryOutputStream::class)); }
/** * @test */ public function registerErrorHandlerWithClassNameReturnsCreatedInstance() { $errorHandlerClass = NewInstance::classname(ErrorHandler::class); assert($this->environment->useErrorHandler($errorHandlerClass)->registerErrorHandler('/tmp'), isInstanceOf($errorHandlerClass)); }
/** * @test * @since 8.0.0 */ public function castFromStringCreatesFileInputStream() { assert(FileInputStream::castFrom(vfsStream::url('home/test.txt')), isInstanceOf(FileInputStream::class)); }
/** * @test */ public function createsSingletonScopeIfNonePassed() { $bindingScopes = new BindingScopes(); assert($bindingScopes->singleton(), isInstanceOf(SingletonBindingScope::class)); }
/** * @test * @since 5.4.0 */ public function requestSessionScopedWithSessionReturnsInstance() { $session = NewInstance::of(Session::class)->mapCalls(['hasValue' => false]); assert($this->injector->setSession($session)->getInstance(Person2::class), isInstanceOf(Mikey::class)); }
/** * @since 2.0.0 * @test */ public function canCreateRuntime() { assert(AppUsingBindingModule::callBindRuntime(), isInstanceOf(Runtime::class)); }
/** * @since 2.0.0 * @test */ public function optionalConstructorInjection() { $injector = Binder::createInjector(); $bike = $injector->getInstance(BikeWithOptionalTire::class); assert($bike->tire, isInstanceOf(Goodyear::class)); }
/** * @test * @since 4.0.0 */ public function ensureCallableWrapsInternalFunction() { assert(ensureCallable('strlen'), isInstanceOf(\Closure::class)); }