From 30aba99c27035c2e0aa4754ac456288db816bcbd Mon Sep 17 00:00:00 2001 From: James Seibel Date: Tue, 26 Jul 2022 22:09:49 -0500 Subject: [PATCH] Add WorldGeneratorInjector and start unit tests --- .../override/IDhApiWorldGenerator.java | 4 +- .../WorldGeneratorInjector.java | 116 +++++++++++++++ .../objects/WorldGeneratorTestAssembly.java | 22 +++ .../objects/WorldGeneratorTestCore.java | 43 ++++++ .../objects/WorldGeneratorTestPrimary.java | 43 ++++++ .../objects/WorldGeneratorTestSecondary.java | 43 ++++++ .../java/tests/DependencyInjectorTest.java | 133 ++++++++++++++---- 7 files changed, 373 insertions(+), 31 deletions(-) create mode 100644 src/main/java/com/seibel/lod/core/handlers/dependencyInjection/WorldGeneratorInjector.java create mode 100644 src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestAssembly.java create mode 100644 src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestCore.java create mode 100644 src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestPrimary.java create mode 100644 src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestSecondary.java diff --git a/src/main/java/com/seibel/lod/core/api/external/items/interfaces/override/IDhApiWorldGenerator.java b/src/main/java/com/seibel/lod/core/api/external/items/interfaces/override/IDhApiWorldGenerator.java index 41be1d1e3..9b7f28eb4 100644 --- a/src/main/java/com/seibel/lod/core/api/external/items/interfaces/override/IDhApiWorldGenerator.java +++ b/src/main/java/com/seibel/lod/core/api/external/items/interfaces/override/IDhApiWorldGenerator.java @@ -7,11 +7,11 @@ import com.seibel.lod.core.api.external.items.interfaces.world.IDhApiLevelWrappe /** * @author James Seibel - * @version 2022-7-14 + * @version 2022-7-26 */ public interface IDhApiWorldGenerator extends IDhApiOverrideable { - /** Returns where chunk generation requests can be generated. */ + /** Returns which thread chunk generation requests can be created on. */ EDhApiWorldGenThreadMode getThreadingMode(); IDhApiChunkWrapper generateChunk(int chunkPosX, int chunkPosZ, IDhApiLevelWrapper serverLevelWrapper, EDhApiWorldGenerationStep maxStepToGenerate); diff --git a/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/WorldGeneratorInjector.java b/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/WorldGeneratorInjector.java new file mode 100644 index 000000000..370dd6e6e --- /dev/null +++ b/src/main/java/com/seibel/lod/core/handlers/dependencyInjection/WorldGeneratorInjector.java @@ -0,0 +1,116 @@ +/* + * This file is part of the Distant Horizons mod (formerly the LOD Mod), + * licensed under the GNU LGPL v3 License. + * + * Copyright (C) 2020-2022 James Seibel + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.seibel.lod.core.handlers.dependencyInjection; + +import com.seibel.lod.core.api.external.items.interfaces.override.IDhApiWorldGenerator; +import com.seibel.lod.core.api.external.items.interfaces.world.IDhApiLevelWrapper; + +import java.util.HashMap; + +/** + * This class takes care of dependency injection for world generators.
+ * This is done so other mods can override our world generator(s) to improve or replace them. + * + * @author James Seibel + * @version 2022-7-26 + */ +public class WorldGeneratorInjector +{ + public static final WorldGeneratorInjector INSTANCE = new WorldGeneratorInjector(); + + private final HashMap> worldGeneratorByLevelWrapper = new HashMap<>(); + /** World generators that aren't bound to a specific level and are used if no other world generators are bound. */ + private final OverrideInjector backupUniversalWorldGenerators = new OverrideInjector<>(); + + + + /** + * Binds the backup world generator.
+ * See {@link DependencyInjector#bind(Class, IBindable) bind(Class, IBindable)} for full documentation. + * + * @throws IllegalArgumentException if a non-Distant Horizons world generator with the priority CORE is passed in + * @see DependencyInjector#bind(Class, IBindable) + */ + public void bind(IDhApiWorldGenerator worldGeneratorImplementation) throws IllegalStateException, IllegalArgumentException + { + bind(null, worldGeneratorImplementation); + } + + /** + * Binds the world generator to the given level.
+ * See {@link DependencyInjector#bind(Class, IBindable) bind(Class, IBindable)} for full documentation. + * + * @throws IllegalArgumentException if a non-Distant Horizons world generator with the priority CORE is passed in + * @see DependencyInjector#bind(Class, IBindable) + */ + public void bind(IDhApiLevelWrapper levelForWorldGenerator, IDhApiWorldGenerator worldGeneratorImplementation) throws IllegalStateException, IllegalArgumentException + { + if (levelForWorldGenerator != null) + { + // bind this generator to a specific level + if (!worldGeneratorByLevelWrapper.containsKey(levelForWorldGenerator)) + { + worldGeneratorByLevelWrapper.put(levelForWorldGenerator, new OverrideInjector<>()); + } + + worldGeneratorByLevelWrapper.get(levelForWorldGenerator).bind(IDhApiWorldGenerator.class, worldGeneratorImplementation); + } + else + { + // a null level wrapper binds the generator to all levels + backupUniversalWorldGenerators.bind(IDhApiWorldGenerator.class, worldGeneratorImplementation); + } + } + + + + /** + * Returns the backup world generator with the highest priority.
+ * See {@link OverrideInjector#get(Class) get(Class)} for more documentation. + * + * @see OverrideInjector#get(Class) + */ + public IDhApiWorldGenerator get() throws ClassCastException + { + return backupUniversalWorldGenerators.get(IDhApiWorldGenerator.class); + } + + /** + * Returns the bound world generator with the highest priority.
+ * (Returns a backup world generator if no world generators have been bound for this specific level.)
+ * See {@link OverrideInjector#get(Class) get(Class)} for more documentation. + * + * @see OverrideInjector#get(Class) + */ + public IDhApiWorldGenerator get(IDhApiLevelWrapper levelForWorldGenerator) throws ClassCastException + { + if (!worldGeneratorByLevelWrapper.containsKey(levelForWorldGenerator)) + { + // no generator exists for this specific level. + // check for a backup universal world generator + return backupUniversalWorldGenerators.get(IDhApiWorldGenerator.class); + } + + // use the existing world generator + return worldGeneratorByLevelWrapper.get(levelForWorldGenerator).get(IDhApiWorldGenerator.class); + } + + +} diff --git a/src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestAssembly.java b/src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestAssembly.java new file mode 100644 index 000000000..eb4f702e3 --- /dev/null +++ b/src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestAssembly.java @@ -0,0 +1,22 @@ +package testItems.worldGeneratorInjection.objects; + +import com.seibel.lod.core.util.StringUtil; + +/** + * assembly classes are used to reference the package they are in. + * + * @author james seibel + * @version 2022-7-26 + */ +public class WorldGeneratorTestAssembly +{ + + /** Returns the first N packages in this class' path. */ + public static String getPackagePath(int numberOfPackagesToReturn) + { + String thisPackageName = WorldGeneratorTestAssembly.class.getPackage().getName(); + int secondPackageEndingIndex = StringUtil.nthIndexOf(thisPackageName, ".", numberOfPackagesToReturn); + return thisPackageName.substring(0, secondPackageEndingIndex); + } + +} diff --git a/src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestCore.java b/src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestCore.java new file mode 100644 index 000000000..e3950edf6 --- /dev/null +++ b/src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestCore.java @@ -0,0 +1,43 @@ +package testItems.worldGeneratorInjection.objects; + +import com.seibel.lod.core.api.external.items.enums.override.EDhApiOverridePriority; +import com.seibel.lod.core.api.external.items.enums.worldGeneration.EDhApiWorldGenThreadMode; +import com.seibel.lod.core.api.external.items.enums.worldGeneration.EDhApiWorldGenerationStep; +import com.seibel.lod.core.api.external.items.interfaces.override.IDhApiWorldGenerator; +import com.seibel.lod.core.api.external.items.interfaces.world.IDhApiChunkWrapper; +import com.seibel.lod.core.api.external.items.interfaces.world.IDhApiLevelWrapper; + +/** + * Dummy test implementation object for world generator injection unit tests. + * + * @author James Seibel + * @version 2022-7-26 + */ +public class WorldGeneratorTestCore implements IDhApiWorldGenerator +{ + public static EDhApiWorldGenThreadMode THREAD_MODE = EDhApiWorldGenThreadMode.SERVER_THREAD; + + + //==============// + // IOverridable // + //==============// + + @Override + public EDhApiOverridePriority getOverrideType() { return EDhApiOverridePriority.CORE; } + + + + //======================// + // IDhApiWorldGenerator // + //======================// + + @Override + public EDhApiWorldGenThreadMode getThreadingMode() { return THREAD_MODE; } + + @Override + public IDhApiChunkWrapper generateChunk(int chunkPosX, int chunkPosZ, IDhApiLevelWrapper serverLevelWrapper, EDhApiWorldGenerationStep maxStepToGenerate) + { + // not necessary for testing + return null; + } +} diff --git a/src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestPrimary.java b/src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestPrimary.java new file mode 100644 index 000000000..c4549ff18 --- /dev/null +++ b/src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestPrimary.java @@ -0,0 +1,43 @@ +package testItems.worldGeneratorInjection.objects; + +import com.seibel.lod.core.api.external.items.enums.override.EDhApiOverridePriority; +import com.seibel.lod.core.api.external.items.enums.worldGeneration.EDhApiWorldGenThreadMode; +import com.seibel.lod.core.api.external.items.enums.worldGeneration.EDhApiWorldGenerationStep; +import com.seibel.lod.core.api.external.items.interfaces.override.IDhApiWorldGenerator; +import com.seibel.lod.core.api.external.items.interfaces.world.IDhApiChunkWrapper; +import com.seibel.lod.core.api.external.items.interfaces.world.IDhApiLevelWrapper; + +/** + * Dummy test implementation object for world generator injection unit tests. + * + * @author James Seibel + * @version 2022-7-26 + */ +public class WorldGeneratorTestPrimary implements IDhApiWorldGenerator +{ + public static EDhApiWorldGenThreadMode THREAD_MODE = EDhApiWorldGenThreadMode.MULTI_THREADED; + + + //==============// + // IOverridable // + //==============// + + @Override + public EDhApiOverridePriority getOverrideType() { return EDhApiOverridePriority.PRIMARY; } + + + + //======================// + // IDhApiWorldGenerator // + //======================// + + @Override + public EDhApiWorldGenThreadMode getThreadingMode() { return THREAD_MODE; } + + @Override + public IDhApiChunkWrapper generateChunk(int chunkPosX, int chunkPosZ, IDhApiLevelWrapper serverLevelWrapper, EDhApiWorldGenerationStep maxStepToGenerate) + { + // not necessary for testing + return null; + } +} diff --git a/src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestSecondary.java b/src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestSecondary.java new file mode 100644 index 000000000..9e13a9456 --- /dev/null +++ b/src/test/java/testItems/worldGeneratorInjection/objects/WorldGeneratorTestSecondary.java @@ -0,0 +1,43 @@ +package testItems.worldGeneratorInjection.objects; + +import com.seibel.lod.core.api.external.items.enums.override.EDhApiOverridePriority; +import com.seibel.lod.core.api.external.items.enums.worldGeneration.EDhApiWorldGenThreadMode; +import com.seibel.lod.core.api.external.items.enums.worldGeneration.EDhApiWorldGenerationStep; +import com.seibel.lod.core.api.external.items.interfaces.override.IDhApiWorldGenerator; +import com.seibel.lod.core.api.external.items.interfaces.world.IDhApiChunkWrapper; +import com.seibel.lod.core.api.external.items.interfaces.world.IDhApiLevelWrapper; + +/** + * Dummy test implementation object for world generator injection unit tests. + * + * @author James Seibel + * @version 2022-7-26 + */ +public class WorldGeneratorTestSecondary implements IDhApiWorldGenerator +{ + public static EDhApiWorldGenThreadMode THREAD_MODE = EDhApiWorldGenThreadMode.SINGLE_THREADED; + + + //==============// + // IOverridable // + //==============// + + @Override + public EDhApiOverridePriority getOverrideType() { return EDhApiOverridePriority.SECONDARY; } + + + + //======================// + // IDhApiWorldGenerator // + //======================// + + @Override + public EDhApiWorldGenThreadMode getThreadingMode() { return THREAD_MODE; } + + @Override + public IDhApiChunkWrapper generateChunk(int chunkPosX, int chunkPosZ, IDhApiLevelWrapper serverLevelWrapper, EDhApiWorldGenerationStep maxStepToGenerate) + { + // not necessary for testing + return null; + } +} diff --git a/src/test/java/tests/DependencyInjectorTest.java b/src/test/java/tests/DependencyInjectorTest.java index 1b8a921df..a5a0abda8 100644 --- a/src/test/java/tests/DependencyInjectorTest.java +++ b/src/test/java/tests/DependencyInjectorTest.java @@ -2,12 +2,10 @@ package tests; import com.seibel.lod.core.api.external.items.enums.override.EDhApiOverridePriority; import com.seibel.lod.core.api.external.items.interfaces.override.IDhApiOverrideable; +import com.seibel.lod.core.api.external.items.interfaces.override.IDhApiWorldGenerator; import com.seibel.lod.core.enums.override.EOverridePriority; -import com.seibel.lod.core.handlers.dependencyInjection.DependencyInjector; -import com.seibel.lod.core.handlers.dependencyInjection.DhApiEventInjector; -import com.seibel.lod.core.handlers.dependencyInjection.IBindable; +import com.seibel.lod.core.handlers.dependencyInjection.*; -import com.seibel.lod.core.handlers.dependencyInjection.OverrideInjector; import org.junit.Assert; import org.junit.Test; import testItems.eventInjection.objects.DhTestEvent; @@ -23,6 +21,9 @@ import testItems.singletonInjection.objects.ConcreteSingletonTestTwo; import testItems.eventInjection.abstractObjects.DhApiTestEvent; import testItems.overrideInjection.interfaces.IOverrideTest; import testItems.overrideInjection.objects.OverrideTestAssembly; +import testItems.worldGeneratorInjection.objects.WorldGeneratorTestCore; +import testItems.worldGeneratorInjection.objects.WorldGeneratorTestPrimary; +import testItems.worldGeneratorInjection.objects.WorldGeneratorTestSecondary; import java.util.ArrayList; @@ -163,13 +164,13 @@ public class DependencyInjectorTest @Test public void testOverrideInjection() { - OverrideInjector TEST_OVERRIDE_INJECTOR = new OverrideInjector<>(OverrideTestAssembly.getPackagePath(2)); - OverrideInjector CORE_OVERRIDE_INJECTOR = new OverrideInjector<>(); + OverrideInjector TEST_INJECTOR = new OverrideInjector<>(OverrideTestAssembly.getPackagePath(2)); + OverrideInjector CORE_INJECTOR = new OverrideInjector<>(); // pre-dependency setup - Assert.assertNull("Nothing should have been bound.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class)); - Assert.assertNull("Nothing should have been bound.", CORE_OVERRIDE_INJECTOR.get(IOverrideTest.class)); + Assert.assertNull("Nothing should have been bound.", TEST_INJECTOR.get(IOverrideTest.class)); + Assert.assertNull("Nothing should have been bound.", CORE_INJECTOR.get(IOverrideTest.class)); // variables to use later @@ -180,57 +181,131 @@ public class DependencyInjectorTest // core override binding - try { TEST_OVERRIDE_INJECTOR.bind(IOverrideTest.class, coreOverride); } catch (IllegalArgumentException e) { Assert.fail("Core override should be bindable for test package injector."); } + try { TEST_INJECTOR.bind(IOverrideTest.class, coreOverride); } catch (IllegalArgumentException e) { Assert.fail("Core override should be bindable for test package injector."); } try { - CORE_OVERRIDE_INJECTOR.bind(IOverrideTest.class, coreOverride); + CORE_INJECTOR.bind(IOverrideTest.class, coreOverride); Assert.fail("Core override should not be bindable for core package injector."); } catch (IllegalArgumentException e) { /* this exception should be thrown */ } // core override - Assert.assertNotNull("Test injector should've bound core override.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class)); - Assert.assertNull("Core injector should not have bound core override.", CORE_OVERRIDE_INJECTOR.get(IOverrideTest.class)); + Assert.assertNotNull("Test injector should've bound core override.", TEST_INJECTOR.get(IOverrideTest.class)); + Assert.assertNull("Core injector should not have bound core override.", CORE_INJECTOR.get(IOverrideTest.class)); // priority gets - Assert.assertNotNull("Core override should be bound.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.CORE)); - Assert.assertNull("Secondary override should not be bound yet.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.SECONDARY)); - Assert.assertNull("Primary override should not be bound yet.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.PRIMARY)); + Assert.assertNotNull("Core override should be bound.", TEST_INJECTOR.get(IOverrideTest.class, EOverridePriority.CORE)); + Assert.assertNull("Secondary override should not be bound yet.", TEST_INJECTOR.get(IOverrideTest.class, EOverridePriority.SECONDARY)); + Assert.assertNull("Primary override should not be bound yet.", TEST_INJECTOR.get(IOverrideTest.class, EOverridePriority.PRIMARY)); // standard get - override = TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class); + override = TEST_INJECTOR.get(IOverrideTest.class); Assert.assertEquals("Override returned incorrect override type.", override.getOverrideType(), EDhApiOverridePriority.CORE); Assert.assertEquals("Incorrect override object returned.", override.getValue(), OverrideTestCore.VALUE); // secondary override - TEST_OVERRIDE_INJECTOR.bind(IOverrideTest.class, secondaryOverride); + TEST_INJECTOR.bind(IOverrideTest.class, secondaryOverride); // priority gets - Assert.assertNotNull("Test injector should've bound secondary override.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class)); - Assert.assertNotNull("Core override should be bound.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.CORE)); - Assert.assertNotNull("Secondary override should be bound.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.SECONDARY)); - Assert.assertNull("Primary override should not be bound yet.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.PRIMARY)); + Assert.assertNotNull("Test injector should've bound secondary override.", TEST_INJECTOR.get(IOverrideTest.class)); + Assert.assertNotNull("Core override should be bound.", TEST_INJECTOR.get(IOverrideTest.class, EOverridePriority.CORE)); + Assert.assertNotNull("Secondary override should be bound.", TEST_INJECTOR.get(IOverrideTest.class, EOverridePriority.SECONDARY)); + Assert.assertNull("Primary override should not be bound yet.", TEST_INJECTOR.get(IOverrideTest.class, EOverridePriority.PRIMARY)); // standard get - override = TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class); + override = TEST_INJECTOR.get(IOverrideTest.class); Assert.assertEquals("Override returned incorrect override type.", override.getOverrideType(), EDhApiOverridePriority.SECONDARY); Assert.assertEquals("Incorrect override object returned.", override.getValue(), OverrideTestSecondary.VALUE); // primary override - TEST_OVERRIDE_INJECTOR.bind(IOverrideTest.class, primaryOverride); + TEST_INJECTOR.bind(IOverrideTest.class, primaryOverride); // priority gets - Assert.assertNotNull("Test injector should've bound primary override.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class)); - Assert.assertNotNull("Core override should be bound.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.CORE)); - Assert.assertNotNull("Secondary override should be bound.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.SECONDARY)); - Assert.assertNotNull("Primary override should be bound.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.PRIMARY)); + Assert.assertNotNull("Test injector should've bound primary override.", TEST_INJECTOR.get(IOverrideTest.class)); + Assert.assertNotNull("Core override should be bound.", TEST_INJECTOR.get(IOverrideTest.class, EOverridePriority.CORE)); + Assert.assertNotNull("Secondary override should be bound.", TEST_INJECTOR.get(IOverrideTest.class, EOverridePriority.SECONDARY)); + Assert.assertNotNull("Primary override should be bound.", TEST_INJECTOR.get(IOverrideTest.class, EOverridePriority.PRIMARY)); // standard get - override = TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class); + override = TEST_INJECTOR.get(IOverrideTest.class); Assert.assertEquals("Override returned incorrect override type.", override.getOverrideType(), EDhApiOverridePriority.PRIMARY); Assert.assertEquals("Incorrect override object returned.", override.getValue(), OverrideTestPrimary.VALUE); // in-line get (make sure the gotten type is correct, the actual value doesn't matter) - Assert.assertNotEquals("Inline get incorrect value.", -1, TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class).getValue()); + Assert.assertNotEquals("Inline get incorrect value.", -1, TEST_INJECTOR.get(IOverrideTest.class).getValue()); + + } + + @Test + public void testWorldGeneratorInjection() + { + WorldGeneratorInjector TEST_INJECTOR = new WorldGeneratorInjector(); + WorldGeneratorInjector CORE_INJECTOR = new WorldGeneratorInjector(); + + + // pre-dependency setup + Assert.assertNull("Nothing should have been bound.", TEST_INJECTOR.get()); + Assert.assertNull("Nothing should have been bound.", CORE_INJECTOR.get()); + + + // variables to use later + IDhApiWorldGenerator generator; + WorldGeneratorTestCore coreGenerator = new WorldGeneratorTestCore(); + WorldGeneratorTestSecondary secondaryGenerator = new WorldGeneratorTestSecondary(); + WorldGeneratorTestPrimary primaryGenerator = new WorldGeneratorTestPrimary(); + + + // TODO need core package overriding + +// // core generator binding +// try { TEST_GENERATOR_INJECTOR.bind(coreGenerator); } catch (IllegalArgumentException e) { Assert.fail("Core generator should be bindable for test package injector."); } +// +// try +// { +// CORE_GENERATOR_INJECTOR.bind(coreGenerator); +// Assert.fail("Core generator should not be bindable for core package injector."); +// } +// catch (IllegalArgumentException e) { /* this exception should be thrown */ } +// +// +// // core override +// Assert.assertNotNull("Test injector should've bound core override.", TEST_GENERATOR_INJECTOR.get()); +// Assert.assertNull("Core injector should not have bound core override.", CORE_GENERATOR_INJECTOR.get()); +// // standard get +// generator = TEST_GENERATOR_INJECTOR.get(); +// Assert.assertEquals("Override returned incorrect override type.", generator.getOverrideType(), EDhApiOverridePriority.CORE); +// Assert.assertEquals("Incorrect generator returned.", generator.getThreadingMode(), WorldGeneratorTestCore.THREAD_MODE); + + + // TODO not started + +// // secondary override +// TEST_OVERRIDE_INJECTOR.bind(IOverrideTest.class, secondaryOverride); +// // priority gets +// Assert.assertNotNull("Test injector should've bound secondary override.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class)); +// Assert.assertNotNull("Core override should be bound.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.CORE)); +// Assert.assertNotNull("Secondary override should be bound.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.SECONDARY)); +// Assert.assertNull("Primary override should not be bound yet.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.PRIMARY)); +// // standard get +// override = TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class); +// Assert.assertEquals("Override returned incorrect override type.", override.getOverrideType(), EDhApiOverridePriority.SECONDARY); +// Assert.assertEquals("Incorrect override object returned.", override.getValue(), OverrideTestSecondary.VALUE); +// +// +// // primary override +// TEST_OVERRIDE_INJECTOR.bind(IOverrideTest.class, primaryOverride); +// // priority gets +// Assert.assertNotNull("Test injector should've bound primary override.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class)); +// Assert.assertNotNull("Core override should be bound.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.CORE)); +// Assert.assertNotNull("Secondary override should be bound.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.SECONDARY)); +// Assert.assertNotNull("Primary override should be bound.", TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class, EOverridePriority.PRIMARY)); +// // standard get +// override = TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class); +// Assert.assertEquals("Override returned incorrect override type.", override.getOverrideType(), EDhApiOverridePriority.PRIMARY); +// Assert.assertEquals("Incorrect override object returned.", override.getValue(), OverrideTestPrimary.VALUE); +// +// +// // in-line get (make sure the gotten type is correct, the actual value doesn't matter) +// Assert.assertNotEquals("Inline get incorrect value.", -1, TEST_OVERRIDE_INJECTOR.get(IOverrideTest.class).getValue()); }