From 7f37ce3dc1736b9113de566a55d9b41ba6d9a120 Mon Sep 17 00:00:00 2001 From: Nathan Adams Date: Sun, 8 Jan 2012 23:29:33 +0000 Subject: Fixed YamlConfiguration creating empty lines when reading a file with no contents, and made it trim the initial newlines of any existing config header --- .../configuration/file/YamlConfiguration.java | 7 ++++-- .../configuration/file/FileConfigurationTest.java | 29 +++++++++++++++++++--- 2 files changed, 30 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java b/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java index 237018e3..a15f69b7 100644 --- a/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java +++ b/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/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java b/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java index 2b976725..627ca24e 100644 --- a/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java +++ b/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()); } } -- cgit v1.2.3