BREAKING CHANGE: New releases require Java 25/Purpur 26.2 and use purpur-tree-feller-<version>.jar. Runtime TreeFeller identity, data folder, progression and felling/undo behavior are unchanged. Replace the old JAR rather than installing both distributions. The local harness now selects Purpur 2618; its stored worlds and operator/port/RCON settings are preserved. No containers are started by this migration.
54 lines
2.6 KiB
Java
54 lines
2.6 KiB
Java
package games.dmg.treefeller;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
import java.io.DataInputStream;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.util.Map;
|
|
import java.util.jar.JarFile;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.yaml.snakeyaml.Yaml;
|
|
|
|
class PurpurDistributionTest {
|
|
@Test
|
|
void packagesNewNameWithoutChangingRuntimeIdentityOrBundlingTheApi() throws Exception {
|
|
Path artifact = Path.of(System.getProperty("distribution.jar"));
|
|
String version = System.getProperty("distribution.version");
|
|
assertEquals("purpur-tree-feller-" + version + ".jar", artifact.getFileName().toString());
|
|
try (var jar = new JarFile(artifact.toFile())) {
|
|
Map<?, ?> metadata = new Yaml().load(jar.getInputStream(jar.getJarEntry("plugin.yml")));
|
|
assertEquals(version, metadata.get("version"));
|
|
assertEquals("TreeFeller", metadata.get("name"), "Retain the data directory and persistent namespace");
|
|
assertEquals("games.dmg.treefeller.TreeFellerPlugin", metadata.get("main"));
|
|
assertTrue(((Map<?, ?>) metadata.get("permissions")).containsKey("treefeller.admin"));
|
|
assertFalse(jar.stream().anyMatch(entry -> entry.getName().startsWith("org/bukkit/")
|
|
|| entry.getName().startsWith("org/purpurmc/") || entry.getName().endsWith("Test.class")));
|
|
}
|
|
}
|
|
|
|
@Test
|
|
void pluginBytecodeTargetsJava25() throws Exception {
|
|
try (var jar = new JarFile(System.getProperty("distribution.jar"));
|
|
var bytecode = new DataInputStream(jar.getInputStream(
|
|
jar.getJarEntry("games/dmg/treefeller/TreeFellerPlugin.class")))) {
|
|
assertEquals(0xCAFEBABE, bytecode.readInt());
|
|
bytecode.readUnsignedShort();
|
|
assertEquals(69, bytecode.readUnsignedShort());
|
|
}
|
|
}
|
|
|
|
@Test
|
|
void releaseAndCiAgreeWithThePurpurDistributionNameAndToolchain() throws Exception {
|
|
String build = Files.readString(Path.of("build.gradle.kts"));
|
|
assertTrue(build.contains("purpur-api:26.2.build.2618-stable"));
|
|
assertFalse(build.contains("org.spigotmc:spigot-api"));
|
|
for (String workflow : new String[] {"ci.yml", "release.yml"}) {
|
|
String content = Files.readString(Path.of(".gitea/workflows", workflow));
|
|
assertTrue(content.contains("java-version: 25"));
|
|
assertTrue(content.contains("purpur-tree-feller-"), workflow);
|
|
assertFalse(content.contains("build/libs/tree-feller-") || content.contains("name: tree-feller-"), workflow);
|
|
}
|
|
}
|
|
}
|