77 lines
2.8 KiB
Java
77 lines
2.8 KiB
Java
package cn.infstar.essentialsC.util;
|
|
|
|
import org.bukkit.configuration.file.YamlConfiguration;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.io.TempDir;
|
|
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
|
class AtomicYamlWriterTest {
|
|
|
|
@TempDir
|
|
Path temporaryDirectory;
|
|
|
|
@Test
|
|
void createsParentDirectoriesAndWritesUtf8Yaml() throws Exception {
|
|
Path target = temporaryDirectory.resolve("nested/data.yml");
|
|
YamlConfiguration configuration = new YamlConfiguration();
|
|
configuration.set("message", "中文内容");
|
|
|
|
AtomicYamlWriter.save(configuration, target.toFile());
|
|
|
|
assertTrue(Files.exists(target));
|
|
assertTrue(Files.readString(target, StandardCharsets.UTF_8).contains("中文内容"));
|
|
try (var files = Files.list(target.getParent())) {
|
|
assertFalse(files.anyMatch(path -> path.getFileName().toString().endsWith(".tmp")));
|
|
}
|
|
}
|
|
|
|
@Test
|
|
void replacesExistingYamlWithoutRetainingOldValues() throws Exception {
|
|
Path target = temporaryDirectory.resolve("state.yml");
|
|
YamlConfiguration initial = new YamlConfiguration();
|
|
initial.set("old-value", true);
|
|
AtomicYamlWriter.save(initial, target.toFile());
|
|
|
|
YamlConfiguration replacement = new YamlConfiguration();
|
|
replacement.set("new-value", 42);
|
|
AtomicYamlWriter.save(replacement, target.toFile());
|
|
|
|
YamlConfiguration loaded = YamlConfiguration.loadConfiguration(target.toFile());
|
|
assertFalse(loaded.contains("old-value"));
|
|
assertEquals(42, loaded.getInt("new-value"));
|
|
}
|
|
|
|
@Test
|
|
void supportsShortTargetFileNames() throws Exception {
|
|
Path target = temporaryDirectory.resolve("x");
|
|
YamlConfiguration configuration = new YamlConfiguration();
|
|
configuration.set("written", true);
|
|
|
|
AtomicYamlWriter.save(configuration, target.toFile());
|
|
|
|
assertTrue(YamlConfiguration.loadConfiguration(target.toFile()).getBoolean("written"));
|
|
}
|
|
|
|
@Test
|
|
void preservesParsedChineseComments() throws Exception {
|
|
Path target = temporaryDirectory.resolve("commented.yml");
|
|
YamlConfiguration configuration = new YamlConfiguration();
|
|
configuration.options().parseComments(true);
|
|
configuration.loadFromString("# 中文配置注释\nenabled: false\n");
|
|
configuration.set("enabled", true);
|
|
|
|
AtomicYamlWriter.save(configuration, target.toFile());
|
|
|
|
String saved = Files.readString(target, StandardCharsets.UTF_8);
|
|
assertTrue(saved.contains("# 中文配置注释"));
|
|
assertTrue(saved.contains("enabled: true"));
|
|
}
|
|
}
|