deduplicate assertion helpers and remove unused plugin fields

This commit is contained in:
Purdze 2026-02-12 18:22:10 +00:00 committed by Bjorn Beishline
parent 338717143a
commit e227008af6
13 changed files with 66 additions and 178 deletions

View File

@ -14,14 +14,14 @@ public final class PatchBukkitTestPlugin extends JavaPlugin {
framework.registerSuite(new ServerTests(this)); framework.registerSuite(new ServerTests(this));
framework.registerSuite(new PluginManagerTests(this)); framework.registerSuite(new PluginManagerTests(this));
framework.registerSuite(new CommandSystemTests(this)); framework.registerSuite(new CommandSystemTests());
framework.registerSuite(new EventSystemTests(this)); framework.registerSuite(new EventSystemTests(this));
framework.registerSuite(new PermissionsTests(this)); framework.registerSuite(new PermissionsTests());
framework.registerSuite(new RegistryTests(this)); framework.registerSuite(new RegistryTests());
framework.registerSuite(new EntityTests(this)); framework.registerSuite(new EntityTests());
framework.registerSuite(new ConsoleSenderTests(this)); framework.registerSuite(new ConsoleSenderTests());
framework.registerSuite(new UnsafeValuesTests(this)); framework.registerSuite(new UnsafeValuesTests());
framework.registerSuite(new StubTests(this)); framework.registerSuite(new StubTests());
// Set executor on the PluginCommand created by PatchBukkit's Rust side // Set executor on the PluginCommand created by PatchBukkit's Rust side
PbTestCommand cmd = new PbTestCommand(framework); PbTestCommand cmd = new PbTestCommand(framework);

View File

@ -0,0 +1,14 @@
package org.patchbukkit.testplugin;
public final class TestAssertions {
private TestAssertions() {}
public static void assertNotNull(Object value, String what) {
if (value == null) throw new AssertionError(what + " returned null");
}
public static void assertTrue(boolean condition, String what) {
if (!condition) throw new AssertionError(what);
}
}

View File

@ -5,12 +5,21 @@ import java.util.ArrayList;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Consumer;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
public final class TestFramework { public final class TestFramework {
private static final String RESET = "\u001B[0m";
private static final String BOLD = "\u001B[1m";
private static final String RED = "\u001B[31m";
private static final String GREEN = "\u001B[32m";
private static final String YELLOW = "\u001B[33m";
private static final String CYAN = "\u001B[36m";
private static final String WHITE = "\u001B[37m";
private final Logger logger; private final Logger logger;
private final List<Object> suites = new ArrayList<>(); private final List<Object> suites = new ArrayList<>();
@ -82,91 +91,50 @@ public final class TestFramework {
} }
} }
// ANSI color codes
private static final String RESET = "\u001B[0m";
private static final String BOLD = "\u001B[1m";
private static final String RED = "\u001B[31m";
private static final String GREEN = "\u001B[32m";
private static final String YELLOW = "\u001B[33m";
private static final String CYAN = "\u001B[36m";
private static final String WHITE = "\u001B[37m";
public void reportResults(List<TestResult> results) { public void reportResults(List<TestResult> results) {
Map<TestCategory, List<TestResult>> grouped = new EnumMap<>(TestCategory.class); reportResults(results, logger::info);
for (TestResult r : results) { logger.info("[PBTEST_SUMMARY] total=" + results.size()
grouped.computeIfAbsent(r.category(), k -> new ArrayList<>()).add(r); + " passed=" + results.stream().filter(TestResult::passed).count()
} + " failed=" + results.stream().filter(r -> !r.passed()).count());
int total = results.size();
int passed = 0;
for (TestResult r : results) {
if (r.passed()) passed++;
}
int failed = total - passed;
logger.info(CYAN + BOLD + "========================================" + RESET);
logger.info(CYAN + BOLD + " PatchBukkit Conformance Test Results" + RESET);
logger.info(CYAN + BOLD + "========================================" + RESET);
for (TestCategory cat : TestCategory.values()) {
List<TestResult> catResults = grouped.get(cat);
if (catResults == null || catResults.isEmpty()) continue;
logger.info(YELLOW + BOLD + "--- " + cat.name() + " ---" + RESET);
for (TestResult r : catResults) {
if (r.passed()) {
logger.info(GREEN + " PASS" + RESET + " [" + r.tag() + "] " + r.name());
} else {
logger.info(RED + " FAIL" + RESET + " [" + r.tag() + "] " + r.name() + RED + " -- " + r.detail() + RESET);
}
}
}
logger.info(CYAN + BOLD + "========================================" + RESET);
String summaryColor = failed == 0 ? GREEN : RED;
logger.info(BOLD + " Total: " + WHITE + total + RESET
+ BOLD + " Passed: " + GREEN + passed + RESET
+ BOLD + " Failed: " + summaryColor + failed + RESET);
logger.info(CYAN + BOLD + "========================================" + RESET);
logger.info("[PBTEST_SUMMARY] total=" + total + " passed=" + passed + " failed=" + failed);
} }
public void reportResults(List<TestResult> results, CommandSender sender) { public void reportResults(List<TestResult> results, CommandSender sender) {
reportResults(results, sender::sendMessage);
}
private void reportResults(List<TestResult> results, Consumer<String> out) {
Map<TestCategory, List<TestResult>> grouped = new EnumMap<>(TestCategory.class); Map<TestCategory, List<TestResult>> grouped = new EnumMap<>(TestCategory.class);
for (TestResult r : results) { for (TestResult r : results) {
grouped.computeIfAbsent(r.category(), k -> new ArrayList<>()).add(r); grouped.computeIfAbsent(r.category(), k -> new ArrayList<>()).add(r);
} }
int total = results.size(); int total = results.size();
int passed = 0; int passed = (int) results.stream().filter(TestResult::passed).count();
for (TestResult r : results) {
if (r.passed()) passed++;
}
int failed = total - passed; int failed = total - passed;
sender.sendMessage(CYAN + BOLD + "========================================" + RESET); out.accept(CYAN + BOLD + "========================================" + RESET);
sender.sendMessage(CYAN + BOLD + " PatchBukkit Conformance Test Results" + RESET); out.accept(CYAN + BOLD + " PatchBukkit Conformance Test Results" + RESET);
sender.sendMessage(CYAN + BOLD + "========================================" + RESET); out.accept(CYAN + BOLD + "========================================" + RESET);
for (TestCategory cat : TestCategory.values()) { for (TestCategory cat : TestCategory.values()) {
List<TestResult> catResults = grouped.get(cat); List<TestResult> catResults = grouped.get(cat);
if (catResults == null || catResults.isEmpty()) continue; if (catResults == null || catResults.isEmpty()) continue;
sender.sendMessage(YELLOW + BOLD + "--- " + cat.name() + " ---" + RESET); out.accept(YELLOW + BOLD + "--- " + cat.name() + " ---" + RESET);
for (TestResult r : catResults) { for (TestResult r : catResults) {
if (r.passed()) { if (r.passed()) {
sender.sendMessage(GREEN + " PASS" + RESET + " [" + r.tag() + "] " + r.name()); out.accept(GREEN + " PASS" + RESET + " [" + r.tag() + "] " + r.name());
} else { } else {
sender.sendMessage(RED + " FAIL" + RESET + " [" + r.tag() + "] " + r.name() + RED + " -- " + r.detail() + RESET); out.accept(RED + " FAIL" + RESET + " [" + r.tag() + "] " + r.name() + RED + " -- " + r.detail() + RESET);
} }
} }
} }
sender.sendMessage(CYAN + BOLD + "========================================" + RESET); out.accept(CYAN + BOLD + "========================================" + RESET);
String summaryColor = failed == 0 ? GREEN : RED; String summaryColor = failed == 0 ? GREEN : RED;
sender.sendMessage(BOLD + " Total: " + WHITE + total + RESET out.accept(BOLD + " Total: " + WHITE + total + RESET
+ BOLD + " Passed: " + GREEN + passed + RESET + BOLD + " Passed: " + GREEN + passed + RESET
+ BOLD + " Failed: " + summaryColor + failed + RESET); + BOLD + " Failed: " + summaryColor + failed + RESET);
sender.sendMessage(CYAN + BOLD + "========================================" + RESET); out.accept(CYAN + BOLD + "========================================" + RESET);
} }
} }

