Rename plugin to MagicGem Reforged

This commit is contained in:
Coldsmiles
2026-10-04 23:42:44 +08:00
parent 95e3ed05ea
commit 953c15e380
18 changed files with 291 additions and 634 deletions
@@ -1,10 +1,8 @@
package cn.infstar.cmagicgem.migration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.logging.Logger;
@@ -18,81 +16,71 @@ class LegacyDirectoryImporterTest {
Path temporaryDirectory;
@Test
void mergesOldDirectoryWithoutOverwritingTargetAndKeepsConflictBackup() throws Exception {
void importsOriginalMagicGemDirectoryIntoReforgedTarget() throws Exception {
Path plugins = Files.createDirectory(temporaryDirectory.resolve("plugins"));
Path source = Files.createDirectories(plugins.resolve("CMagicGem/gems"));
Path target = Files.createDirectories(plugins.resolve("MagicGem/gems"));
Path oldGem = source.resolve("Shared.yml");
Path currentGem = target.resolve("Shared.yml");
Files.writeString(oldGem, "Shared:\n Name: Old Name\n Material: DIAMOND\n OldOnly: retained\n");
Files.writeString(currentGem, "Shared:\n Name: Current Name\n Material: DIAMOND\n CurrentOnly: retained\n");
Path source = Files.createDirectories(plugins.resolve("MagicGem/gems"));
Path target = plugins.resolve("MagicGem-Reforged");
Files.writeString(source.resolve("Custom.yml"), "Custom:\n Name: Imported\n");
Files.writeString(source.getParent().resolve("config.yml"), "language: en_US\nbackpack: true\nold-option: kept\n");
Files.writeString(target.getParent().resolve("config.yml"), "language: zh_CN\nbackpack: false\n");
Files.writeString(source.getParent().resolve("config.yml"), "language: en_US\nbackpack: true\n");
LegacyDirectoryImporter importer = importer(plugins, plugins.resolve("MagicGem"), () -> { });
LegacyDirectoryImporter.ImportResult result = importer.importIfPresent();
LegacyDirectoryImporter.ImportResult result = importer(plugins, target).importIfPresent();
YamlConfiguration mergedGem = load(currentGem);
YamlConfiguration mergedConfig = load(target.getParent().resolve("config.yml"));
assertEquals("Current Name", mergedGem.getString("Shared.Name"));
assertEquals("retained", mergedGem.getString("Shared.OldOnly"));
assertEquals("retained", mergedGem.getString("Shared.CurrentOnly"));
assertTrue(Files.isRegularFile(target.resolve("Custom.yml")));
assertEquals("zh_CN", mergedConfig.getString("language"));
assertEquals(false, mergedConfig.getBoolean("backpack"));
assertEquals("kept", mergedConfig.getString("old-option"));
assertTrue(Files.isRegularFile(plugins.resolve("MagicGem/migration-backup/CMagicGem/gems/Shared.yml")));
assertEquals("Old Name", load(oldGem).getString("Shared.Name"));
assertTrue(result.copiedFiles() >= 1);
assertTrue(result.mergedFiles() >= 2);
assertTrue(result.conflictFiles() >= 1);
assertTrue(Files.isRegularFile(target.resolve("gems/Custom.yml")));
assertTrue(Files.isRegularFile(target.resolve("config.yml")));
assertEquals("Custom:\n Name: Imported\n", Files.readString(target.resolve("gems/Custom.yml")));
assertEquals("language: en_US\nbackpack: true\n", Files.readString(target.resolve("config.yml")));
assertTrue(Files.isDirectory(source.getParent()));
assertTrue(result.copiedFiles() >= 2);
assertEquals(0, result.conflictFiles());
assertFalse(result.alreadyMigrated());
}
@Test
void preservesTargetFilesAndBacksUpConflicts() throws Exception {
Path plugins = Files.createDirectory(temporaryDirectory.resolve("plugins"));
Path source = Files.createDirectories(plugins.resolve("MagicGem/gems"));
Path target = Files.createDirectories(plugins.resolve("MagicGem-Reforged/gems"));
Files.writeString(source.resolve("Shared.yml"), "Shared:\n Name: Original\n");
Files.writeString(target.resolve("Shared.yml"), "Shared:\n Name: Reforged\n");
LegacyDirectoryImporter.ImportResult result = importer(plugins, target.getParent()).importIfPresent();
assertEquals("Shared:\n Name: Reforged\n", Files.readString(target.resolve("Shared.yml")));
assertEquals("Shared:\n Name: Original\n",
Files.readString(target.getParent().resolve("migration-backup/MagicGem/gems/Shared.yml")));
assertEquals(1, result.conflictFiles());
}
@Test
void markerMakesMigrationIdempotent() throws Exception {
Path plugins = Files.createDirectory(temporaryDirectory.resolve("plugins"));
Path source = Files.createDirectories(plugins.resolve("MagicGem"));
Path target = plugins.resolve("MagicGem-Reforged");
Files.writeString(source.resolve("config.yml"), "language: zh_CN\n");
LegacyDirectoryImporter importer = importer(plugins, target);
importer.importIfPresent();
LegacyDirectoryImporter.ImportResult repeated = importer.importIfPresent();
assertTrue(repeated.alreadyMigrated());
assertEquals(0, repeated.copiedFiles());
assertEquals(0, repeated.conflictFiles());
}
@Test
void oldConfigurationOverridesBundledDefaultsWhenTargetHasNoConfig() throws Exception {
void missingOriginalDirectoryDoesNothing() throws Exception {
Path plugins = Files.createDirectory(temporaryDirectory.resolve("plugins"));
Path source = Files.createDirectories(plugins.resolve("CMagicGem"));
Path target = plugins.resolve("MagicGem");
Files.writeString(source.resolve("config.yml"), "lang: en_US\nbackpack: true\n");
Runnable createDefaults = () -> {
try {
Files.createDirectories(target);
Files.writeString(target.resolve("config.yml"), "language: zh_CN\nbackpack: false\nworkbench: true\n");
} catch (IOException exception) {
throw new IllegalStateException(exception);
}
};
Path target = plugins.resolve("MagicGem-Reforged");
LegacyDirectoryImporter.ImportResult result = importer(plugins, target, createDefaults).importIfPresent();
YamlConfiguration config = load(target.resolve("config.yml"));
assertEquals("en_US", config.getString("language"));
assertEquals(true, config.getBoolean("backpack"));
assertEquals(true, config.getBoolean("workbench"));
assertTrue(result.configImported());
}
@Test
void originalMagicGemDirectoryIsTreatedAsTheActiveTarget() throws Exception {
Path plugins = Files.createDirectory(temporaryDirectory.resolve("plugins"));
Path target = Files.createDirectory(plugins.resolve("MagicGem"));
LegacyDirectoryImporter.ImportResult result = importer(plugins, target, () -> { }).importIfPresent();
LegacyDirectoryImporter.ImportResult result = importer(plugins, target).importIfPresent();
assertEquals(0, result.copiedFiles());
assertEquals(0, result.conflictFiles());
assertFalse(result.alreadyMigrated());
assertFalse(Files.exists(target.resolve(".migration-cmagicgem-v1.complete")));
assertFalse(Files.exists(target));
}
private LegacyDirectoryImporter importer(Path plugins, Path target, Runnable saveDefaults) {
return new LegacyDirectoryImporter(plugins, target, saveDefaults, Logger.getLogger("migration-test"));
}
private YamlConfiguration load(Path path) {
return YamlConfiguration.loadConfiguration(path.toFile());
private LegacyDirectoryImporter importer(Path plugins, Path target) {
return new LegacyDirectoryImporter(plugins, target, Logger.getLogger("migration-test"));
}
}
@@ -23,11 +23,11 @@ class BundledConfigurationTest {
private final DirectiveParser parser = new DirectiveParser();
@Test
void pluginDescriptorKeepsLegacyCommandAndPermissionCompatibility() {
void pluginDescriptorUsesReforgedEntryPointAndKeepsCompatibility() {
YamlConfiguration descriptor = YamlConfiguration.loadConfiguration(new File("src/main/resources/plugin.yml"));
assertTrue(descriptor.getString("name").equalsIgnoreCase("MagicGem"));
assertTrue(descriptor.getString("main").equals("pku.yim.magicgem.MagicGem"));
assertTrue(descriptor.getString("name").equalsIgnoreCase("MagicGem-Reforged"));
assertTrue(descriptor.getString("main").equals("cn.infstar.magicgemreforged.MagicGemReforged"));
assertNotNull(descriptor.getConfigurationSection("commands.mgem"));
assertTrue(descriptor.getStringList("commands.mgem.aliases").contains("cmg"));
assertTrue(descriptor.getStringList("commands.mgem.aliases").contains("cmgem"));