Isolate platform binding

- Add the PlatformBinding rule that binds a mock platform for a class or method, unbinds on teardown and restores the previous binding
- Add the PlatformLeakGuard rule that fails a class when a platform is still bound or a service is still registered at class start or end
- Add IrisRuntimeState so the guard reads the registered services without adding a test-only method to the SPI
- Replace the inline mock-platform setup and teardown of twenty test classes with the rule
- Guard the remaining sixty-four platform and service touching core test classes
- Rename the pack-compat pool fixtures to PackCompatFixtures so the two CompatFixtures names cannot collide
- Scope BukkitTestServer branding to a ServerBranding rule that restores the shared mock after each test
This commit is contained in:
Brian Neumann-Fopiano
2026-09-08 04:22:49 -04:00
parent c332c86849
commit 03c645b66f
93 changed files with 691 additions and 403 deletions
@@ -1,6 +1,7 @@
package art.arcane.iris.core;
import art.arcane.iris.testsupport.BukkitTestServer;
import org.junit.Rule;
import org.junit.Test;
@@ -9,6 +10,9 @@ import static org.junit.Assume.assumeTrue;
import static org.mockito.Mockito.mockingDetails;
public class IrisRuntimeSchedulerModeRoutingTest {
@Rule
public final BukkitTestServer.ServerBranding branding = BukkitTestServer.branding();
@Test
public void autoResolvesToPaperLikeOnPurpurBranding() {
installServer("Purpur", "git-Purpur-2562 (MC: 26.2)");
@@ -55,6 +59,6 @@ public class IrisRuntimeSchedulerModeRoutingTest {
private void installServer(String name, String version) {
assumeTrue(mockingDetails(BukkitTestServer.install()).isMock());
BukkitTestServer.brand(name, version);
branding.set(name, version);
}
}
@@ -3,7 +3,9 @@ package art.arcane.iris.core.gui;
import art.arcane.iris.engine.framework.MeteredCache;
import art.arcane.iris.engine.framework.PreservationRegistry;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.volmlib.util.function.NoiseProvider;
import org.junit.ClassRule;
import org.junit.Test;
import javax.swing.SwingUtilities;
@@ -20,6 +22,9 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public final class NoiseExplorerGUITest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Test
public void openingInitialSourceBuildsSamplerExactlyOnce() throws Exception {
AtomicInteger factoryCalls = new AtomicInteger();
@@ -8,6 +8,7 @@ import art.arcane.iris.platform.bukkit.BukkitPlatform;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.common.scheduling.J;
import art.arcane.volmlib.util.format.MemoryMonitor;
import art.arcane.volmlib.util.scheduling.FoliaScheduler;
@@ -17,6 +18,7 @@ import org.bukkit.plugin.IllegalPluginAccessException;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
import org.bukkit.scheduler.BukkitScheduler;
import org.junit.ClassRule;
import org.junit.Test;
import org.mockito.MockedStatic;
@@ -45,6 +47,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class PregeneratorJobShutdownDispatchTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Test
public void pluginDisableCanJoinAWorkerAlreadyDispatchingSaving() throws Exception {
try (Fixture fixture = new Fixture()) {
@@ -3,8 +3,10 @@ package art.arcane.iris.core.lifecycle;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.LogLevel;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.nio.file.Path;
@@ -22,6 +24,9 @@ import static org.mockito.Mockito.mock;
* console and the runtime log but never the instance's logs/latest.log - the only log most operators read.
*/
public class MissingWorldStorageLogTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private final List<String> emitted = new ArrayList<>();
private final List<LogLevel> levels = new ArrayList<>();
private IrisPlatform previousPlatform;
@@ -3,12 +3,14 @@ package art.arcane.iris.core.link;
import art.arcane.iris.core.lifecycle.ManagedWorldLoader;
import art.arcane.iris.engine.platform.BukkitChunkGenerator;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.event.server.ServerCommandEvent;
import org.bukkit.plugin.PluginManager;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -29,6 +31,9 @@ import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.when;
public class MultiverseGuardListenerTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -4,8 +4,10 @@ import art.arcane.iris.core.IrisSettings;
import art.arcane.iris.engine.framework.PreservationRegistry;
import art.arcane.iris.engine.object.IrisGenerator;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -22,6 +24,9 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
public class IrisDataAuthoringCacheTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public final TemporaryFolder temporary = new TemporaryFolder();
@@ -3,8 +3,10 @@ package art.arcane.iris.core.loader;
import art.arcane.iris.engine.framework.MeteredCache;
import art.arcane.iris.engine.framework.PreservationRegistry;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -17,6 +19,9 @@ import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
public class IrisDataDatapackCompilerCacheTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -4,9 +4,11 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.framework.MeteredCache;
import art.arcane.iris.engine.framework.PreservationRegistry;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.project.context.IrisContext;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -21,6 +23,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class IrisDataEngineRegistryTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -5,8 +5,10 @@ import art.arcane.iris.engine.history.GenerationRegistryContract;
import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -20,6 +22,9 @@ import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.spy;
public class IrisDataRetainedPackTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -7,10 +7,12 @@ import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.engine.object.IrisObject;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.volmlib.util.collection.KMap;
import art.arcane.volmlib.util.collection.KSet;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -34,6 +36,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class ResourceLoaderPrefetchTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -5,9 +5,11 @@ import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.engine.object.IrisPosition;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import com.google.gson.Gson;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -26,6 +28,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class ResourceLoaderStaticObjectValidationTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -27,9 +27,11 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.spi.PlatformStructureHooks;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.Assume;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -67,6 +69,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class PackDownloaderTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temp = new TemporaryFolder();
@@ -3,8 +3,10 @@ package art.arcane.iris.core.pack;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -25,6 +27,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class PackImageMapValidatorTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -7,6 +7,8 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.spi.PlatformStructureHooks;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.Assume;
@@ -30,6 +32,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class PackValidationCacheTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -4,6 +4,8 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformStructureHooks;
import art.arcane.iris.spi.PlatformStructureHooks.JigsawSourceMetadata;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -27,6 +29,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class PackValidatorStructureGraphTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -3,7 +3,9 @@ package art.arcane.iris.core.pregenerator.cache;
import art.arcane.iris.engine.framework.MeteredCache;
import art.arcane.iris.engine.framework.PreservationRegistry;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.After;
import org.junit.ClassRule;
import org.junit.Test;
import java.io.File;
@@ -16,6 +18,9 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class PregenCacheExecutorRegistrationTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private static final class RecordingPreservation implements PreservationRegistry {
private final List<ExecutorService> executors = new CopyOnWriteArrayList<>();
@@ -7,9 +7,11 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockProperty;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.volmlib.util.json.JSONObject;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.List;
@@ -20,6 +22,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class ExternalBlockSchemaTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private static final String QUALIFIED_BLOCK = "craftengine:example/ores/copper";
private IrisPlatform previous;
@@ -8,10 +8,12 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.volmlib.util.json.JSONArray;
import art.arcane.volmlib.util.json.JSONObject;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -34,6 +36,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class IrisCodeWorkspaceTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -8,6 +8,7 @@ import art.arcane.iris.engine.object.IrisBlockData;
import art.arcane.iris.engine.object.IrisExpression;
import art.arcane.iris.engine.object.IrisHydrology;
import art.arcane.iris.engine.object.IrisRiverPolicy;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap;
import art.arcane.volmlib.util.json.JSONArray;
@@ -17,6 +18,7 @@ import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformRegistries;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.ArrayList;
@@ -30,6 +32,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class IrisRiverSchemaTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private IrisPlatform previousPlatform;
@Before
@@ -12,11 +12,13 @@ import art.arcane.iris.engine.object.annotations.ArrayType;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap;
import art.arcane.volmlib.util.json.JSONObject;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.lang.reflect.Field;
@@ -30,6 +32,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class IrisStaticObjectSchemaTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private IrisPlatform previousPlatform;
@Before
@@ -55,12 +55,14 @@ import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.spi.PlatformScheduler;
import art.arcane.iris.spi.PlatformStructureHooks;
import art.arcane.iris.spi.PlatformWorld;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap;
import art.arcane.volmlib.util.json.JSONArray;
import art.arcane.volmlib.util.json.JSONObject;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.io.File;
@@ -76,6 +78,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class SchemaBuilderParityTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private static final List<String> POTION_KEYS = List.of("minecraft:speed", "minecraft:slow_falling", "sniffer_mod:mega_boost");
private static final List<String> ENCHANT_KEYS = List.of("minecraft:sharpness", "cool_mod:vorpal");
private static final List<String> ITEM_KEYS = List.of("minecraft:stone", "minecraft:diamond_sword", "cool_mod:ruby");
@@ -17,6 +17,7 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.common.scheduling.J;
import art.arcane.volmlib.util.board.Board;
import art.arcane.volmlib.util.board.BoardSettings;
@@ -24,6 +25,7 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.AfterClass;
import org.junit.BeforeClass;
@@ -53,6 +55,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class BoardSVCSavedBiomeTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private static IrisPlatform previousPlatform;
@BeforeClass
@@ -7,6 +7,7 @@ import art.arcane.iris.core.runtime.jigsaw.JigsawStudioPieceRules;
import art.arcane.iris.core.runtime.jigsaw.JigsawStudioToolAction;
import art.arcane.iris.core.runtime.jigsaw.JigsawStudioToolPayload;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.common.scheduling.J;
import org.bukkit.ChatColor;
import org.bukkit.Location;
@@ -15,6 +16,7 @@ import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.junit.ClassRule;
import org.junit.Test;
import org.mockito.MockedStatic;
@@ -41,6 +43,9 @@ import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
public class JigsawStudioMenuControllerTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private static final UUID WORLD_ID = UUID.fromString("22222222-2222-2222-2222-222222222222");
private static final UUID REQUEST_ID = UUID.fromString("77777777-7777-7777-7777-777777777777");
private static final JigsawStudioPieceRules RULES = new JigsawStudioPieceRules(1, 12, 2, 8, false);
@@ -36,6 +36,7 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.common.data.B;
import art.arcane.iris.util.common.math.IrisBlockVector;
import art.arcane.iris.util.common.plugin.VolmitPlugin;
@@ -72,6 +73,7 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.world.ChunkLoadEvent;
import org.bukkit.event.world.WorldUnloadEvent;
import org.junit.ClassRule;
import org.junit.Test;
import org.mockito.MockedStatic;
@@ -115,6 +117,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class JigsawStudioServiceCaptureTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Test
public void shutdownQuiesceIsIdempotentAndResetsOnEnable() throws Exception {
@@ -4,6 +4,7 @@ import art.arcane.iris.core.link.MultiverseCoreLink;
import art.arcane.iris.core.link.MultiverseGuardListener;
import art.arcane.iris.platform.bukkit.BukkitPlatform;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.common.plugin.VolmitPlugin;
import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
@@ -11,6 +12,7 @@ import org.bukkit.event.server.PluginDisableEvent;
import org.bukkit.event.server.PluginEnableEvent;
import org.bukkit.plugin.Plugin;
import org.junit.After;
import org.junit.ClassRule;
import org.junit.Test;
import org.mockito.MockedStatic;
@@ -24,6 +26,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class MultiverseSVCTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@After
public void unbindLink() {
IrisServices.remove(MultiverseCoreLink.class);
@@ -8,9 +8,11 @@ import art.arcane.iris.core.pack.PackValidationRegistry;
import art.arcane.iris.core.pack.PackValidationResult;
import art.arcane.iris.engine.framework.PreservationRegistry;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.Assume;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -32,6 +34,9 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
public class StudioSVCWorldPackPublishTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -7,8 +7,10 @@ import art.arcane.iris.engine.history.GenerationPackFingerprint;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformStructureHooks;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -30,6 +32,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class StructureIndexServiceTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -4,8 +4,10 @@ import art.arcane.iris.core.loader.IrisData;
import art.arcane.iris.engine.framework.MeteredCache;
import art.arcane.iris.engine.framework.PreservationRegistry;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -22,6 +24,9 @@ import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertFalse;
public class IrisDataStructureRecoveryTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -20,6 +20,7 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.nbt.io.NBTUtil;
import art.arcane.volmlib.util.nbt.tag.CompoundTag;
@@ -28,6 +29,7 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -53,6 +55,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class VanillaJigsawDatapackExporterTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private static PlatformBlockState stone;
@Rule
@@ -2,8 +2,10 @@ package art.arcane.iris.core.tools;
import art.arcane.iris.core.service.StudioSVC;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.bukkit.World;
import org.junit.After;
import org.junit.ClassRule;
import org.junit.Test;
import java.lang.reflect.Proxy;
@@ -14,6 +16,9 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class IrisToolbeltPackReferenceTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@After
public void cleanServices() {
IrisServices.remove(StudioSVC.class);
@@ -1,13 +1,10 @@
package art.arcane.iris.core.tools;
import art.arcane.iris.engine.object.IrisObject;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.iris.util.common.math.IrisBlockVector;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.ArrayDeque;
@@ -22,11 +19,11 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class TreePlausibilizerTest {
@ClassRule
public static final PlatformBinding PLATFORM = PlatformBinding.mockPlatform();
private static final String OAK_LOG = "minecraft:oak_log[axis=y]";
private static final String BIRCH_LOG = "minecraft:birch_log[axis=y]";
private static final String OAK_LEAVES = "minecraft:oak_leaves[distance=7,persistent=true,waterlogged=false]";
@@ -42,22 +39,6 @@ public class TreePlausibilizerTest {
private record Pos(int x, int y, int z) {
}
@BeforeClass
public static void bindPlatform() {
IrisPlatforms.unbind();
PlatformBlockState defaultBlock = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
IrisPlatform platform = mock(IrisPlatform.class);
when(registries.block(anyString())).thenReturn(defaultBlock);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
}
@AfterClass
public static void unbindPlatform() {
IrisPlatforms.unbind();
}
private static final class TestState implements PlatformBlockState {
private final String key;
@@ -27,6 +27,7 @@ import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.DurabilityMode;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
@@ -71,6 +72,9 @@ import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
public class EngineShutdownDrainTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@ClassRule
public static final DurabilityMode DURABILITY = DurabilityMode.relaxed();
@@ -17,11 +17,13 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.project.context.ChunkContext;
import art.arcane.iris.util.project.context.IrisContext;
import art.arcane.iris.util.project.hunk.Hunk;
import art.arcane.iris.util.project.stream.ProceduralStream;
import art.arcane.volmlib.util.collection.KList;
import org.junit.ClassRule;
import org.junit.Test;
import org.mockito.MockedStatic;
@@ -59,6 +61,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public final class ResolvedTerrainProviderTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Test
public void cachedTransitionTerrainRetainsDeferredBlocksWhenCopied() {
Fixture fixture = new Fixture();
@@ -13,6 +13,7 @@ import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformBiome;
import art.arcane.iris.spi.PlatformBiomeWriter;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.project.context.ChunkContext;
import art.arcane.iris.util.project.context.ChunkedDataCache;
import art.arcane.iris.util.project.hunk.Hunk;
@@ -21,6 +22,7 @@ import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.MatterBiomeInject;
import org.junit.After;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.ArrayList;
@@ -43,6 +45,9 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
public class IrisBiomeActuatorCoordinateTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@After
public void unbindPlatform() {
IrisPlatforms.unbind();
@@ -7,6 +7,7 @@ import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.engine.hydrology.cave.HydrologyCaveAction;
import art.arcane.iris.engine.mantle.TerrainMatterView;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.project.matter.IrisMatterSupport;
import art.arcane.iris.util.project.matter.slices.PreObjectMatterTest;
import art.arcane.volmlib.util.matter.IrisMatter;
@@ -23,6 +24,7 @@ import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.MatterSlice;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import static org.mockito.ArgumentMatchers.anyString;
@@ -32,6 +34,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class IrisDimensionStackActuatorMetadataTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Before
public void bindPlatform() {
IrisPlatforms.unbind();
@@ -9,14 +9,11 @@ import art.arcane.iris.engine.object.IrisDecorationStep;
import art.arcane.iris.engine.object.IrisMaterialPalette;
import art.arcane.iris.engine.object.IrisRiverMaterialConfig;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.math.RNG;
import org.junit.Rule;
import org.junit.Test;
import org.junit.Before;
import org.junit.After;
import java.util.ArrayList;
import java.util.List;
@@ -28,7 +25,6 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyDouble;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.same;
import static org.mockito.Mockito.mock;
@@ -37,27 +33,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class IrisTerrainNormalActuatorHydrologyTest {
private IrisPlatform previousPlatform;
@Rule
public final PlatformBinding platform = PlatformBinding.mockPlatform();
@Before
public void bindPlatform() {
previousPlatform = IrisPlatforms.isBound() ? IrisPlatforms.get() : null;
IrisPlatforms.unbind();
PlatformBlockState block = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
when(registries.block(anyString())).thenReturn(block);
IrisPlatform platform = mock(IrisPlatform.class);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
}
@After
public void restorePlatform() {
IrisPlatforms.unbind();
if (previousPlatform != null) {
IrisPlatforms.bind(previousPlatform);
}
}
@Test
public void hydrologyOwnedFluidBypassesBiomeSeaLayers() {
@@ -12,10 +12,12 @@ import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBiome;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.project.context.ChunkContext;
import art.arcane.iris.util.project.hunk.Hunk;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.ArrayList;
@@ -31,6 +33,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class IrisTransitionGeometryActuatorTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private IrisPlatform previous;
private PlatformRegistries registries;
private PlatformBlockState stone;
@@ -14,7 +14,9 @@ import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.project.hunk.Hunk;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.BeforeClass;
import org.junit.AfterClass;
@@ -31,6 +33,9 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
public class IrisDecoratorCaveContextTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@BeforeClass
public static void bindPlatform() {
IrisPlatforms.unbind();
@@ -14,10 +14,12 @@ import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.project.hunk.Hunk;
import art.arcane.iris.util.project.stream.ProceduralStream;
import org.bukkit.block.BlockSupport;
import org.bukkit.block.data.BlockData;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.BeforeClass;
import org.junit.AfterClass;
@@ -35,6 +37,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class IrisShoreLineDecoratorTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private static final int FLUID_HEIGHT = 4;
@BeforeClass
@@ -19,8 +19,10 @@
package art.arcane.iris.engine.framework;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.volmlib.util.math.RollingSequence;
import org.junit.After;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.concurrent.atomic.AtomicReference;
@@ -28,6 +30,9 @@ import java.util.concurrent.atomic.AtomicReference;
import static org.junit.Assert.assertSame;
public class EngineComponentTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@After
public void removeCleanup() {
IrisServices.remove(EngineComponentCleanup.class);
@@ -12,8 +12,10 @@ import art.arcane.iris.spi.PlatformBiome;
import art.arcane.iris.spi.PlatformBiomeWriter;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.List;
@@ -30,6 +32,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class EngineHostHeightTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Before
public void bindPlatform() {
IrisPlatforms.unbind();
@@ -1,14 +1,12 @@
package art.arcane.iris.engine.framework;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.iris.util.common.parallel.MultiBurst;
import art.arcane.iris.util.project.context.ChunkContext;
import art.arcane.iris.core.IrisSettings;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.List;
@@ -19,29 +17,24 @@ import java.util.concurrent.CopyOnWriteArrayList;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.CALLS_REAL_METHODS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class EngineModeBurstAroundTest {
@ClassRule
public static final PlatformBinding PLATFORM = PlatformBinding.mockPlatform();
private static IrisSettings previousSettings;
@BeforeClass
public static void bindPlatform() {
previousSettings = IrisSettings.settings;
IrisSettings.settings = new IrisSettings();
IrisPlatforms.unbind();
PlatformRegistries registries = mock(PlatformRegistries.class);
IrisPlatform platform = mock(IrisPlatform.class);
when(registries.block(anyString())).thenReturn(mock(PlatformBlockState.class));
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
}
@AfterClass
public static void unbindPlatform() {
IrisPlatforms.unbind();
IrisSettings.settings = previousSettings;
}
@@ -17,6 +17,7 @@ import art.arcane.iris.engine.hydrology.runtime.IrisHydrologyRuntime;
import art.arcane.iris.engine.history.GenerationSemanticIndex;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.project.stream.ProceduralStream;
import art.arcane.iris.util.project.stream.interpolation.Interpolated;
import art.arcane.volmlib.util.collection.KList;
@@ -24,6 +25,7 @@ import art.arcane.volmlib.util.math.Position2;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import java.io.File;
@@ -50,6 +52,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class HintedLocatorTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private static boolean boundPlatform;
@BeforeClass
@@ -34,13 +34,9 @@ import art.arcane.iris.engine.object.IrisObject;
import art.arcane.iris.engine.object.IrisPosition;
import art.arcane.iris.engine.object.IrisStructure;
import art.arcane.iris.engine.object.JigsawJoint;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.volmlib.util.math.RNG;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.List;
@@ -48,26 +44,12 @@ import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class StructureAssemblerCompatTest {
@BeforeClass
public static void bindPlatform() {
IrisPlatforms.unbind();
PlatformBlockState block = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
when(registries.block(anyString())).thenReturn(block);
IrisPlatform platform = mock(IrisPlatform.class);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
}
@AfterClass
public static void unbindPlatform() {
IrisPlatforms.unbind();
}
@ClassRule
public static final PlatformBinding PLATFORM = PlatformBinding.mockPlatform();
@Test
public void anExcludedPieceIsNeverDrawnFromItsPool() {
@@ -34,13 +34,9 @@ import art.arcane.iris.engine.object.IrisObject;
import art.arcane.iris.engine.object.IrisPosition;
import art.arcane.iris.engine.object.IrisStructure;
import art.arcane.iris.engine.object.JigsawJoint;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.volmlib.util.math.RNG;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.List;
@@ -50,26 +46,12 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class StructureAssemblerTest {
@BeforeClass
public static void bindPlatform() {
IrisPlatforms.unbind();
PlatformBlockState block = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
when(registries.block(anyString())).thenReturn(block);
IrisPlatform platform = mock(IrisPlatform.class);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
}
@AfterClass
public static void unbindPlatform() {
IrisPlatforms.unbind();
}
@ClassRule
public static final PlatformBinding PLATFORM = PlatformBinding.mockPlatform();
@Test
public void attachedNonRotatablePieceKeepsItsAuthoredFacing() {
@@ -5,14 +5,10 @@ import art.arcane.iris.engine.object.IrisStructureAnchorMode;
import art.arcane.iris.engine.object.IrisStructurePlacement;
import art.arcane.iris.engine.hydrology.cave.HydrologyCaveAction;
import art.arcane.iris.engine.hydrology.cave.HydrologyCaveCell;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.matter.MatterCavern;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import java.util.Arrays;
@@ -27,7 +23,6 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
@@ -36,21 +31,8 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class StructureCaveAnchorResolverTest {
@Before
public void bindPlatform() {
IrisPlatforms.unbind();
PlatformBlockState block = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
when(registries.block(anyString())).thenReturn(block);
IrisPlatform platform = mock(IrisPlatform.class);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
}
@After
public void unbindPlatform() {
IrisPlatforms.unbind();
}
@Rule
public final PlatformBinding platform = PlatformBinding.mockPlatform();
@Test
public void floorRequiresSolidBoundaryAndUpwardClearance() {
@@ -24,6 +24,8 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformStructureHooks;
import art.arcane.iris.spi.PlatformWorld;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.List;
@@ -35,6 +37,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class StructureReachabilityContractTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Test
public void reachableKeysRejectsNullEngine() {
assertThrows(NullPointerException.class, () -> StructureReachability.reachableKeys(null));
@@ -14,13 +14,9 @@ import art.arcane.iris.engine.object.IrisObject;
import art.arcane.iris.engine.object.IrisPosition;
import art.arcane.iris.engine.object.IrisStructure;
import art.arcane.iris.engine.object.JigsawJoint;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.volmlib.util.collection.KList;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.ArrayList;
@@ -31,26 +27,10 @@ import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class StructureGraphCompilerTest {
@BeforeClass
public static void bindPlatform() {
IrisPlatforms.unbind();
PlatformBlockState block = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
when(registries.block(anyString())).thenReturn(block);
IrisPlatform platform = mock(IrisPlatform.class);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
}
@AfterClass
public static void unbindPlatform() {
IrisPlatforms.unbind();
}
@ClassRule
public static final PlatformBinding PLATFORM = PlatformBinding.mockPlatform();
@Test
public void compilesACompleteTerminalGraphAndSamplesDeterministically() {
@@ -9,7 +9,9 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformGenerationRegistry;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.volmlib.util.collection.KList;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -27,6 +29,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class ArchivedRegistryCompilerTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public final TemporaryFolder temporary = new TemporaryFolder();
@@ -9,6 +9,8 @@ import art.arcane.iris.core.IrisSettings;
import art.arcane.iris.engine.hydrology.cave.HydrologyCavePlan;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.ArrayList;
@@ -23,6 +25,9 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
public class HydrologyPlannerCrossTileCaveAdmissionIntegrationTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private static final long SEED = 77L;
private static final List<TilePair> ADJACENT_PAIRS = List.of(
new TilePair(new HydrologyTileKey(0, -2), new HydrologyTileKey(0, -1)),
@@ -3,10 +3,8 @@ package art.arcane.iris.engine.mantle;
import art.arcane.iris.core.link.Identifier;
import art.arcane.iris.engine.framework.TreeBlockMaterial;
import art.arcane.iris.engine.hydrology.cave.HydrologyCaveCell;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.iris.util.project.matter.PreObjectMatterCell;
import art.arcane.iris.util.project.matter.TileWrapper;
import art.arcane.volmlib.util.mantle.flag.MantleFlag;
@@ -15,7 +13,7 @@ import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.MatterCavern;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.InOrder;
@@ -27,7 +25,6 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Answers.CALLS_REAL_METHODS;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
@@ -38,20 +35,11 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class EngineMantleCleanupTest {
@Before
public void bindPlatform() {
IrisPlatforms.unbind();
PlatformBlockState block = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
when(registries.block(anyString())).thenReturn(block);
IrisPlatform platform = mock(IrisPlatform.class);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
}
@Rule
public final PlatformBinding platform = PlatformBinding.mockPlatform();
@After
public void unbindPlatform() {
IrisPlatforms.unbind();
MantleSliceRetention.clearForTesting();
}
@@ -5,12 +5,14 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.volmlib.util.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.matter.Matter;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.ArrayList;
@@ -34,6 +36,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class EngineMantleCoverageTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Before
public void bindPlatform() {
IrisPlatforms.unbind();
@@ -3,24 +3,19 @@ package art.arcane.iris.engine.mantle;
import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.framework.EnginePlatformHooks;
import art.arcane.iris.engine.object.IrisPosition;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.function.Consumer4;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.MatterMarker;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Answers.CALLS_REAL_METHODS;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
@@ -28,21 +23,8 @@ import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
public class EngineMantleMarkerTest {
@Before
public void bindPlatform() {
IrisPlatforms.unbind();
PlatformBlockState block = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
when(registries.block(anyString())).thenReturn(block);
IrisPlatform platform = mock(IrisPlatform.class);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
}
@After
public void unbindPlatform() {
IrisPlatforms.unbind();
}
@Rule
public final PlatformBinding platform = PlatformBinding.mockPlatform();
@Test
@SuppressWarnings("unchecked")
@@ -7,17 +7,15 @@ import art.arcane.iris.engine.history.TransitionGenerationPlan;
import art.arcane.iris.engine.hydrology.cave.HydrologyCaveAction;
import art.arcane.iris.engine.hydrology.cave.HydrologyCaveCell;
import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.MatterCavern;
import art.arcane.volmlib.util.matter.MatterSlice;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import static org.junit.Assert.assertFalse;
@@ -26,13 +24,15 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class MantleWriterOverlayTest {
@Rule
public final PlatformBinding platform = PlatformBinding.mockPlatform();
private static final int X = 1;
private static final int Y = 2;
private static final int Z = 3;
@@ -51,14 +51,6 @@ public class MantleWriterOverlayTest {
@Before
@SuppressWarnings("unchecked")
public void setUp() {
IrisPlatforms.unbind();
PlatformBlockState defaultBlock = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
IrisPlatform platform = mock(IrisPlatform.class);
when(registries.block(anyString())).thenReturn(defaultBlock);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
engineMantle = mock(EngineMantle.class);
Engine engine = mock(Engine.class);
dimension = mock(IrisDimension.class);
@@ -92,11 +84,6 @@ public class MantleWriterOverlayTest {
writer = new MantleWriter(engineMantle, mantle, 0, 0, 0, false);
}
@After
public void tearDown() {
IrisPlatforms.unbind();
}
@Test
public void existingCavernStillClearsBlockAndDeferredPlacement() {
MatterCavern existing = new MatterCavern(true, "", (byte) 3);
@@ -7,6 +7,7 @@ import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.BukkitTestServer;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.project.matter.IrisMatterSupport;
import art.arcane.iris.util.project.matter.PreObjectMatterCell;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
@@ -18,6 +19,7 @@ import art.arcane.volmlib.util.matter.MatterSlice;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.concurrent.CountDownLatch;
@@ -37,6 +39,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class MantleWriterPreObjectJournalTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private static final int X = 2;
private static final int Y = 5;
private static final int Z = 4;
@@ -3,18 +3,14 @@ package art.arcane.iris.engine.mantle;
import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.framework.EnginePlatformHooks;
import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.iris.util.project.context.ChunkContext;
import art.arcane.volmlib.util.mantle.flag.MantleFlag;
import art.arcane.volmlib.util.mantle.flag.ReservedFlag;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.matter.Matter;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.LinkedHashSet;
@@ -25,33 +21,14 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class MatterGeneratorCarvePassRadiusTest {
private static IrisPlatform previousPlatform;
@ClassRule
public static final PlatformBinding PLATFORM = PlatformBinding.mockPlatform();
@BeforeClass
public static void bindPlatform() {
previousPlatform = IrisPlatforms.isBound() ? IrisPlatforms.get() : null;
IrisPlatforms.unbind();
PlatformBlockState air = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
IrisPlatform platform = mock(IrisPlatform.class);
when(registries.block(anyString())).thenReturn(air);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
}
@AfterClass
public static void restorePlatform() {
IrisPlatforms.unbind();
if (previousPlatform != null) {
IrisPlatforms.bind(previousPlatform);
}
}
@Test
@SuppressWarnings("unchecked")
@@ -8,6 +8,7 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.project.matter.IrisMatterSupport;
import art.arcane.iris.util.project.matter.PreObjectMatterCell;
import art.arcane.iris.util.project.matter.slices.PreObjectMatterTest;
@@ -17,6 +18,7 @@ import art.arcane.volmlib.util.matter.IrisMatter;
import art.arcane.volmlib.util.matter.Matter;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.List;
@@ -39,6 +41,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class ResolvedTerrainPlacementTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private EngineMantle engineMantle;
private Mantle<Matter> mantle;
private PlatformBlockState stone;
@@ -7,17 +7,13 @@ import art.arcane.iris.engine.mantle.MantlePass;
import art.arcane.iris.engine.mantle.EngineMantle;
import art.arcane.iris.engine.mantle.MatterGenerator;
import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.iris.util.project.context.ChunkContext;
import art.arcane.iris.util.project.stream.ProceduralStream;
import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.matter.Matter;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import java.util.ArrayList;
@@ -27,7 +23,6 @@ import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyDouble;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -36,21 +31,8 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class MantleCarvingComponentBoundaryRadiusTest {
@Before
public void bindPlatform() {
IrisPlatforms.unbind();
PlatformBlockState block = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
when(registries.block(anyString())).thenReturn(block);
IrisPlatform platform = mock(IrisPlatform.class);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
}
@After
public void unbindPlatform() {
IrisPlatforms.unbind();
}
@Rule
public final PlatformBinding platform = PlatformBinding.mockPlatform();
@Test
public void boundaryWallResolutionSchedulesAdjacentCarvingChunks() {
@@ -28,13 +28,8 @@ import art.arcane.iris.engine.object.IrisFloatingChildBiomes;
import art.arcane.iris.engine.object.IrisObject;
import art.arcane.iris.engine.object.IrisObjectPlacement;
import art.arcane.iris.engine.object.IrisObjectTranslate;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.volmlib.util.collection.KList;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -44,30 +39,16 @@ import java.io.File;
import java.io.FileOutputStream;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class MantleFloatingObjectComponentBoundaryRadiusTest {
@Rule
public final PlatformBinding platform = PlatformBinding.mockPlatform();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Before
public void bindPlatform() {
IrisPlatforms.unbind();
PlatformBlockState block = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
when(registries.block(anyString())).thenReturn(block);
IrisPlatform platform = mock(IrisPlatform.class);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
}
@After
public void unbindPlatform() {
IrisPlatforms.unbind();
}
@Test
@SuppressWarnings("unchecked")
public void transformedFloatingPlacementExpandsOwnerRadius() throws Exception {
@@ -28,6 +28,7 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.common.math.IrisBlockVector;
import art.arcane.iris.util.project.context.ChunkContext;
import art.arcane.volmlib.util.collection.KList;
@@ -36,6 +37,7 @@ import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.matter.Matter;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -59,6 +61,9 @@ import static org.mockito.Mockito.when;
import static org.mockito.Mockito.verify;
public class MantleObjectComponentBoundaryRadiusTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -9,17 +9,13 @@ import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.engine.object.IrisDimensionCarvingResolver;
import art.arcane.iris.engine.object.IrisRegion;
import art.arcane.iris.engine.object.IrisWorld;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.iris.util.project.hunk.Hunk;
import art.arcane.iris.util.project.stream.ProceduralStream;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.matter.MatterCavern;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import java.lang.reflect.Field;
@@ -30,27 +26,13 @@ import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.mockito.ArgumentMatchers.anyDouble;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.CALLS_REAL_METHODS;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
public class IrisCarveModifierInferenceIsolationTest {
@BeforeClass
public static void bindPlatform() {
IrisPlatforms.unbind();
PlatformBlockState block = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
doReturn(block).when(registries).block(anyString());
IrisPlatform platform = mock(IrisPlatform.class);
doReturn(registries).when(platform).registries();
IrisPlatforms.bind(platform);
}
@AfterClass
public static void unbindPlatform() {
IrisPlatforms.unbind();
}
@ClassRule
public static final PlatformBinding PLATFORM = PlatformBinding.mockPlatform();
@Test
@SuppressWarnings("unchecked")
@@ -6,10 +6,8 @@ import art.arcane.iris.engine.object.IrisDepositGenerator;
import art.arcane.iris.engine.object.IrisDepositHeightDistribution;
import art.arcane.iris.engine.object.IrisDepositPlacementScope;
import art.arcane.iris.engine.object.IrisObject;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.iris.util.common.parallel.BurstExecutor;
import art.arcane.iris.util.common.parallel.MultiBurst;
import art.arcane.iris.util.project.context.ChunkContext;
@@ -20,9 +18,8 @@ import art.arcane.volmlib.util.mantle.runtime.Mantle;
import art.arcane.volmlib.util.mantle.runtime.MantleChunk;
import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.math.RNG;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -37,7 +34,6 @@ import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
@@ -49,21 +45,8 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class IrisDepositModifierContextTest {
@BeforeClass
public static void bindPlatform() {
IrisPlatforms.unbind();
PlatformBlockState block = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
when(registries.block(anyString())).thenReturn(block);
IrisPlatform platform = mock(IrisPlatform.class);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
}
@AfterClass
public static void unbindPlatform() {
IrisPlatforms.unbind();
}
@ClassRule
public static final PlatformBinding PLATFORM = PlatformBinding.mockPlatform();
@Test
public void workerDepositsRetainRuntimeAndChunkContextUntilCompletion() throws Exception {
@@ -9,6 +9,7 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.common.data.B;
import art.arcane.iris.util.common.math.IrisBlockVector;
import art.arcane.iris.util.common.parallel.BurstExecutor;
@@ -22,6 +23,7 @@ import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.math.RNG;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.mockito.MockedStatic;
@@ -48,6 +50,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class IrisDepositModifierOrderingTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Before
public void bindPlatform() {
IrisPlatforms.unbind();
@@ -13,6 +13,7 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.common.data.B;
import art.arcane.iris.util.common.parallel.MultiBurst;
import art.arcane.iris.util.project.context.ChunkContext;
@@ -24,6 +25,7 @@ import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.MatterCavern;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.mockito.MockedStatic;
@@ -44,6 +46,9 @@ import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.when;
public class IrisDepositModifierParityTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private final Map<String, PlatformBlockState> states = new HashMap<>();
@Before
@@ -8,10 +8,10 @@ import art.arcane.iris.core.loader.ResourceLoader;
import art.arcane.volmlib.util.collection.KList;
import org.junit.Test;
import static art.arcane.iris.engine.object.CompatFixtures.MISSING_BLOCK;
import static art.arcane.iris.engine.object.CompatFixtures.biome;
import static art.arcane.iris.engine.object.CompatFixtures.excludeBlock;
import static art.arcane.iris.engine.object.CompatFixtures.find;
import static art.arcane.iris.engine.object.PackCompatFixtures.MISSING_BLOCK;
import static art.arcane.iris.engine.object.PackCompatFixtures.biome;
import static art.arcane.iris.engine.object.PackCompatFixtures.excludeBlock;
import static art.arcane.iris.engine.object.PackCompatFixtures.find;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
@@ -23,7 +23,7 @@ import static org.mockito.Mockito.when;
public class IrisBiomeCompatChildrenTest {
@SuppressWarnings("unchecked")
private static IrisData dataWith(PackCompatReport report, IrisBiome... biomes) {
IrisData data = CompatFixtures.data(report);
IrisData data = PackCompatFixtures.data(report);
ResourceLoader<IrisBiome> biomeLoader = mock(ResourceLoader.class);
when(data.getBiomeLoader()).thenReturn(biomeLoader);
for (IrisBiome biome : biomes) {
@@ -12,7 +12,7 @@ import static org.junit.Assert.assertEquals;
public class IrisBiomeDerivativeCompatTest {
@Test
public void droppedVanillaDerivativeFallsBackToDerivative() {
IrisBiome biome = CompatFixtures.biome("cave/sulfur-grotto");
IrisBiome biome = PackCompatFixtures.biome("cave/sulfur-grotto");
biome.setDerivative("minecraft:dripstone_caves");
biome.setVanillaDerivative("minecraft:sulfur_caves");
@@ -25,7 +25,7 @@ public class IrisBiomeDerivativeCompatTest {
@Test
public void blankVanillaDerivativeFallsBackToDerivative() {
IrisBiome biome = CompatFixtures.biome("cave/sulfur-grotto");
IrisBiome biome = PackCompatFixtures.biome("cave/sulfur-grotto");
biome.setDerivative("minecraft:dripstone_caves");
biome.setVanillaDerivative("");
@@ -12,10 +12,10 @@ import org.junit.Test;
import java.util.Map;
import static art.arcane.iris.engine.object.CompatFixtures.MISSING_BLOCK;
import static art.arcane.iris.engine.object.CompatFixtures.excludeBlock;
import static art.arcane.iris.engine.object.CompatFixtures.find;
import static art.arcane.iris.engine.object.CompatFixtures.region;
import static art.arcane.iris.engine.object.PackCompatFixtures.MISSING_BLOCK;
import static art.arcane.iris.engine.object.PackCompatFixtures.excludeBlock;
import static art.arcane.iris.engine.object.PackCompatFixtures.find;
import static art.arcane.iris.engine.object.PackCompatFixtures.region;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -26,7 +26,7 @@ import static org.mockito.Mockito.when;
public class IrisDimensionCompatRegionTest {
@SuppressWarnings("unchecked")
private static IrisData dataWith(PackCompatReport report, IrisRegion... regions) {
IrisData data = CompatFixtures.data(report);
IrisData data = PackCompatFixtures.data(report);
ResourceLoader<IrisRegion> regionLoader = mock(ResourceLoader.class);
when(data.getRegionLoader()).thenReturn(regionLoader);
for (IrisRegion region : regions) {
@@ -176,7 +176,7 @@ public class IrisDimensionReachableBiomesTest {
.setLandBiomes(new KList<>("plains"))
.setCaveBiomes(new KList<>("carving/sulfur"));
IrisBiome plains = biome("plains");
IrisBiome sulfur = CompatFixtures.excludeBlock(biome("carving/sulfur"))
IrisBiome sulfur = PackCompatFixtures.excludeBlock(biome("carving/sulfur"))
.setChildren(new KList<>("carving/sulfur-hollows"));
IrisData data = mock(IrisData.class);
@@ -14,8 +14,8 @@ import org.junit.Test;
import java.util.List;
import java.util.Map;
import static art.arcane.iris.engine.object.CompatFixtures.find;
import static art.arcane.iris.engine.object.CompatFixtures.lootTable;
import static art.arcane.iris.engine.object.PackCompatFixtures.find;
import static art.arcane.iris.engine.object.PackCompatFixtures.lootTable;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -26,7 +26,7 @@ import static org.mockito.Mockito.when;
public class IrisLootTableCompatTest {
@SuppressWarnings("unchecked")
private static IrisData dataWith(PackCompatReport report, IrisLootTable... tables) {
IrisData data = CompatFixtures.data(report);
IrisData data = PackCompatFixtures.data(report);
ResourceLoader<IrisLootTable> lootLoader = mock(ResourceLoader.class);
when(data.getLootLoader()).thenReturn(lootLoader);
for (IrisLootTable table : tables) {
@@ -43,7 +43,7 @@ public class IrisLootTableCompatTest {
public void evaluateCompatExcludesTableWhoseEntriesWereAllDropped() {
PackCompatReport report = new PackCompatReport();
IrisLootTable table = lootTable("chest/sulfur-cache");
table.setLoader(CompatFixtures.data(report));
table.setLoader(PackCompatFixtures.data(report));
// The gate walker drops every entry with a missing item and hands the cascade its reasons.
CompatStatus walked = new CompatStatus(false, List.of(new CompatFinding(CompatRegistry.ITEM,
"minecraft:sulfur_dust", CompatAction.DROPPED, "loot", "chest/sulfur-cache", "loot[0]")));
@@ -62,7 +62,7 @@ public class IrisLootTableCompatTest {
public void evaluateCompatKeepsTableWithSurvivingEntries() {
PackCompatReport report = new PackCompatReport();
IrisLootTable table = lootTable("chest/mixed");
table.setLoader(CompatFixtures.data(report));
table.setLoader(PackCompatFixtures.data(report));
table.setLoot(new KList<>(new IrisLoot()));
CompatStatus walked = new CompatStatus(false, List.of(new CompatFinding(CompatRegistry.ITEM,
"minecraft:sulfur_dust", CompatAction.DROPPED, "loot", "chest/mixed", "loot[1]")));
@@ -74,7 +74,7 @@ public class IrisLootTableCompatTest {
public void evaluateCompatKeepsTableThatNeverDeclaredLoot() {
PackCompatReport report = new PackCompatReport();
IrisLootTable table = lootTable("chest/empty");
table.setLoader(CompatFixtures.data(report));
table.setLoader(PackCompatFixtures.data(report));
assertFalse(table.evaluateCompat(gate(report)).excluded());
assertTrue(report.isEmpty());
@@ -84,7 +84,7 @@ public class IrisLootTableCompatTest {
public void lootReferenceSkipsExcludedAndUnloadableTables() {
PackCompatReport report = new PackCompatReport();
IrisLootTable kept = lootTable("chest/common");
IrisLootTable excluded = CompatFixtures.exclude(lootTable("chest/sulfur-cache"),
IrisLootTable excluded = PackCompatFixtures.exclude(lootTable("chest/sulfur-cache"),
CompatRegistry.ITEM, "minecraft:sulfur_dust");
IrisData data = dataWith(report, kept, excluded);
IrisLootReference reference = new IrisLootReference()
@@ -7,6 +7,7 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.collection.KMap;
import art.arcane.volmlib.util.math.RNG;
@@ -15,6 +16,7 @@ import org.bukkit.block.BlockFace;
import org.bukkit.block.data.Directional;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.ArrayList;
@@ -40,6 +42,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class IrisObjectPlacementRunnerRegressionTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private static final int ANCHOR_Y = 80;
private IrisData data;
@@ -4,9 +4,11 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.common.math.IrisBlockVector;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.ArrayList;
@@ -23,6 +25,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class IrisObjectShapingTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Before
public void bindPlatform() {
IrisPlatforms.unbind();
@@ -3,14 +3,12 @@ package art.arcane.iris.engine.object;
import art.arcane.iris.core.loader.IrisData;
import art.arcane.iris.engine.IrisComplex;
import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.iris.util.project.stream.ProceduralStream;
import art.arcane.volmlib.util.math.RNG;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import java.util.HashMap;
@@ -23,13 +21,15 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyDouble;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class IrisObjectSurfaceSupportPlacementTest {
@Rule
public final PlatformBinding platform = PlatformBinding.mockPlatform();
private static final int SURFACE_Y = 80;
private IrisData data;
@@ -38,14 +38,6 @@ public class IrisObjectSurfaceSupportPlacementTest {
@Before
public void bindPlatform() {
IrisPlatforms.unbind();
PlatformBlockState block = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
when(registries.block(anyString())).thenReturn(block);
IrisPlatform platform = mock(IrisPlatform.class);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
@SuppressWarnings("unchecked")
ProceduralStream<Double> heightStream = mock(ProceduralStream.class);
when(heightStream.get(anyDouble(), anyDouble())).thenReturn((double) SURFACE_Y);
@@ -59,11 +51,6 @@ public class IrisObjectSurfaceSupportPlacementTest {
when(data.getEngine()).thenReturn(engine);
}
@After
public void unbindPlatform() {
IrisPlatforms.unbind();
}
@Test
public void carvedAnchorColumnSkipsEverySurfaceAnchoredMode() {
for (ObjectPlaceMode mode : new ObjectPlaceMode[]{
@@ -4,11 +4,13 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.common.math.IrisBlockVector;
import art.arcane.iris.util.common.math.Vector3i;
import art.arcane.volmlib.util.collection.KMap;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.Collections;
@@ -30,6 +32,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class IrisObjectTransformsTileTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Before
public void bindPlatform() {
IrisPlatforms.unbind();
@@ -13,10 +13,10 @@ import org.junit.Test;
import java.util.Map;
import static art.arcane.iris.engine.object.CompatFixtures.MISSING_BLOCK;
import static art.arcane.iris.engine.object.CompatFixtures.biome;
import static art.arcane.iris.engine.object.CompatFixtures.excludeBlock;
import static art.arcane.iris.engine.object.CompatFixtures.find;
import static art.arcane.iris.engine.object.PackCompatFixtures.MISSING_BLOCK;
import static art.arcane.iris.engine.object.PackCompatFixtures.biome;
import static art.arcane.iris.engine.object.PackCompatFixtures.excludeBlock;
import static art.arcane.iris.engine.object.PackCompatFixtures.find;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -27,7 +27,7 @@ import static org.mockito.Mockito.when;
public class IrisRegionCompatPoolTest {
@SuppressWarnings("unchecked")
private static IrisData dataWith(PackCompatReport report, IrisBiome... biomes) {
IrisData data = CompatFixtures.data(report);
IrisData data = PackCompatFixtures.data(report);
ResourceLoader<IrisBiome> biomeLoader = mock(ResourceLoader.class);
when(data.getBiomeLoader()).thenReturn(biomeLoader);
for (IrisBiome biome : biomes) {
@@ -46,7 +46,7 @@ public class IrisRegionCompatPoolTest {
IrisBiome plains = biome("land/plains");
IrisBiome sulfur = excludeBlock(biome("cave/sulfur-grotto"));
IrisData data = dataWith(report, plains, sulfur);
IrisRegion region = CompatFixtures.region("overworld");
IrisRegion region = PackCompatFixtures.region("overworld");
region.setLoader(data);
region.setLandBiomes(new KList<>("land/plains", "cave/sulfur-grotto"));
@@ -66,7 +66,7 @@ public class IrisRegionCompatPoolTest {
PackCompatReport report = new PackCompatReport();
IrisBiome shore = biome("shore/sand");
IrisData data = dataWith(report, shore);
IrisRegion region = CompatFixtures.region("overworld");
IrisRegion region = PackCompatFixtures.region("overworld");
region.setLoader(data);
region.setSeaBiomes(new KList<>("sea/gone"));
region.setShoreBiomes(new KList<>("shore/sand"));
@@ -86,7 +86,7 @@ public class IrisRegionCompatPoolTest {
sulfur.setChildren(new KList<>("cave/sulfur-deep"));
IrisBiome sulfurDeep = biome("cave/sulfur-deep");
IrisData data = dataWith(report, plains, sulfur, sulfurDeep);
IrisRegion region = CompatFixtures.region("overworld");
IrisRegion region = PackCompatFixtures.region("overworld");
region.setLoader(data);
region.setLandBiomes(new KList<>("land/plains"));
region.setCaveBiomes(new KList<>("cave/sulfur-grotto"));
@@ -102,7 +102,7 @@ public class IrisRegionCompatPoolTest {
PackCompatReport report = new PackCompatReport();
IrisBiome sulfur = excludeBlock(biome("cave/sulfur-flats"));
IrisData data = dataWith(report, sulfur);
IrisRegion region = CompatFixtures.region("sulfur-lands");
IrisRegion region = PackCompatFixtures.region("sulfur-lands");
region.setLoader(data);
region.setLandBiomes(new KList<>("cave/sulfur-flats"));
@@ -122,7 +122,7 @@ public class IrisRegionCompatPoolTest {
IrisBiome plains = biome("land/plains");
IrisBiome sulfur = excludeBlock(biome("cave/sulfur-flats"));
IrisData data = dataWith(report, plains, sulfur);
IrisRegion region = CompatFixtures.region("overworld");
IrisRegion region = PackCompatFixtures.region("overworld");
region.setLoader(data);
region.setLandBiomes(new KList<>("land/plains", "cave/sulfur-flats"));
@@ -133,7 +133,7 @@ public class IrisRegionCompatPoolTest {
public void evaluateCompatDoesNotExcludeRegionThatNeverDeclaredLandBiomes() {
PackCompatReport report = new PackCompatReport();
IrisData data = dataWith(report);
IrisRegion region = CompatFixtures.region("empty");
IrisRegion region = PackCompatFixtures.region("empty");
region.setLoader(data);
assertFalse(region.evaluateCompat(gate(report)).excluded());
@@ -14,10 +14,10 @@ import org.junit.Test;
import java.util.Map;
import static art.arcane.iris.engine.object.CompatFixtures.MISSING_ENTITY;
import static art.arcane.iris.engine.object.CompatFixtures.entity;
import static art.arcane.iris.engine.object.CompatFixtures.excludeEntity;
import static art.arcane.iris.engine.object.CompatFixtures.find;
import static art.arcane.iris.engine.object.PackCompatFixtures.MISSING_ENTITY;
import static art.arcane.iris.engine.object.PackCompatFixtures.entity;
import static art.arcane.iris.engine.object.PackCompatFixtures.excludeEntity;
import static art.arcane.iris.engine.object.PackCompatFixtures.find;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -30,7 +30,7 @@ import static org.mockito.Mockito.when;
public class IrisSpawnerCompatTest {
@SuppressWarnings("unchecked")
private static IrisData dataWith(PackCompatReport report, IrisEntity... entities) {
IrisData data = CompatFixtures.data(report);
IrisData data = PackCompatFixtures.data(report);
ResourceLoader<IrisEntity> entityLoader = mock(ResourceLoader.class);
when(data.getEntityLoader()).thenReturn(entityLoader);
for (IrisEntity entity : entities) {
@@ -8,6 +8,7 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.common.math.IrisBlockVector;
import art.arcane.iris.util.project.hunk.Hunk;
import art.arcane.iris.util.project.matter.TileWrapper;
@@ -19,6 +20,7 @@ import art.arcane.volmlib.util.matter.Matter;
import art.arcane.volmlib.util.matter.MatterSlice;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.HashMap;
@@ -40,6 +42,9 @@ import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
public class IrisStaticObjectLayerTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private final Map<String, PlatformBlockState> states = new HashMap<>();
private IrisData data;
private ResourceLoader<IrisObject> loader;
@@ -4,16 +4,14 @@ import art.arcane.iris.core.loader.IrisData;
import art.arcane.iris.engine.IrisComplex;
import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.framework.NativeStructureVolume;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformBinding;
import art.arcane.iris.util.common.math.Vector3i;
import art.arcane.iris.util.project.stream.ProceduralStream;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.math.RNG;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import java.util.ArrayList;
@@ -23,11 +21,13 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class NativeStructureObjectVetoTest {
@Rule
public final PlatformBinding platform = PlatformBinding.mockPlatform();
private static final int SURFACE_Y = 80;
private IrisData data;
@@ -36,14 +36,6 @@ public class NativeStructureObjectVetoTest {
@Before
public void bindPlatform() {
IrisPlatforms.unbind();
PlatformBlockState block = mock(PlatformBlockState.class);
PlatformRegistries registries = mock(PlatformRegistries.class);
when(registries.block(anyString())).thenReturn(block);
IrisPlatform platform = mock(IrisPlatform.class);
when(platform.registries()).thenReturn(registries);
IrisPlatforms.bind(platform);
log = state("minecraft:oak_log", true);
@SuppressWarnings("unchecked")
ProceduralStream<Double> heightStream = mock(ProceduralStream.class);
@@ -58,11 +50,6 @@ public class NativeStructureObjectVetoTest {
when(data.getEngine()).thenReturn(engine);
}
@After
public void unbindPlatform() {
IrisPlatforms.unbind();
}
@Test
public void objectPlacesWhenNoNativeStructureIsNear() {
RecordingPlacer placer = new RecordingPlacer(engine);
@@ -17,11 +17,11 @@ import static org.mockito.Mockito.when;
* Shared fixtures for the version-content pool cascade tests. The gate walker (lane L1) is not exercised here: the
* tests stamp {@code compat} on a registrant directly, which is exactly what the walker stores.
*/
final class CompatFixtures {
final class PackCompatFixtures {
static final String MISSING_BLOCK = "minecraft:sulfur";
static final String MISSING_ENTITY = "minecraft:camel";
private CompatFixtures() {
private PackCompatFixtures() {
}
static IrisData data(PackCompatReport report) {
@@ -13,6 +13,7 @@ import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.IrisServices;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.common.scheduling.J;
import art.arcane.iris.util.project.matter.TileWrapper;
import art.arcane.iris.util.project.matter.slices.PreObjectMatterTest;
@@ -30,6 +31,7 @@ import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;
import org.junit.ClassRule;
import org.junit.Test;
import org.mockito.InOrder;
import org.mockito.MockedStatic;
@@ -59,6 +61,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class EngineBukkitOpsDeferredMaterializationTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Test
@SuppressWarnings("unchecked")
public void savedMantlePlacementUsesCurrentProviderWithoutReadingCurrentMantle() {
@@ -1,7 +1,9 @@
package art.arcane.iris.spi;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.ArrayList;
@@ -24,6 +26,9 @@ import static org.mockito.Mockito.verify;
* exactly one warning and would otherwise repeat per block, per sample or per chunk.
*/
public class IrisLoggingTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private final List<LogLevel> levels = new ArrayList<>();
private final List<String> messages = new ArrayList<>();
private IrisPlatform capturingPlatform;
@@ -1,7 +1,9 @@
package art.arcane.iris.spi;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import static org.junit.Assert.assertFalse;
@@ -10,6 +12,9 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
public class IrisPlatformsBindLifecycleTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Before
public void resetBinding() {
IrisPlatforms.unbind();
@@ -18,12 +18,17 @@
package art.arcane.iris.spi;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.ClassRule;
import org.junit.Test;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
public class IrisServicesTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Test
public void removeThenReregisterRebindsService() {
Sample first = new Sample();
@@ -5,6 +5,9 @@ import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.block.data.BlockData;
import org.bukkit.plugin.PluginManager;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import org.mockito.invocation.InvocationOnMock;
import java.util.Locale;
@@ -18,6 +21,8 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
public final class BukkitTestServer {
private static final String DEFAULT_NAME = "IrisTestServer";
private static final String DEFAULT_VERSION = "1.0";
private static final Object LOCK = new Object();
private static volatile Server installed;
@@ -46,9 +51,7 @@ public final class BukkitTestServer {
Server server = mock(Server.class);
doReturn(Logger.getLogger("IrisTest")).when(server).getLogger();
doReturn(mock(PluginManager.class)).when(server).getPluginManager();
doReturn("IrisTestServer").when(server).getName();
doReturn("1.0").when(server).getVersion();
doReturn("1.0").when(server).getBukkitVersion();
applyBranding(server, DEFAULT_NAME, DEFAULT_VERSION);
doAnswer((InvocationOnMock invocation) -> blockData(invocation.getArgument(0, Material.class).name().toLowerCase(Locale.ROOT)))
.when(server).createBlockData(any(Material.class));
doAnswer((InvocationOnMock invocation) -> blockData(invocation.getArgument(0, String.class)))
@@ -67,13 +70,51 @@ public final class BukkitTestServer {
}
}
public static void brand(String name, String version) {
Server server = install();
public static ServerBranding branding() {
return new ServerBranding();
}
private static void applyBranding(Server server, String name, String version) {
doReturn(name).when(server).getName();
doReturn(version).when(server).getVersion();
doReturn(version).when(server).getBukkitVersion();
}
public static final class ServerBranding implements TestRule {
private boolean applied;
private ServerBranding() {
}
public void set(String name, String version) {
applyBranding(install(), name, version);
applied = true;
}
@Override
public Statement apply(Statement base, Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
try {
base.evaluate();
} finally {
restore();
}
}
};
}
private void restore() {
if (!applied) {
return;
}
applied = false;
applyBranding(install(), DEFAULT_NAME, DEFAULT_VERSION);
}
}
public static BlockData blockData(String key) {
String canonical = key.indexOf(':') >= 0 ? key : "minecraft:" + key;
BlockData data = mock(BlockData.class);
@@ -0,0 +1,52 @@
package art.arcane.iris.testsupport;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.IrisServices;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeSet;
public final class IrisRuntimeState {
private static final Map<Class<?>, Object> SERVICES = services();
private IrisRuntimeState() {
}
public static boolean platformBound() {
return IrisPlatforms.isBound();
}
public static List<String> registeredServices() {
TreeSet<String> names = new TreeSet<>();
for (Class<?> type : SERVICES.keySet()) {
names.add(type.getName());
}
return Collections.unmodifiableList(new ArrayList<>(names));
}
public static void reset() {
IrisPlatforms.unbind();
IrisServices.clear();
}
private static Map<Class<?>, Object> services() {
try {
Field field = IrisServices.class.getDeclaredField("SERVICES");
field.setAccessible(true);
return castServices(field.get(null));
} catch (ReflectiveOperationException e) {
throw new IllegalStateException("IrisServices no longer exposes its backing map to the test guard", e);
}
}
@SuppressWarnings("unchecked")
private static Map<Class<?>, Object> castServices(Object value) {
return (Map<Class<?>, Object>) value;
}
}
@@ -0,0 +1,99 @@
package art.arcane.iris.testsupport;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import java.util.function.Supplier;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public final class PlatformBinding implements TestRule {
private final Supplier<IrisPlatform> factory;
private IrisPlatform platform;
private PlatformRegistries registries;
private PlatformBlockState block;
private PlatformBinding(Supplier<IrisPlatform> factory) {
this.factory = factory;
}
public static PlatformBinding mockPlatform() {
return new PlatformBinding(null);
}
public static PlatformBinding of(Supplier<IrisPlatform> factory) {
if (factory == null) {
throw new IllegalArgumentException("A platform factory is required");
}
return new PlatformBinding(factory);
}
public IrisPlatform platform() {
if (platform == null) {
throw new IllegalStateException("The platform binding rule is not active");
}
return platform;
}
public PlatformRegistries registries() {
if (registries == null) {
registries = platform().registries();
}
return registries;
}
public PlatformBlockState block() {
if (block == null) {
block = registries().block("minecraft:stone");
}
return block;
}
@Override
public Statement apply(Statement base, Description description) {
String scope = description.getDisplayName();
return new Statement() {
@Override
public void evaluate() throws Throwable {
PlatformLeakGuard.requireClean(scope, "start");
bind();
try {
base.evaluate();
} finally {
IrisPlatforms.unbind();
platform = null;
registries = null;
block = null;
PlatformLeakGuard.requireClean(scope, "end");
}
}
};
}
private void bind() {
if (factory == null) {
block = mock(PlatformBlockState.class);
registries = mock(PlatformRegistries.class);
when(registries.block(anyString())).thenReturn(block);
platform = mock(IrisPlatform.class);
when(platform.registries()).thenReturn(registries);
} else {
platform = factory.get();
}
IrisPlatforms.bind(platform);
}
}
@@ -0,0 +1,64 @@
package art.arcane.iris.testsupport;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import java.util.List;
public final class PlatformLeakGuard implements TestRule {
private PlatformLeakGuard() {
}
public static PlatformLeakGuard clean() {
return new PlatformLeakGuard();
}
public static void requireClean(String scope, String phase) {
boolean bound = IrisRuntimeState.platformBound();
List<String> services = IrisRuntimeState.registeredServices();
if (!bound && services.isEmpty()) {
return;
}
IrisRuntimeState.reset();
throw new AssertionError(describe(scope, phase, bound, services));
}
@Override
public Statement apply(Statement base, Description description) {
String scope = description.getDisplayName();
return new Statement() {
@Override
public void evaluate() throws Throwable {
requireClean(scope, "start");
try {
base.evaluate();
} finally {
requireClean(scope, "end");
}
}
};
}
private static String describe(String scope, String phase, boolean bound, List<String> services) {
StringBuilder message = new StringBuilder("Iris runtime state is dirty at ")
.append(phase)
.append(" of ")
.append(scope)
.append(':');
if (bound) {
message.append(" platform still bound;");
}
if (!services.isEmpty()) {
message.append(" services still registered ").append(services).append(';');
}
return message.toString();
}
}
@@ -5,9 +5,11 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.spi.PlatformRegistries;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.project.hunk.view.ChunkDataHunkHolder;
import org.bukkit.generator.ChunkGenerator;
import org.junit.After;
import org.junit.ClassRule;
import org.junit.Test;
import java.lang.reflect.Field;
@@ -24,6 +26,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class PlatformStateRebindTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
private static final List<String> CONVERTED = List.of(
"art.arcane.iris.engine.actuator.IrisDimensionStackActuator",
"art.arcane.iris.engine.actuator.IrisTerrainNormalActuator",
@@ -6,6 +6,8 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.object.IrisDimension;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -28,6 +30,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class DirectorAuthoringDataTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public final TemporaryFolder temporary = new TemporaryFolder();
@@ -17,8 +17,10 @@ import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformStructureHooks;
import art.arcane.iris.spi.PlatformWorld;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.volmlib.util.collection.KList;
import art.arcane.volmlib.util.director.exceptions.DirectorParsingException;
import org.junit.ClassRule;
import org.junit.Test;
import java.util.LinkedHashSet;
@@ -36,6 +38,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class StructureHandlerTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Test
public void registeredEligibilityMatchesFindExecutionTruthTable() {
IrisNativeStructureDecision replacement = decision(NativeStructureGenerationStatus.REPLACED_BY_IRIS);
@@ -2,11 +2,13 @@ package art.arcane.iris.util.common.misc;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.volmlib.util.io.IO;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpServer;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -34,6 +36,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class WebCacheTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Rule
public TemporaryFolder temp = new TemporaryFolder();
@@ -3,8 +3,10 @@ package art.arcane.iris.util.common.scheduling;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.spi.PlatformScheduler;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import static org.junit.Assert.assertNotEquals;
@@ -17,6 +19,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class JHybridPlatformTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Before
public void clearPlatform() {
IrisPlatforms.unbind();
@@ -5,8 +5,10 @@ import art.arcane.iris.engine.hydrology.runtime.IrisHydrologyRuntime;
import art.arcane.iris.engine.object.IrisBiome;
import art.arcane.iris.engine.object.IrisRegion;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import art.arcane.iris.util.project.stream.ProceduralStream;
import org.bukkit.block.data.BlockData;
import org.junit.ClassRule;
import org.junit.Test;
import org.mockito.MockedStatic;
@@ -29,6 +31,9 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
public class ChunkContextPrefillPlanTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Test
public void noCavePrefillSkipsCaveCacheFill() {
AtomicInteger caveCalls = new AtomicInteger();
@@ -2,7 +2,9 @@ package art.arcane.iris.util.project.matter.slices;
import art.arcane.iris.spi.IrisPlatform;
import art.arcane.iris.spi.IrisPlatforms;
import art.arcane.iris.testsupport.PlatformLeakGuard;
import org.bukkit.World;
import org.junit.ClassRule;
import org.junit.Test;
import static org.junit.Assert.assertNotNull;
@@ -11,6 +13,9 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class IrisMatterPlatformSelectionTest {
@ClassRule
public static final PlatformLeakGuard PLATFORM_GUARD = PlatformLeakGuard.clean();
@Test
public void hybridClasspathDoesNotEnableBukkitMatterIoForModdedPlatform() {
IrisPlatform platform = mock(IrisPlatform.class);