From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Mon, 13 Feb 2023 14:14:56 -0800 Subject: [PATCH] Test changes diff --git a/build.gradle.kts b/build.gradle.kts index 0ced1beb116b1dc43a79415aa154d32cb22d23d0..067440c8cb05bee3539303716a93a4369849a5af 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,6 +12,7 @@ dependencies { implementation("org.apache.logging.log4j:log4j-iostreams:2.19.0") // Paper - remove exclusion implementation("org.ow2.asm:asm:9.5") implementation("org.ow2.asm:asm-commons:9.5") // Paper - ASM event executor generation + testImplementation("org.mockito:mockito-core:4.9.0") // Paper - switch to mockito implementation("commons-lang:commons-lang:2.6") runtimeOnly("org.xerial:sqlite-jdbc:3.43.0.0") runtimeOnly("com.mysql:mysql-connector-j:8.1.0") @@ -59,6 +60,12 @@ tasks.compileJava { options.setIncremental(false) } +// Paper start - compile tests with -parameters for better junit parameterized test names +tasks.compileTestJava { + options.compilerArgs.add("-parameters") +} +// Paper end + publishing { publications.create("maven") { artifact(tasks.shadowJar) diff --git a/src/test/java/io/papermc/paper/testing/DummyServer.java b/src/test/java/io/papermc/paper/testing/DummyServer.java new file mode 100644 index 0000000000000000000000000000000000000000..fd40d6818fe6b511a57f60896cf523a5e871af64 --- /dev/null +++ b/src/test/java/io/papermc/paper/testing/DummyServer.java @@ -0,0 +1,66 @@ +package io.papermc.paper.testing; + +import java.util.logging.Logger; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.Server; +import org.bukkit.command.SimpleCommandMap; +import org.bukkit.craftbukkit.CraftRegistry; +import org.bukkit.craftbukkit.block.data.CraftBlockData; +import org.bukkit.craftbukkit.inventory.CraftItemFactory; +import org.bukkit.craftbukkit.util.CraftMagicNumbers; +import org.bukkit.craftbukkit.util.CraftNamespacedKey; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.SimplePluginManager; +import org.bukkit.support.AbstractTestingBase; +import org.mockito.Mockito; + +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public final class DummyServer { + + @SuppressWarnings({"deprecation", "removal"}) + public static void setup() { + //noinspection ConstantValue + if (Bukkit.getServer() != null) { + return; + } + + final Server dummyServer = mock(Server.class, Mockito.withSettings().stubOnly()); + + final Logger logger = Logger.getLogger(DummyServer.class.getCanonicalName()); + when(dummyServer.getLogger()).thenReturn(logger); + when(dummyServer.getName()).thenReturn(DummyServer.class.getSimpleName()); + when(dummyServer.getVersion()).thenReturn("Version_" + DummyServer.class.getPackage().getImplementationVersion()); + when(dummyServer.getBukkitVersion()).thenReturn("BukkitVersion_" + DummyServer.class.getPackage().getImplementationVersion()); + + final Thread currentThread = Thread.currentThread(); + when(dummyServer.isPrimaryThread()).thenAnswer(ignored -> Thread.currentThread().equals(currentThread)); + + when(dummyServer.getItemFactory()).thenReturn(CraftItemFactory.instance()); + + when(dummyServer.getUnsafe()).thenAnswer(ignored -> CraftMagicNumbers.INSTANCE); // lambda for lazy load + + when(dummyServer.createBlockData(any(Material.class))).thenAnswer(invocation -> { + return CraftBlockData.newData(invocation.getArgument(0, Material.class), null); + }); + + when(dummyServer.getLootTable(any(NamespacedKey.class))).thenAnswer(invocation -> { + final NamespacedKey key = invocation.getArgument(0, NamespacedKey.class); + return new org.bukkit.craftbukkit.CraftLootTable(key, AbstractTestingBase.DATA_PACK.getLootData().getLootTable(CraftNamespacedKey.toMinecraft(key))); + }); + + when(dummyServer.getRegistry(any())).thenAnswer(invocation -> { + return CraftRegistry.createRegistry(invocation.getArgument(0), org.bukkit.support.AbstractTestingBase.REGISTRY_CUSTOM); + }); + + final PluginManager pluginManager = new SimplePluginManager(dummyServer, new SimpleCommandMap(dummyServer)); + when(dummyServer.getPluginManager()).thenReturn(pluginManager); + + Bukkit.setServer(dummyServer); + + } +} diff --git a/src/test/java/org/bukkit/support/AbstractTestingBase.java b/src/test/java/org/bukkit/support/AbstractTestingBase.java index c3c0dff6497ba47604c29a9ff7bcc4692e9ba757..bedb1c43fd9d27eda2411e23d46eb1ad96429507 100644 --- a/src/test/java/org/bukkit/support/AbstractTestingBase.java +++ b/src/test/java/org/bukkit/support/AbstractTestingBase.java @@ -54,6 +54,7 @@ public abstract class AbstractTestingBase { LayeredRegistryAccess layers = RegistryLayer.createRegistryAccess(); layers = WorldLoader.loadAndReplaceLayer(resourceManager, layers, RegistryLayer.WORLDGEN, RegistryDataLoader.WORLDGEN_REGISTRIES); REGISTRY_CUSTOM = layers.compositeAccess().freeze(); + io.papermc.paper.testing.DummyServer.setup(); // Paper // Register vanilla pack DATA_PACK = ReloadableServerResources.loadResources(resourceManager, REGISTRY_CUSTOM, FeatureFlags.REGISTRY.allFlags(), Commands.CommandSelection.DEDICATED, 0, MoreExecutors.directExecutor(), MoreExecutors.directExecutor()).join(); // Bind tags @@ -61,7 +62,6 @@ public abstract class AbstractTestingBase { // Biome shortcut BIOMES = REGISTRY_CUSTOM.registryOrThrow(Registries.BIOME); - DummyServer.setup(); DummyEnchantments.setup(); CraftRegistry.setMinecraftRegistry(REGISTRY_CUSTOM); diff --git a/src/test/java/org/bukkit/support/DummyServer.java b/src/test/java/org/bukkit/support/DummyServer.java deleted file mode 100644 index e3197ea88b68de8f893f3fa986507b95b789645d..0000000000000000000000000000000000000000 --- a/src/test/java/org/bukkit/support/DummyServer.java +++ /dev/null @@ -1,127 +0,0 @@ -package org.bukkit.support; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.util.HashMap; -import java.util.logging.Logger; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.NamespacedKey; -import org.bukkit.Server; -import org.bukkit.craftbukkit.CraftLootTable; -import org.bukkit.craftbukkit.CraftRegistry; -import org.bukkit.craftbukkit.block.data.CraftBlockData; -import org.bukkit.craftbukkit.inventory.CraftItemFactory; -import org.bukkit.craftbukkit.util.CraftMagicNumbers; -import org.bukkit.craftbukkit.util.CraftNamespacedKey; -import org.bukkit.craftbukkit.util.Versioning; - -public final class DummyServer implements InvocationHandler { - private static interface MethodHandler { - Object handle(DummyServer server, Object[] args); - } - private static final HashMap methods = new HashMap(); - static { - try { - methods.put( - Server.class.getMethod("getItemFactory"), - new MethodHandler() { - @Override - public Object handle(DummyServer server, Object[] args) { - return CraftItemFactory.instance(); - } - } - ); - methods.put( - Server.class.getMethod("getName"), - new MethodHandler() { - @Override - public Object handle(DummyServer server, Object[] args) { - return DummyServer.class.getName(); - } - } - ); - methods.put( - Server.class.getMethod("getVersion"), - new MethodHandler() { - @Override - public Object handle(DummyServer server, Object[] args) { - return DummyServer.class.getPackage().getImplementationVersion(); - } - } - ); - methods.put( - Server.class.getMethod("getBukkitVersion"), - new MethodHandler() { - @Override - public Object handle(DummyServer server, Object[] args) { - return Versioning.getBukkitVersion(); - } - } - ); - methods.put( - Server.class.getMethod("getLogger"), - new MethodHandler() { - final Logger logger = Logger.getLogger(DummyServer.class.getCanonicalName()); - @Override - public Object handle(DummyServer server, Object[] args) { - return logger; - } - } - ); - methods.put( - Server.class.getMethod("getUnsafe"), - new MethodHandler() { - @Override - public Object handle(DummyServer server, Object[] args) { - return CraftMagicNumbers.INSTANCE; - } - } - ); - methods.put( - Server.class.getMethod("createBlockData", Material.class), - new MethodHandler() { - final Logger logger = Logger.getLogger(DummyServer.class.getCanonicalName()); - @Override - public Object handle(DummyServer server, Object[] args) { - return CraftBlockData.newData((Material) args[0], null); - } - } - ); - methods.put(Server.class.getMethod("getLootTable", NamespacedKey.class), - new MethodHandler() { - @Override - public Object handle(DummyServer server, Object[] args) { - NamespacedKey key = (NamespacedKey) args[0]; - return new CraftLootTable(key, AbstractTestingBase.DATA_PACK.getLootData().getLootTable(CraftNamespacedKey.toMinecraft(key))); - } - } - ); - methods.put(Server.class.getMethod("getRegistry", Class.class), - new MethodHandler() { - @Override - public Object handle(DummyServer server, Object[] args) { - return CraftRegistry.createRegistry((Class) args[0], AbstractTestingBase.REGISTRY_CUSTOM); - } - } - ); - Bukkit.setServer(Proxy.getProxyClass(Server.class.getClassLoader(), Server.class).asSubclass(Server.class).getConstructor(InvocationHandler.class).newInstance(new DummyServer())); - } catch (Throwable t) { - throw new Error(t); - } - } - - public static void setup() {} - - private DummyServer() {}; - - @Override - public Object invoke(Object proxy, Method method, Object[] args) { - MethodHandler handler = DummyServer.methods.get(method); - if (handler != null) { - return handler.handle(this, args); - } - throw new UnsupportedOperationException(String.valueOf(method)); - } -}