From a156d5e0fe2b0c8528095f38202725ecc126b271 Mon Sep 17 00:00:00 2001 From: cpw Date: Wed, 20 Jul 2016 20:39:36 -0400 Subject: [PATCH] Some more substitution tests. It seems like it's working as it should. --- .../common/registry/RegistryTestSuite.java | 2 +- .../registry/SubstitutionInjectionTest.java | 76 +++++++++++++++++++ ...ava => SubstitutionRemoveRestoreTest.java} | 4 +- 3 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 src/test/java/net/minecraftforge/fml/common/registry/SubstitutionInjectionTest.java rename src/test/java/net/minecraftforge/fml/common/registry/{SubstitutionTests.java => SubstitutionRemoveRestoreTest.java} (96%) diff --git a/src/test/java/net/minecraftforge/fml/common/registry/RegistryTestSuite.java b/src/test/java/net/minecraftforge/fml/common/registry/RegistryTestSuite.java index d3512ae16a..efde270022 100644 --- a/src/test/java/net/minecraftforge/fml/common/registry/RegistryTestSuite.java +++ b/src/test/java/net/minecraftforge/fml/common/registry/RegistryTestSuite.java @@ -7,7 +7,7 @@ import org.junit.runners.Suite; * Run the full suite of tests */ @RunWith(Suite.class) -@Suite.SuiteClasses({VanillaRegistryTests.class, FreezingTests.class, SubstitutionTests.class}) +@Suite.SuiteClasses({VanillaRegistryTests.class, FreezingTests.class, SubstitutionRemoveRestoreTest.class, SubstitutionInjectionTest.class}) public class RegistryTestSuite { } diff --git a/src/test/java/net/minecraftforge/fml/common/registry/SubstitutionInjectionTest.java b/src/test/java/net/minecraftforge/fml/common/registry/SubstitutionInjectionTest.java new file mode 100644 index 0000000000..6e0a3ec23e --- /dev/null +++ b/src/test/java/net/minecraftforge/fml/common/registry/SubstitutionInjectionTest.java @@ -0,0 +1,76 @@ +package net.minecraftforge.fml.common.registry; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockDirt; +import net.minecraft.init.Blocks; +import net.minecraft.init.Bootstrap; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.DummyModContainer; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.ModMetadata; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +/** + * Substitution test harness - tests that substitutions behave correctly + */ +@RunWith(ForgeTestRunner.class) +public class SubstitutionInjectionTest +{ + private ResourceLocation myDirt = new ResourceLocation("minecraft:dirt"); + private BlockDirt toSub = new BlockDirt() { + + }; + + @BeforeClass + public static void setup() + { + Loader.instance(); + Bootstrap.register(); + Loader.instance().setupTestHarness(new DummyModContainer(new ModMetadata() {{ + modId = "test"; + }})); + } + + @Test + public void testSubstitutionInjection() throws Exception + { + // Capture snapshot prior to registering the substitution - this is a world state "pre-substitute" + final PersistentRegistryManager.GameDataSnapshot snapshot = PersistentRegistryManager.takeSnapshot(); + + GameRegistry.addSubstitutionAlias("minecraft:dirt", GameRegistry.Type.BLOCK, toSub); + PersistentRegistryManager.freezeData(); + ObjectHolderRegistry.INSTANCE.applyObjectHolders(); + + final FMLControlledNamespacedRegistry blockRegistry = (FMLControlledNamespacedRegistry)PersistentRegistryManager.findRegistryByType(Block.class); + + // TEST 1: Does my substitute take effect? The substitute should be found in the registry + Block fnd = blockRegistry.getValue(myDirt); + Block currDirt = Blocks.DIRT; + assertEquals("Got my dirt substitute - Blocks", toSub, currDirt); + assertEquals("Got my dirt substitute - Blocks and registry", currDirt, fnd); + assertEquals("Got my dirt substitute - registry", toSub, fnd); + + // TEST 2: Does the substitute get injected when told by loading operation? The substitute should be found in the registry + PersistentRegistryManager.injectSnapshot(snapshot, true, true); + ObjectHolderRegistry.INSTANCE.applyObjectHolders(); + fnd = blockRegistry.getValue(myDirt); + currDirt = Blocks.DIRT; + assertEquals("Got my dirt substitute - Blocks", toSub, currDirt); + assertEquals("Got my dirt substitute - Blocks and registry", currDirt, fnd); + assertEquals("Got my dirt substitute - registry", toSub, fnd); + + // TEST 3: Does the substitute get restored when reverting to frozen state? The substitute should be found in the registry again + PersistentRegistryManager.revertToFrozen(); + ObjectHolderRegistry.INSTANCE.applyObjectHolders(); + fnd = blockRegistry.getValue(myDirt); + currDirt = Blocks.DIRT; + assertEquals("Got my dirt substitute - Blocks", toSub, currDirt); + assertEquals("Got my dirt substitute - Blocks and registry", currDirt, fnd); + assertEquals("Got my dirt substitute - registry", toSub, fnd); + } +} diff --git a/src/test/java/net/minecraftforge/fml/common/registry/SubstitutionTests.java b/src/test/java/net/minecraftforge/fml/common/registry/SubstitutionRemoveRestoreTest.java similarity index 96% rename from src/test/java/net/minecraftforge/fml/common/registry/SubstitutionTests.java rename to src/test/java/net/minecraftforge/fml/common/registry/SubstitutionRemoveRestoreTest.java index 76c663a097..41c9450b5d 100644 --- a/src/test/java/net/minecraftforge/fml/common/registry/SubstitutionTests.java +++ b/src/test/java/net/minecraftforge/fml/common/registry/SubstitutionRemoveRestoreTest.java @@ -19,7 +19,7 @@ import static org.junit.Assert.assertNotEquals; * Substitution test harness - tests that substitutions behave correctly */ @RunWith(ForgeTestRunner.class) -public class SubstitutionTests +public class SubstitutionRemoveRestoreTest { private ResourceLocation myDirt = new ResourceLocation("minecraft:dirt"); private BlockDirt toSub = new BlockDirt() { @@ -37,7 +37,7 @@ public class SubstitutionTests } @Test - public void testSubstitution() throws Exception + public void testSubstitutionRemovalAndRestore() throws Exception { GameRegistry.addSubstitutionAlias("minecraft:dirt", GameRegistry.Type.BLOCK, toSub); PersistentRegistryManager.freezeData();