From 9dae979d39290dc23d44caaf577dec0a94b08f80 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Fri, 26 May 2017 14:22:25 +0100 Subject: [PATCH] Add some tests --- .../guice/injector/SpringInjector.java | 2 +- .../guice/InjectorFactoryTests.java | 75 +++++++------ .../guice/injector/SpringInjectorTests.java | 102 ++++++++++++++++++ 3 files changed, 143 insertions(+), 36 deletions(-) create mode 100644 src/test/java/org/springframework/guice/injector/SpringInjectorTests.java diff --git a/src/main/java/org/springframework/guice/injector/SpringInjector.java b/src/main/java/org/springframework/guice/injector/SpringInjector.java index faf3838..0500f80 100644 --- a/src/main/java/org/springframework/guice/injector/SpringInjector.java +++ b/src/main/java/org/springframework/guice/injector/SpringInjector.java @@ -97,7 +97,7 @@ public class SpringInjector implements Injector { @Override public Provider getProvider(Key key) { - // TODO: support for other metadata in the key + // TODO: support for other metadata in the key (apart from name and type) Class type = key.getTypeLiteral().getRawType(); final String name = extractName(key); if (this.beanFactory.getBeanNamesForType(type, true, false).length==0) { diff --git a/src/test/java/org/springframework/guice/InjectorFactoryTests.java b/src/test/java/org/springframework/guice/InjectorFactoryTests.java index f907d77..ef9b29a 100644 --- a/src/test/java/org/springframework/guice/InjectorFactoryTests.java +++ b/src/test/java/org/springframework/guice/InjectorFactoryTests.java @@ -13,39 +13,44 @@ import org.springframework.guice.injector.InjectorFactory; import com.google.inject.Guice; import com.google.inject.Module; -public class InjectorFactoryTests { - - static final private InjectorFactory injectorFactory = Mockito.mock(InjectorFactory.class); - - @Before - public void init() { - Mockito.when(injectorFactory.createInjector(Mockito.anyList())).thenReturn(Guice.createInjector()); - } - - @Test - public void testCustomInjectorIsCreated() { - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(InjectorFactoryConfig.class, ModuleRegistryConfiguration.class); - Mockito.verify(injectorFactory, Mockito.times(1)).createInjector(Mockito.anyList()); - } - - @Test(expected=ApplicationContextException.class) - public void testMultipleInjectorFactoriesThrowsApplicationContextException() { - AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(InjectorFactoryConfig.class, SecondInjectorFactoryConfig.class, ModuleRegistryConfiguration.class); - } - - @Configuration - static class InjectorFactoryConfig { - @Bean - public InjectorFactory injectorFactory() { - return injectorFactory; - } - } - - @Configuration - static class SecondInjectorFactoryConfig { - @Bean - public InjectorFactory injectorFactory2() { - return injectorFactory; - } - } +public class InjectorFactoryTests { + + static final private InjectorFactory injectorFactory = Mockito.mock(InjectorFactory.class); + + @Before + public void init() { + Mockito.when(injectorFactory.createInjector(Mockito.anyListOf(Module.class))) + .thenReturn(Guice.createInjector()); + } + + @Test + public void testCustomInjectorIsCreated() { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(InjectorFactoryConfig.class, + ModuleRegistryConfiguration.class); + Mockito.verify(injectorFactory, Mockito.times(1)).createInjector(Mockito.anyListOf(Module.class)); + context.close(); + } + + @Test(expected = ApplicationContextException.class) + public void testMultipleInjectorFactoriesThrowsApplicationContextException() { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(InjectorFactoryConfig.class, + SecondInjectorFactoryConfig.class, ModuleRegistryConfiguration.class); + context.close(); + } + + @Configuration + static class InjectorFactoryConfig { + @Bean + public InjectorFactory injectorFactory() { + return injectorFactory; + } + } + + @Configuration + static class SecondInjectorFactoryConfig { + @Bean + public InjectorFactory injectorFactory2() { + return injectorFactory; + } + } } \ No newline at end of file diff --git a/src/test/java/org/springframework/guice/injector/SpringInjectorTests.java b/src/test/java/org/springframework/guice/injector/SpringInjectorTests.java new file mode 100644 index 0000000..1e668f1 --- /dev/null +++ b/src/test/java/org/springframework/guice/injector/SpringInjectorTests.java @@ -0,0 +1,102 @@ +/* + * Copyright 2013-2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.springframework.guice.injector; + +import static org.junit.Assert.assertNotNull; + +import org.junit.After; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.springframework.beans.factory.NoUniqueBeanDefinitionException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.guice.AbstractCompleteWiringTests.Baz; +import org.springframework.guice.AbstractCompleteWiringTests.MyService; +import org.springframework.guice.AbstractCompleteWiringTests.Service; + +import com.google.inject.Key; +import com.google.inject.name.Names; + +public class SpringInjectorTests { + + @Rule + public ExpectedException expected = ExpectedException.none(); + + private SpringInjector injector = new SpringInjector(create()); + + private AnnotationConfigApplicationContext context; + + @After + public void close() { + if (context!=null) { + context.close(); + } + } + + @Test + public void instance() { + assertNotNull(injector.getInstance(Service.class)); + } + + @Test + public void multiple() { + injector = new SpringInjector(create(Additional.class)); + expected.expect(NoUniqueBeanDefinitionException.class); + assertNotNull(injector.getInstance(Service.class)); + } + + @Test + public void named() { + injector = new SpringInjector(create(Additional.class)); + assertNotNull(injector.getInstance(Key.get(Service.class, Names.named("service")))); + } + + @Test + public void provider() { + assertNotNull(injector.getProvider(Service.class).get()); + } + + @Test + public void bindNewObject() { + assertNotNull(injector.getInstance(Baz.class)); + } + + private ApplicationContext create(Class... config) { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); + context.register(TestConfig.class); + if (config.length > 0) { + context.register(config); + } + context.refresh(); + this.context = context; + return context; + } + + @Configuration + public static class Additional { + @Bean + public Service another() { + return new MyService(); + } + } + @Configuration + public static class TestConfig { + @Bean + public Service service() { + return new MyService(); + } + } +}