773dd72446
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: 69c7ce23 PR-990: Use Mockito instead of InvocationHandler for test mocking 997de31d PR-893: Add a stream method to Registry to make it easier to use and to avoid unnecessary wrapping 6a8ce581 Fix malformed javadoc in previous commit 26c74f6d PR-890: Add more Sculk API (bloom, shriek, bloom event) aa067abf PR-895: Load GameEvent and MusicInstrument from registry CraftBukkit Changes: 78796c9de Add support for Java 21 ddc9a2dad SPIGOT-7475: Don't fire SculkBloomEvent during world generation caee2311a PR-1245: Add a stream method to Registry to make it easier to use and to avoid unnecessary wrapping de421cf56 PR-1242: Add more Sculk API (bloom, shriek, bloom event) 00f5a80fb PR-1252: Fix error when generating a tree in water 10219df3a PR-1248: Load GameEvent and MusicInstrument from registry
281 Zeilen
12 KiB
Diff
281 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 b1c84b847f8845407eafc89d8b027b34cc6a95b8..784a2ae459d4a6afd6773d2298838c07c9152250 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.42.0.0")
|
|
runtimeOnly("com.mysql:mysql-connector-j:8.0.33")
|
|
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..e944e9dca13883c57e93e480ae5adfe51c342532
|
|
--- /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.getLootData().getLootTable(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..c88749e839ee1a9cf8439c4218c8a98afbd9c491
|
|
--- /dev/null
|
|
+++ b/src/test/java/io/papermc/paper/testing/LazyRegistry.java
|
|
@@ -0,0 +1,30 @@
|
|
+package io.papermc.paper.testing;
|
|
+
|
|
+import java.util.Iterator;
|
|
+import java.util.function.Supplier;
|
|
+import java.util.stream.Stream;
|
|
+import java.util.stream.StreamSupport;
|
|
+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);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public @NotNull Stream<Keyed> stream() {
|
|
+ return StreamSupport.stream(this.supplier.get().spliterator(), false);
|
|
+ }
|
|
+}
|
|
diff --git a/src/test/java/org/bukkit/support/AbstractTestingBase.java b/src/test/java/org/bukkit/support/AbstractTestingBase.java
|
|
index 4f392c199fc31808d339659156f2e9b229e755e2..453e2189b842a6f6f52186578af1ee2e2fcba2e4 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<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
|
|
@@ -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<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.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));
|
|
- }
|
|
-}
|