@Override public <T> T getInstance(Class<T> clazz) { return getInstance(clazz, null); }
@Test(expected = IllegalStateException.class) public void getInstance_shouldFail_whenScopeIsClosed() { //GIVEN ScopeImpl scope = new ScopeImpl(""); //WHEN scope.close(); scope.getInstance(Foo.class); //THEN }
@Test public void reset_shouldRebindScope() throws Exception { //GIVEN ScopeImpl scope = new ScopeImpl("root"); //WHEN scope.reset(); //THEN assertThat(scope.getInstance(Scope.class), notNullValue()); }
@Test public void installOverrideModules_shouldNotOverrideOtherBindings() { //GIVEN Foo testFoo = new Foo(); ScopeImpl scope = new ScopeImpl(""); scope.installTestModules(new TestModule(testFoo)); scope.installModules(new ProdModule2()); //WHEN Foo fooInstance = scope.getInstance(Foo.class); Bar barInstance = scope.getInstance(Bar.class); //THEN assertThat(fooInstance, sameInstance(testFoo)); assertThat(barInstance, notNullValue()); }
@Test public void installOverrideModules_shouldNotInstallOverrideBindings_whenCalledWithoutTestModules() { //GIVEN ScopeImpl scope = new ScopeImpl(""); scope.installTestModules(); scope.installModules(new ProdModule()); //WHEN Foo instance = scope.getInstance(Foo.class); //THEN assertThat(instance, notNullValue()); }
@Override public <T> T getInstance(Class<T> clazz) { return getInstance(clazz, null); }
@Test(expected = NoFactoryFoundException.class) public void reset_shouldResetBoundProviders_andFlagTheTestModuleToFalse() throws Exception { //GIVEN ScopeImpl scope = new ScopeImpl("root"); scope.installTestModules(new Module() { { bind(IFoo.class).to(Foo.class); } }); //WHEN scope.reset(); //THEN scope.installTestModules(); // Should not crash scope.getInstance(IFoo.class); // Should crash as we don't have the binding for IFoo anymore }
@Test public void testToString() { //GIVEN ScopeImpl scope = new ScopeImpl("root"); scope.installModules(new TestModule1()); ScopeImpl childScope = new ScopeImpl("child"); scope.addChild(childScope); //WHEN childScope.getInstance(Bar.class); String dump = scope.toString(); //THEN Pattern expected = Pattern.compile("root:\\d+.*" + "Providers: \\[toothpick.Scope,toothpick.data.Foo\\].*" + "\\\\---child:\\d+.*" + "Providers:.*\\[toothpick.Scope\\].*" + "Unbound providers: \\[toothpick.data.Bar\\].*", Pattern.DOTALL); assertThat(dump, MatchesPattern.matchesPattern(expected)); }
@Test public void installTestModules_shouldOverrideBindings_whenInstalledAfterProductionModules() { //GIVEN Foo testFoo = new Foo(); ScopeImpl scope = new ScopeImpl(""); scope.installModules(new ProdModule()); scope.installTestModules(new TestModule(testFoo)); //WHEN Foo instance = scope.getInstance(Foo.class); //THEN assertThat(instance, sameInstance(testFoo)); }
@Test public void installOverrideModules_shouldInstallOverrideBindings_whenCalledOnce() { //GIVEN Foo testFoo = new Foo(); ScopeImpl scope = new ScopeImpl(""); scope.installTestModules(new TestModule(testFoo)); scope.installModules(new ProdModule()); //WHEN Foo instance = scope.getInstance(Foo.class); //THEN assertThat(instance, sameInstance(testFoo)); }