View File

@ -7,19 +7,13 @@ import org.bukkit.command.CommandSender;
import org.bukkit.command.defaults.BukkitCommand; import org.bukkit.command.defaults.BukkitCommand;
import org.patchbukkit.testplugin.ConformanceTest; import org.patchbukkit.testplugin.ConformanceTest;
import org.patchbukkit.testplugin.TestCategory; import org.patchbukkit.testplugin.TestCategory;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.Arrays;
import java.util.List; import java.util.List;
import static org.patchbukkit.testplugin.TestAssertions.*;
public final class CommandSystemTests { public final class CommandSystemTests {
private final JavaPlugin plugin;
public CommandSystemTests(JavaPlugin plugin) {
this.plugin = plugin;
}
@ConformanceTest(name = "CommandMap.register() accepts a command", category = TestCategory.COMMAND_SYSTEM) @ConformanceTest(name = "CommandMap.register() accepts a command", category = TestCategory.COMMAND_SYSTEM)
public void testRegister() { public void testRegister() {
CommandMap map = Bukkit.getServer().getCommandMap(); CommandMap map = Bukkit.getServer().getCommandMap();
@ -96,11 +90,4 @@ public final class CommandSystemTests {
assertNotNull(found, "CommandMap.getCommand(\"myprefix:pbtestalias\")"); assertNotNull(found, "CommandMap.getCommand(\"myprefix:pbtestalias\")");
} }
private static void assertNotNull(Object value, String what) {
if (value == null) throw new AssertionError(what + " returned null");
}
private static void assertTrue(boolean condition, String what) {
if (!condition) throw new AssertionError(what);
}
} }

View File

@ -5,16 +5,11 @@ import org.bukkit.Server;
import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.ConsoleCommandSender;
import org.patchbukkit.testplugin.ConformanceTest; import org.patchbukkit.testplugin.ConformanceTest;
import org.patchbukkit.testplugin.TestCategory; import org.patchbukkit.testplugin.TestCategory;
import org.bukkit.plugin.java.JavaPlugin;
import static org.patchbukkit.testplugin.TestAssertions.*;
public final class ConsoleSenderTests { public final class ConsoleSenderTests {
private final JavaPlugin plugin;
public ConsoleSenderTests(JavaPlugin plugin) {
this.plugin = plugin;
}
@ConformanceTest(name = "ConsoleSender.getName() returns non-null", category = TestCategory.CONSOLE_SENDER) @ConformanceTest(name = "ConsoleSender.getName() returns non-null", category = TestCategory.CONSOLE_SENDER)
public void testGetName() { public void testGetName() {
ConsoleCommandSender console = Bukkit.getConsoleSender(); ConsoleCommandSender console = Bukkit.getConsoleSender();
@ -54,11 +49,4 @@ public final class ConsoleSenderTests {
assertNotNull(spigot, "ConsoleSender.spigot()"); assertNotNull(spigot, "ConsoleSender.spigot()");
} }
private static void assertNotNull(Object value, String what) {
if (value == null) throw new AssertionError(what + " returned null");
}
private static void assertTrue(boolean condition, String what) {
if (!condition) throw new AssertionError(what);
}
} }

View File

@ -5,19 +5,14 @@ import org.bukkit.entity.Player;
import org.patchbukkit.testplugin.ConformanceTest; import org.patchbukkit.testplugin.ConformanceTest;
import org.patchbukkit.testplugin.TestCategory; import org.patchbukkit.testplugin.TestCategory;
import org.patchbukkit.testplugin.TestExpectation; import org.patchbukkit.testplugin.TestExpectation;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.Collection; import java.util.Collection;
import java.util.UUID; import java.util.UUID;
import static org.patchbukkit.testplugin.TestAssertions.*;
public final class EntityTests { public final class EntityTests {
private final JavaPlugin plugin;
public EntityTests(JavaPlugin plugin) {
this.plugin = plugin;
}
@ConformanceTest(name = "Server.getOnlinePlayers() returns iterable collection", category = TestCategory.ENTITY) @ConformanceTest(name = "Server.getOnlinePlayers() returns iterable collection", category = TestCategory.ENTITY)
public void testOnlinePlayersIteration() { public void testOnlinePlayersIteration() {
Collection<? extends Player> players = Bukkit.getOnlinePlayers(); Collection<? extends Player> players = Bukkit.getOnlinePlayers();
@ -34,7 +29,4 @@ public final class EntityTests {
Bukkit.getServer().getEntity(UUID.randomUUID()); Bukkit.getServer().getEntity(UUID.randomUUID());
} }
private static void assertNotNull(Object value, String what) {
if (value == null) throw new AssertionError(what + " returned null");
}
} }

View File

@ -10,6 +10,8 @@ import org.patchbukkit.testplugin.ConformanceTest;
import org.patchbukkit.testplugin.TestCategory; import org.patchbukkit.testplugin.TestCategory;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import static org.patchbukkit.testplugin.TestAssertions.*;
public final class EventSystemTests { public final class EventSystemTests {
private final JavaPlugin plugin; private final JavaPlugin plugin;
@ -57,8 +59,4 @@ public final class EventSystemTests {
true true
); );
} }
private static void assertNotNull(Object value, String what) {
if (value == null) throw new AssertionError(what + " returned null");
}
} }

