From d34f1cd453743b2df676482859cca6aa0bafcf73 Mon Sep 17 00:00:00 2001 From: Bukkit/Spigot Date: Wed, 13 Jan 2021 08:35:37 +1100 Subject: [PATCH] SPIGOT-6274: Reloading configuration does not clear previous values By: blablubbabc --- .../configuration/file/YamlConfiguration.java | 2 + .../file/FileConfigurationTest.java | 65 +++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/paper-api/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java b/paper-api/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java index be8d35f156..6476f3794b 100644 --- a/paper-api/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java +++ b/paper-api/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java @@ -66,6 +66,8 @@ public class YamlConfiguration extends FileConfiguration { options().header(header); } + this.map.clear(); + if (input != null) { convertMapsToSections(input, this); } diff --git a/paper-api/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java b/paper-api/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java index a996753b93..4ef7aa9818 100644 --- a/paper-api/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java +++ b/paper-api/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java @@ -206,4 +206,69 @@ public abstract class FileConfigurationTest extends MemoryConfigurationTest { assertEquals("", config.saveToString()); } + + @Test + public void testReloadClear() throws Exception { + // Test for SPIGOT-6274 - load does not clear values + FileConfiguration config = getConfig(); + + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + + config.set("test", true); + assertTrue(config.contains("test")); + assertTrue(config.getBoolean("test")); + + config.loadFromString(""); + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + } + + @Test + public void testReloadClear2() throws Exception { + // Test for SPIGOT-6274 - load does not clear values + FileConfiguration config = getConfig(); + + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + + config.set("test", true); + assertTrue(config.contains("test")); + assertTrue(config.getBoolean("test")); + + config.loadFromString("other: false"); // Test both null and non-null code paths + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + } + + @Test + public void testReloadClear3() throws Exception { + // Test for SPIGOT-6274 - load does not clear values + FileConfiguration config = getConfig(); + + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + + config.set("test", true); + assertTrue(config.contains("test")); + assertTrue(config.getBoolean("test")); + + config.loadFromString("other: false\nsection:\n value: true"); // SPIGOT-6313: Test with section + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + + assertTrue(config.contains("other")); + assertTrue(config.contains("section")); + assertTrue(config.contains("section.value")); + assertTrue(config.getBoolean("section.value")); + + assertFalse(config.contains("test")); + assertFalse(config.getBoolean("test")); + } }