647cf31e61
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: fdef9473 Correct Material#isFuel for new experimental materials 42811598 SPIGOT-7293: Add Biome#CHERRY_GROVE CraftBukkit Changes: 968d28df0 Fix availability of experimental datapack features in unit tests
274 Zeilen
12 KiB
Diff
274 Zeilen
12 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Mon, 13 Feb 2023 14:14:56 -0800
|
|
Subject: [PATCH] Test changes
|
|
|
|
|
|
diff --git a/build.gradle.kts b/build.gradle.kts
|
|
index d77f15c58f41f1e00c75e0a022919bb7dacc9926..0d04c3af92f7d4e63b1178247e493174cedd9178 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.4")
|
|
implementation("org.ow2.asm:asm-commons:9.4") // 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.41.0.0")
|
|
runtimeOnly("com.mysql:mysql-connector-j:8.0.32")
|
|
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..c6503ff76f56bab5f383f0ca17d137155e9be447
|
|
--- /dev/null
|
|
+++ b/src/test/java/io/papermc/paper/testing/DummyServer.java
|
|
@@ -0,0 +1,67 @@
|
|
+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.getLootTables().get(CraftNamespacedKey.toMinecraft(key)));
|
|
+ });
|
|
+
|
|
+ when(dummyServer.getRegistry(any())).thenAnswer(invocation -> {
|
|
+ // LazyRegistry because the vanilla data hasn't been bootstrapped yet.
|
|
+ return new LazyRegistry(() -> CraftRegistry.createRegistry(invocation.getArgument(0, Class.class), 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/io/papermc/paper/testing/LazyRegistry.java b/src/test/java/io/papermc/paper/testing/LazyRegistry.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..8dd0df8c2cc25d37a2590a07872682230a9335f2
|
|
--- /dev/null
|
|
+++ b/src/test/java/io/papermc/paper/testing/LazyRegistry.java
|
|
@@ -0,0 +1,23 @@
|
|
+package io.papermc.paper.testing;
|
|
+
|
|
+import java.util.Iterator;
|
|
+import java.util.function.Supplier;
|
|
+import org.bukkit.Keyed;
|
|
+import org.bukkit.NamespacedKey;
|
|
+import org.bukkit.Registry;
|
|
+import org.jetbrains.annotations.NotNull;
|
|
+import org.jetbrains.annotations.Nullable;
|
|
+
|
|
+public record LazyRegistry(Supplier<Registry<Keyed>> supplier) implements Registry<Keyed> {
|
|
+
|
|
+ @NotNull
|
|
+ @Override
|
|
+ public Iterator<Keyed> iterator() {
|
|
+ return this.supplier().get().iterator();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public @Nullable Keyed get(@NotNull final NamespacedKey key) {
|
|
+ return this.supplier().get().get(key);
|
|
+ }
|
|
+}
|
|
diff --git a/src/test/java/org/bukkit/support/AbstractTestingBase.java b/src/test/java/org/bukkit/support/AbstractTestingBase.java
|
|
index a85d3606c09717906798f0e1716755d1dae0d760..eab3834dca7cf70468390584156b9a770bfb2a32 100644
|
|
--- a/src/test/java/org/bukkit/support/AbstractTestingBase.java
|
|
+++ b/src/test/java/org/bukkit/support/AbstractTestingBase.java
|
|
@@ -53,6 +53,7 @@ public abstract class AbstractTestingBase {
|
|
LayeredRegistryAccess<RegistryLayer> 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
|
|
@@ -60,7 +61,6 @@ public abstract class AbstractTestingBase {
|
|
// Biome shortcut
|
|
BIOMES = REGISTRY_CUSTOM.registryOrThrow(Registries.BIOME);
|
|
|
|
- DummyServer.setup();
|
|
DummyEnchantments.setup();
|
|
|
|
ImmutableList.Builder<Material> builder = ImmutableList.builder();
|
|
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 946497353a64421592d2bae012c9a3cb874dd5b8..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<Method, MethodHandler> methods = new HashMap<Method, MethodHandler>();
|
|
- 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.getLootTables().get(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));
|
|
- }
|
|
-}
|