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 PluginManagerTests(this));
framework.registerSuite(new CommandSystemTests(this));
framework.registerSuite(new CommandSystemTests());
framework.registerSuite(new EventSystemTests(this));
framework.registerSuite(new PermissionsTests(this));
framework.registerSuite(new RegistryTests(this));
framework.registerSuite(new EntityTests(this));
framework.registerSuite(new ConsoleSenderTests(this));
framework.registerSuite(new UnsafeValuesTests(this));
framework.registerSuite(new StubTests(this));
framework.registerSuite(new PermissionsTests());
framework.registerSuite(new RegistryTests());
framework.registerSuite(new EntityTests());
framework.registerSuite(new ConsoleSenderTests());
framework.registerSuite(new UnsafeValuesTests());
framework.registerSuite(new StubTests());
// Set executor on the PluginCommand created by PatchBukkit's Rust side
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.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.logging.Logger;
import org.bukkit.command.CommandSender;
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 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) {
Map<TestCategory, List<TestResult>> grouped = new EnumMap<>(TestCategory.class);
for (TestResult r : results) {
grouped.computeIfAbsent(r.category(), k -> new ArrayList<>()).add(r);
}
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);
reportResults(results, logger::info);
logger.info("[PBTEST_SUMMARY] total=" + results.size()
+ " passed=" + results.stream().filter(TestResult::passed).count()
+ " failed=" + results.stream().filter(r -> !r.passed()).count());
}
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);
for (TestResult r : results) {
grouped.computeIfAbsent(r.category(), k -> new ArrayList<>()).add(r);
}
int total = results.size();
int passed = 0;
for (TestResult r : results) {
if (r.passed()) passed++;
}
int passed = (int) results.stream().filter(TestResult::passed).count();
int failed = total - passed;
sender.sendMessage(CYAN + BOLD + "========================================" + RESET);
sender.sendMessage(CYAN + BOLD + " PatchBukkit Conformance Test Results" + RESET);
sender.sendMessage(CYAN + BOLD + "========================================" + RESET);
out.accept(CYAN + BOLD + "========================================" + RESET);
out.accept(CYAN + BOLD + " PatchBukkit Conformance Test Results" + RESET);
out.accept(CYAN + BOLD + "========================================" + RESET);
for (TestCategory cat : TestCategory.values()) {
List<TestResult> catResults = grouped.get(cat);
if (catResults == null || catResults.isEmpty()) continue;
sender.sendMessage(YELLOW + BOLD + "--- " + cat.name() + " ---" + RESET);
out.accept(YELLOW + BOLD + "--- " + cat.name() + " ---" + RESET);
for (TestResult r : catResults) {
if (r.passed()) {
sender.sendMessage(GREEN + " PASS" + RESET + " [" + r.tag() + "] " + r.name());
out.accept(GREEN + " PASS" + RESET + " [" + r.tag() + "] " + r.name());
} 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;
sender.sendMessage(BOLD + " Total: " + WHITE + total + RESET
out.accept(BOLD + " Total: " + WHITE + total + RESET
+ BOLD + " Passed: " + GREEN + passed + 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.patchbukkit.testplugin.ConformanceTest;
import org.patchbukkit.testplugin.TestCategory;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.Arrays;
import java.util.List;
import static org.patchbukkit.testplugin.TestAssertions.*;
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)
public void testRegister() {
CommandMap map = Bukkit.getServer().getCommandMap();
@ -96,11 +90,4 @@ public final class CommandSystemTests {
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.patchbukkit.testplugin.ConformanceTest;
import org.patchbukkit.testplugin.TestCategory;
import org.bukkit.plugin.java.JavaPlugin;
import static org.patchbukkit.testplugin.TestAssertions.*;
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)
public void testGetName() {
ConsoleCommandSender console = Bukkit.getConsoleSender();
@ -54,11 +49,4 @@ public final class ConsoleSenderTests {
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.TestCategory;
import org.patchbukkit.testplugin.TestExpectation;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.Collection;
import java.util.UUID;
import static org.patchbukkit.testplugin.TestAssertions.*;
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)
public void testOnlinePlayersIteration() {
Collection<? extends Player> players = Bukkit.getOnlinePlayers();
@ -34,7 +29,4 @@ public final class EntityTests {
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.bukkit.plugin.java.JavaPlugin;
import static org.patchbukkit.testplugin.TestAssertions.*;
public final class EventSystemTests {
private final JavaPlugin plugin;
@ -57,8 +59,4 @@ public final class EventSystemTests {
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.patchbukkit.testplugin.ConformanceTest;
import org.patchbukkit.testplugin.TestCategory;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.Set;
import static org.patchbukkit.testplugin.TestAssertions.*;
public final class PermissionsTests {
private final JavaPlugin plugin;
public PermissionsTests(JavaPlugin plugin) {
this.plugin = plugin;
}
@ConformanceTest(name = "addPermission() and getPermission()", category = TestCategory.PERMISSIONS)
public void testAddAndGetPermission() {
PluginManager pm = Bukkit.getPluginManager();
@ -77,11 +72,4 @@ public final class PermissionsTests {
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.bukkit.plugin.java.JavaPlugin;
import static org.patchbukkit.testplugin.TestAssertions.*;
public final class PluginManagerTests {
private final JavaPlugin plugin;
@ -60,11 +62,4 @@ public final class PluginManagerTests {
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.TestCategory;
import org.patchbukkit.testplugin.TestExpectation;
import org.bukkit.plugin.java.JavaPlugin;
import static org.patchbukkit.testplugin.TestAssertions.*;
public final class RegistryTests {
private final JavaPlugin plugin;
public RegistryTests(JavaPlugin plugin) {
this.plugin = plugin;
}
@ConformanceTest(name = "Registry.SOUNDS is accessible", category = TestCategory.REGISTRY)
public void testSoundsRegistryExists() {
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.bukkit.plugin.java.JavaPlugin;
import static org.patchbukkit.testplugin.TestAssertions.*;
public final class ServerTests {
private final JavaPlugin plugin;
@ -75,7 +77,6 @@ public final class ServerTests {
@ConformanceTest(name = "Server.suggestPlayerNamesWhenNullTabCompletions() returns boolean", category = TestCategory.SERVER)
public void testSuggestPlayerNames() {
// Should return true according to implementation
boolean result = Bukkit.getServer().suggestPlayerNamesWhenNullTabCompletions();
assertTrue(result, "Server.suggestPlayerNamesWhenNullTabCompletions()");
}
@ -101,15 +102,4 @@ public final class ServerTests {
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.TestCategory;
import org.patchbukkit.testplugin.TestExpectation;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.UUID;
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",
category = TestCategory.STUBS, expectation = TestExpectation.EXPECT_UNSUPPORTED)
public void testGetWorlds() {
@ -128,7 +119,4 @@ public final class StubTests {
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.patchbukkit.testplugin.ConformanceTest;
import org.patchbukkit.testplugin.TestCategory;
import org.bukkit.plugin.java.JavaPlugin;
import static org.patchbukkit.testplugin.TestAssertions.*;
@SuppressWarnings("deprecation")
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)
public void testGetDataVersion() {
UnsafeValues unsafe = Bukkit.getUnsafe();
@ -51,11 +46,4 @@ public final class UnsafeValuesTests {
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);
}
}