This is an automated email from the git hooks/post-receive script. eugene-guest pushed a commit to annotated tag OpenBSD in repository testng.
commit 4ed682a9019c3063c60dea4ff9cba5fcf6482f08 Author: Julien Herr <[email protected]> Date: Wed Mar 11 17:24:57 2015 +0100 parent-module could receive ITestContext --- src/main/java/org/testng/internal/ClassHelper.java | 13 +++++++++++++ src/main/java/org/testng/internal/ClassImpl.java | 14 ++++++++++++-- src/test/java/test/guice/GuiceParentModule.java | 10 ++++++++++ src/test/java/test/guice/GuiceParentModuleTest.java | 6 ++++++ 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/testng/internal/ClassHelper.java b/src/main/java/org/testng/internal/ClassHelper.java index 42b4eb4..f83a195 100644 --- a/src/main/java/org/testng/internal/ClassHelper.java +++ b/src/main/java/org/testng/internal/ClassHelper.java @@ -16,6 +16,7 @@ import org.testng.junit.IJUnitTestRunner; import org.testng.xml.XmlTest; import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Arrays; @@ -66,6 +67,18 @@ public final class ClassHelper { } } + public static <T> T newInstance(Constructor<T> constructor, Object... parameters) { + try { + return constructor.newInstance(parameters); + } catch (InstantiationException e) { + throw new TestNGException("Cannot instantiate class " + constructor.getDeclaringClass().getName(), e); + } catch (IllegalAccessException e) { + throw new TestNGException("Cannot instantiate class " + constructor.getDeclaringClass().getName(), e); + } catch (InvocationTargetException e) { + throw new TestNGException("Cannot instantiate class " + constructor.getDeclaringClass().getName(), e); + } + } + /** * Tries to load the specified class using the context ClassLoader or if none, * than from the default ClassLoader. This method differs from the standard diff --git a/src/main/java/org/testng/internal/ClassImpl.java b/src/main/java/org/testng/internal/ClassImpl.java index a687dce..ca2b923 100755 --- a/src/main/java/org/testng/internal/ClassImpl.java +++ b/src/main/java/org/testng/internal/ClassImpl.java @@ -21,6 +21,7 @@ import org.testng.xml.XmlClass; import org.testng.xml.XmlTest; import java.lang.annotation.Annotation; +import java.lang.reflect.Constructor; import java.util.List; import java.util.Map; @@ -149,11 +150,11 @@ public class ClassImpl implements IClass { Injector injector = suite.getParentInjector(); if (injector == null) { if (m_hasParentModule) { - Class<?> parentModule = ClassHelper.forName(suite.getParentModule()); + Class<Module> parentModule = (Class<Module>) ClassHelper.forName(suite.getParentModule()); if (parentModule == null) { throw new TestNGException("Cannot load parent Guice module class: " + parentModule); } - Module module = (Module) ClassHelper.newInstance(parentModule); + Module module = getModuleConstructor(parentModule); injector = com.google.inject.Guice.createInjector(module); } else { injector = com.google.inject.Guice.createInjector(); @@ -163,6 +164,15 @@ public class ClassImpl implements IClass { return injector; } + private Module getModuleConstructor(Class<Module> module) { + try { + Constructor<Module> moduleConstructor = module.getDeclaredConstructor(ITestContext.class); + return ClassHelper.newInstance(moduleConstructor, m_testContext); + } catch (NoSuchMethodException e) { + return ClassHelper.newInstance(module); + } + } + private Module[] getModules(Guice guice, Injector parentInejctor, Class<?> testClass) { List<Module> result = Lists.newArrayList(); for (Class<? extends Module> moduleClass : guice.modules()) { diff --git a/src/test/java/test/guice/GuiceParentModule.java b/src/test/java/test/guice/GuiceParentModule.java index 989438f..96da859 100644 --- a/src/test/java/test/guice/GuiceParentModule.java +++ b/src/test/java/test/guice/GuiceParentModule.java @@ -1,13 +1,23 @@ package test.guice; import com.google.inject.AbstractModule; +import com.google.inject.Inject; import com.google.inject.Singleton; +import org.testng.ITestContext; + public class GuiceParentModule extends AbstractModule { + private final ITestContext context; + + public GuiceParentModule(ITestContext context) { + this.context = context; + } + @Override protected void configure() { bind(MyService.class).toProvider(MyServiceProvider.class); bind(MyContext.class).to(MyContextImpl.class).in(Singleton.class); + bind(ITestContext.class).toInstance(context); } } diff --git a/src/test/java/test/guice/GuiceParentModuleTest.java b/src/test/java/test/guice/GuiceParentModuleTest.java index 9279961..6b1c0d3 100644 --- a/src/test/java/test/guice/GuiceParentModuleTest.java +++ b/src/test/java/test/guice/GuiceParentModuleTest.java @@ -1,6 +1,7 @@ package test.guice; import org.testng.Assert; +import org.testng.ITestContext; import org.testng.annotations.Guice; import org.testng.annotations.Test; @@ -13,10 +14,15 @@ public class GuiceParentModuleTest { MySession mySession; @Inject MyService myService; + @Inject + ITestContext context; public void testService() { Assert.assertNotNull(myService); Assert.assertNotNull(mySession); myService.serve(mySession); + Assert.assertNotNull(context); + Assert.assertEquals(context.getName(), "Guice"); + Assert.assertEquals(context.getSuite().getName(), "parent-module-suite"); } } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/testng.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