View File

@ -6,18 +6,13 @@ import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.patchbukkit.testplugin.ConformanceTest; import org.patchbukkit.testplugin.ConformanceTest;
import org.patchbukkit.testplugin.TestCategory; import org.patchbukkit.testplugin.TestCategory;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.Set; import java.util.Set;
import static org.patchbukkit.testplugin.TestAssertions.*;
public final class PermissionsTests { public final class PermissionsTests {
private final JavaPlugin plugin;
public PermissionsTests(JavaPlugin plugin) {
this.plugin = plugin;
}
@ConformanceTest(name = "addPermission() and getPermission()", category = TestCategory.PERMISSIONS) @ConformanceTest(name = "addPermission() and getPermission()", category = TestCategory.PERMISSIONS)
public void testAddAndGetPermission() { public void testAddAndGetPermission() {
PluginManager pm = Bukkit.getPluginManager(); PluginManager pm = Bukkit.getPluginManager();
@ -77,11 +72,4 @@ public final class PermissionsTests {
assertTrue(hasPerm, "Console (op) should have OP-default permission"); assertTrue(hasPerm, "Console (op) should have OP-default permission");
} }
private static void assertNotNull(Object value, String what) {
if (value == null) throw new AssertionError(what + " returned null");
}
private static void assertTrue(boolean condition, String what) {
if (!condition) throw new AssertionError(what);
}
} }

View File

@ -7,6 +7,8 @@ import org.patchbukkit.testplugin.ConformanceTest;
import org.patchbukkit.testplugin.TestCategory; import org.patchbukkit.testplugin.TestCategory;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import static org.patchbukkit.testplugin.TestAssertions.*;
public final class PluginManagerTests { public final class PluginManagerTests {
private final JavaPlugin plugin; private final JavaPlugin plugin;
@ -60,11 +62,4 @@ public final class PluginManagerTests {
assertNotNull(perms, "PluginManager.getPermissions()"); assertNotNull(perms, "PluginManager.getPermissions()");
} }
private static void assertNotNull(Object value, String what) {
if (value == null) throw new AssertionError(what + " returned null");
}
private static void assertTrue(boolean condition, String what) {
if (!condition) throw new AssertionError(what);
}
} }

