From e73be72fae7858324c479e21b52b6eb7d30cb053 Mon Sep 17 00:00:00 2001 From: Bukkit/Spigot Date: Sun, 8 Jan 2012 23:29:33 +0000 Subject: [PATCH] Fixed YamlConfiguration creating empty lines when reading a file with no contents, and made it trim the initial newlines of any existing config header By: Nathan Adams --- .../configuration/file/YamlConfiguration.java | 7 +++-- .../file/FileConfigurationTest.java | 29 ++++++++++++++++--- 2 files changed, 30 insertions(+), 6 deletions(-) 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 237018e3d8..a15f69b735 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 @@ -148,6 +148,7 @@ public class YamlConfiguration extends FileConfiguration { String[] lines = input.split("\r?\n", -1); StringBuilder result = new StringBuilder(); boolean readingHeader = true; + boolean foundHeader = false; for (int i = 0; (i < lines.length) && (readingHeader); i++) { String line = lines[i]; @@ -160,9 +161,11 @@ public class YamlConfiguration extends FileConfiguration { if (line.length() > COMMENT_PREFIX.length()) { result.append(line.substring(COMMENT_PREFIX.length())); } - } else if (line.length() == 0) { + + foundHeader = true; + } else if ((foundHeader) && (line.length() == 0)) { result.append("\n"); - } else { + } else if (foundHeader) { readingHeader = false; } } 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 2b976725a0..627ca24efc 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 @@ -170,19 +170,40 @@ public abstract class FileConfigurationTest extends MemoryConfigurationTest { String saved = getTestValuesString(); String header = getTestHeaderResult(); String expected = getTestHeaderInput(); - + defaults.loadFromString(header); config.loadFromString(saved); config.setDefaults(defaults); - + assertNull(config.options().header()); assertEquals(expected, defaults.options().header()); - + for (Map.Entry entry : values.entrySet()) { assertEquals(entry.getValue(), config.get(entry.getKey())); } - + assertEquals(values.keySet(), config.getKeys(true)); assertEquals(header + "\n" + saved, config.saveToString()); + + config = getConfig(); + config.loadFromString(getTestHeaderResult() + saved); + assertEquals(getTestHeaderResult() + saved, config.saveToString()); + } + + @Test + public void testReloadEmptyConfig() throws Exception { + FileConfiguration config = getConfig(); + + assertEquals("", config.saveToString()); + + config = getConfig(); + config.loadFromString(""); + + assertEquals("", config.saveToString()); + + config = getConfig(); + config.loadFromString("\n\n"); // Should trim the first newlines of a header + + assertEquals("", config.saveToString()); } }