From 3e896629e13f5100df8fa2fcbf2d6356efbc1893 Mon Sep 17 00:00:00 2001 From: Kevin Turner <83819+keturn@users.noreply.github.com> Date: Tue, 2 Nov 2021 16:05:08 -0700 Subject: [PATCH] refactor(MTEExtension): use Engines instead of broad Helper class --- .../moduletestingenvironment/Engines.java | 2 +- .../MTEExtension.java | 54 +++++++++---------- .../ModuleTestingEnvironment.java | 2 +- .../ModuleTestingHelper.java | 25 ++------- 4 files changed, 32 insertions(+), 51 deletions(-) diff --git a/src/main/java/org/terasology/moduletestingenvironment/Engines.java b/src/main/java/org/terasology/moduletestingenvironment/Engines.java index 3f0e91a..d1dc2b8 100644 --- a/src/main/java/org/terasology/moduletestingenvironment/Engines.java +++ b/src/main/java/org/terasology/moduletestingenvironment/Engines.java @@ -147,7 +147,7 @@ public List getEngines() { /** * Get the host context for this module testing environment. *

- * The host context will be null if the testing environment has not been set up via {@link ModuleTestingHelper#setup()} + * The host context will be null if the testing environment has not been set up via {@link #setup()} * beforehand. * * @return the engine's host context, or null if not set up yet diff --git a/src/main/java/org/terasology/moduletestingenvironment/MTEExtension.java b/src/main/java/org/terasology/moduletestingenvironment/MTEExtension.java index f0e90c8..73806e7 100644 --- a/src/main/java/org/terasology/moduletestingenvironment/MTEExtension.java +++ b/src/main/java/org/terasology/moduletestingenvironment/MTEExtension.java @@ -64,8 +64,8 @@ public void beforeAll(ExtensionContext context) { @Override public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { Class type = parameterContext.getParameter().getType(); - ModuleTestingHelper helper = getHelper(extensionContext); - return helper.getHostContext().get(type) != null + Engines engines = getEngines(extensionContext); + return engines.getHostContext().get(type) != null || type.isAssignableFrom(Engines.class) || type.isAssignableFrom(MainLoop.class) || type.isAssignableFrom(ModuleTestingHelper.class); @@ -73,27 +73,27 @@ public boolean supportsParameter(ParameterContext parameterContext, ExtensionCon @Override public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { - ModuleTestingHelper helper = getHelper(extensionContext); + Engines engines = getEngines(extensionContext); Class type = parameterContext.getParameter().getType(); - return getDIInstance(helper, type); + return getDIInstance(engines, type); } - private Object getDIInstance(ModuleTestingHelper helper, Class type) { + private Object getDIInstance(Engines engines, Class type) { if (type.isAssignableFrom(Engines.class)) { - return helper.engines; + return engines; } else if (type.isAssignableFrom(MainLoop.class)) { - return helper.mainLoop; + return new MainLoop(engines); } else if (type.isAssignableFrom(ModuleTestingHelper.class)) { - return helper; + return new ModuleTestingHelper(engines); } else { - return helper.getHostContext().get(type); + return engines.getHostContext().get(type); } } @Override public void postProcessTestInstance(Object testInstance, ExtensionContext extensionContext) { - ModuleTestingHelper helper = getHelper(extensionContext); + Engines engines = getEngines(extensionContext); List exceptionList = new LinkedList<>(); Class type = testInstance.getClass(); while (type != null) { @@ -101,7 +101,7 @@ public void postProcessTestInstance(Object testInstance, ExtensionContext extens .filter((field) -> field.getAnnotation(In.class) != null) .peek((field) -> field.setAccessible(true)) .forEach((field) -> { - Object candidateObject = getDIInstance(helper, field.getType()); + Object candidateObject = getDIInstance(engines, field.getType()); try { field.set(testInstance, candidateObject); } catch (IllegalAccessException e) { @@ -128,9 +128,9 @@ public Set getDependencyNames(ExtensionContext context) { } /** - * Get the ModuleTestingHelper for this test. + * Get the Engines for this test. *

- * The new ModuleTestingHelper instance is configured using the {@link Dependencies} and {@link UseWorldGenerator} + * The new Engines instance is configured using the {@link Dependencies} and {@link UseWorldGenerator} * annotations for the test class. *

* This will create a new instance when necessary. It will be stored in the @@ -140,12 +140,12 @@ public Set getDependencyNames(ExtensionContext context) { * @param context for the current test * @return configured for this test */ - protected ModuleTestingHelper getHelper(ExtensionContext context) { + protected Engines getEngines(ExtensionContext context) { ExtensionContext.Store store = context.getStore(helperLifecycle.apply(context)); - HelperCleaner autoCleaner = store.getOrComputeIfAbsent( - HelperCleaner.class, k -> new HelperCleaner(getDependencyNames(context), getWorldGeneratorUri(context)), - HelperCleaner.class); - return autoCleaner.helper; + EnginesCleaner autoCleaner = store.getOrComputeIfAbsent( + EnginesCleaner.class, k -> new EnginesCleaner(getDependencyNames(context), getWorldGeneratorUri(context)), + EnginesCleaner.class); + return autoCleaner.engines; } /** @@ -184,23 +184,23 @@ void setupLogging() { } /** - * Manages a ModuleTestingHelper for storage in an ExtensionContext. + * Manages Engines for storage in an ExtensionContext. *

* Implements {@link ExtensionContext.Store.CloseableResource CloseableResource} to dispose of - * the {@link ModuleTestingHelper} when the context is closed. + * the {@link Engines} when the context is closed. */ - static class HelperCleaner implements ExtensionContext.Store.CloseableResource { - protected ModuleTestingHelper helper; + static class EnginesCleaner implements ExtensionContext.Store.CloseableResource { + protected Engines engines; - HelperCleaner(Set dependencyNames, String worldGeneratorUri) { - helper = new ModuleTestingHelper(dependencyNames, worldGeneratorUri); - helper.setup(); + EnginesCleaner(Set dependencyNames, String worldGeneratorUri) { + engines = new Engines(dependencyNames, worldGeneratorUri); + engines.setup(); } @Override public void close() { - helper.tearDown(); - helper = null; + engines.tearDown(); + engines = null; } } } diff --git a/src/main/java/org/terasology/moduletestingenvironment/ModuleTestingEnvironment.java b/src/main/java/org/terasology/moduletestingenvironment/ModuleTestingEnvironment.java index d7e941a..909f1c5 100644 --- a/src/main/java/org/terasology/moduletestingenvironment/ModuleTestingEnvironment.java +++ b/src/main/java/org/terasology/moduletestingenvironment/ModuleTestingEnvironment.java @@ -90,7 +90,7 @@ public interface ModuleTestingEnvironment { /** * Get the host context for this module testing environment. *

- * The host context will be null if the testing environment has not been set up via {@link ModuleTestingHelper#setup()} + * The host context will be null if the testing environment has not been set up via {@link Engines#setup()} * beforehand. * * @return the engine's host context, or null if not set up yet diff --git a/src/main/java/org/terasology/moduletestingenvironment/ModuleTestingHelper.java b/src/main/java/org/terasology/moduletestingenvironment/ModuleTestingHelper.java index a9067f4..0206377 100644 --- a/src/main/java/org/terasology/moduletestingenvironment/ModuleTestingHelper.java +++ b/src/main/java/org/terasology/moduletestingenvironment/ModuleTestingHelper.java @@ -13,7 +13,6 @@ import java.io.IOException; import java.util.List; -import java.util.Set; import java.util.function.Supplier; /** @@ -82,27 +81,9 @@ public class ModuleTestingHelper implements ModuleTestingEnvironment { final Engines engines; final MainLoop mainLoop; - protected ModuleTestingHelper(Set dependencies, String worldGeneratorUri) { - engines = new Engines(dependencies, worldGeneratorUri); - mainLoop = new MainLoop(engines); - } - - /** - * Set up and start the engine as configured via this environment. - *

- * Every instance should be shut down properly by calling {@link #tearDown()}. - */ - protected void setup() { - engines.setup(); - } - - /** - * Shut down a previously started testing environment. - *

- * Used to properly shut down and clean up a testing environment set up and started with {@link #setup()}. - */ - protected void tearDown() { - engines.tearDown(); + ModuleTestingHelper(Engines engines) { + this.engines = engines; + this.mainLoop = new MainLoop(engines); } @Override