View File

@ -6,16 +6,11 @@ import org.bukkit.Sound;
import org.patchbukkit.testplugin.ConformanceTest; import org.patchbukkit.testplugin.ConformanceTest;
import org.patchbukkit.testplugin.TestCategory; import org.patchbukkit.testplugin.TestCategory;
import org.patchbukkit.testplugin.TestExpectation; import org.patchbukkit.testplugin.TestExpectation;
import org.bukkit.plugin.java.JavaPlugin;
import static org.patchbukkit.testplugin.TestAssertions.*;
public final class RegistryTests { public final class RegistryTests {
private final JavaPlugin plugin;
public RegistryTests(JavaPlugin plugin) {
this.plugin = plugin;
}
@ConformanceTest(name = "Registry.SOUNDS is accessible", category = TestCategory.REGISTRY) @ConformanceTest(name = "Registry.SOUNDS is accessible", category = TestCategory.REGISTRY)
public void testSoundsRegistryExists() { public void testSoundsRegistryExists() {
Registry<Sound> sounds = Registry.SOUNDS; Registry<Sound> sounds = Registry.SOUNDS;
@ -48,7 +43,4 @@ public final class RegistryTests {
} }
} }
private static void assertNotNull(Object value, String what) {
if (value == null) throw new AssertionError(what + " returned null");
}
} }

View File

@ -11,6 +11,8 @@ import org.patchbukkit.testplugin.TestCategory;
import org.patchbukkit.testplugin.TestExpectation; import org.patchbukkit.testplugin.TestExpectation;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import static org.patchbukkit.testplugin.TestAssertions.*;
public final class ServerTests { public final class ServerTests {
private final JavaPlugin plugin; private final JavaPlugin plugin;
@ -75,7 +77,6 @@ public final class ServerTests {
@ConformanceTest(name = "Server.suggestPlayerNamesWhenNullTabCompletions() returns boolean", category = TestCategory.SERVER) @ConformanceTest(name = "Server.suggestPlayerNamesWhenNullTabCompletions() returns boolean", category = TestCategory.SERVER)
public void testSuggestPlayerNames() { public void testSuggestPlayerNames() {
// Should return true according to implementation
boolean result = Bukkit.getServer().suggestPlayerNamesWhenNullTabCompletions(); boolean result = Bukkit.getServer().suggestPlayerNamesWhenNullTabCompletions();
assertTrue(result, "Server.suggestPlayerNamesWhenNullTabCompletions()"); assertTrue(result, "Server.suggestPlayerNamesWhenNullTabCompletions()");
} }
@ -101,15 +102,4 @@ public final class ServerTests {
assertTrue(cmd == null, "Server.getPluginCommand(unknown) should be null"); assertTrue(cmd == null, "Server.getPluginCommand(unknown) should be null");
} }
private static void assertNotNull(Object value, String what) {
if (value == null) {
throw new AssertionError(what + " returned null");
}
}
private static void assertTrue(boolean condition, String what) {
if (!condition) {
throw new AssertionError(what);
}
}
} }

View File

@ -5,20 +5,11 @@ import org.bukkit.Server;
import org.patchbukkit.testplugin.ConformanceTest; import org.patchbukkit.testplugin.ConformanceTest;
import org.patchbukkit.testplugin.TestCategory; import org.patchbukkit.testplugin.TestCategory;
import org.patchbukkit.testplugin.TestExpectation; import org.patchbukkit.testplugin.TestExpectation;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.UUID; import java.util.UUID;
public final class StubTests { public final class StubTests {
private final JavaPlugin plugin;
public StubTests(JavaPlugin plugin) {
this.plugin = plugin;
}
// --- Server stubs that should throw UnsupportedOperationException ---
@ConformanceTest(name = "Server.getWorlds() throws UnsupportedOperationException", @ConformanceTest(name = "Server.getWorlds() throws UnsupportedOperationException",
category = TestCategory.STUBS, expectation = TestExpectation.EXPECT_UNSUPPORTED) category = TestCategory.STUBS, expectation = TestExpectation.EXPECT_UNSUPPORTED)
public void testGetWorlds() { public void testGetWorlds() {
@ -128,7 +119,4 @@ public final class StubTests {
Bukkit.getServer().getAllowNether(); Bukkit.getServer().getAllowNether();
} }
private static void assertNotNull(Object value, String what) {
if (value == null) throw new AssertionError(what + " returned null");
}
} }

View File

@ -5,17 +5,12 @@ import org.bukkit.Bukkit;
import org.bukkit.UnsafeValues; import org.bukkit.UnsafeValues;
import org.patchbukkit.testplugin.ConformanceTest; import org.patchbukkit.testplugin.ConformanceTest;
import org.patchbukkit.testplugin.TestCategory; import org.patchbukkit.testplugin.TestCategory;
import org.bukkit.plugin.java.JavaPlugin;
import static org.patchbukkit.testplugin.TestAssertions.*;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public final class UnsafeValuesTests { public final class UnsafeValuesTests {
private final JavaPlugin plugin;
public UnsafeValuesTests(JavaPlugin plugin) {
this.plugin = plugin;
}
@ConformanceTest(name = "UnsafeValues.getDataVersion() returns positive int", category = TestCategory.UNSAFE_VALUES) @ConformanceTest(name = "UnsafeValues.getDataVersion() returns positive int", category = TestCategory.UNSAFE_VALUES)
public void testGetDataVersion() { public void testGetDataVersion() {
UnsafeValues unsafe = Bukkit.getUnsafe(); UnsafeValues unsafe = Bukkit.getUnsafe();
@ -51,11 +46,4 @@ public final class UnsafeValuesTests {
assertNotNull(flattener, "UnsafeValues.componentFlattener()"); assertNotNull(flattener, "UnsafeValues.componentFlattener()");
} }
private static void assertNotNull(Object value, String what) {
if (value == null) throw new AssertionError(what + " returned null");
}
private static void assertTrue(boolean condition, String what) {
if (!condition) throw new AssertionError(what);
}
} }