SPIGOT-6885: Add test and easier to debug code for reference in yaml configuration comments

By: Wolf2323 <gabrielpatrikurban@gmail.com>
This commit is contained in:
Bukkit/Spigot 2023-04-16 10:26:10 +10:00
parent 57fc47e650
commit 7c9037dfee
2 changed files with 31 additions and 4 deletions

View File

@ -100,12 +100,15 @@ public class YamlConfiguration extends FileConfiguration {
MappingNode node;
try (Reader reader = new UnicodeReader(new ByteArrayInputStream(contents.getBytes(StandardCharsets.UTF_8)))) {
node = (MappingNode) yaml.compose(reader);
} catch (YAMLException | IOException e) {
throw new InvalidConfigurationException(e);
Node rawNode = yaml.compose(reader);
try {
node = (MappingNode) rawNode;
} catch (ClassCastException e) {
throw new InvalidConfigurationException("Top level is not a Map.");
}
} catch (YAMLException | IOException | ClassCastException e) {
throw new InvalidConfigurationException(e);
}
this.map.clear();

View File

@ -11,6 +11,7 @@ import java.util.Map.Entry;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.MemoryConfiguration;
import org.jetbrains.annotations.NotNull;
import org.junit.Test;
public class YamlConfigurationTest extends FileConfigurationTest {
@ -170,6 +171,29 @@ public class YamlConfigurationTest extends FileConfigurationTest {
assertEquals(data, result);
}
// SPIGOT-6885
@Test
public void testReference() throws InvalidConfigurationException {
String okYAML = "dummy: test\n"
+ "conf:\n"
+ " - test #comment ok\n";
assertNotNull(toConfig(okYAML, false));
assertNotNull(toConfig(okYAML, true));
String badYAML = "dummy: &a test\n"
+ "conf:\n"
+ " - *a #comment not ok here\n";
assertNotNull(toConfig(badYAML, false));
assertNotNull(toConfig(badYAML, true));
}
private YamlConfiguration toConfig(@NotNull String contents, boolean parseComments) throws InvalidConfigurationException {
YamlConfiguration config = new YamlConfiguration();
config.options().parseComments(parseComments);
config.loadFromString(contents);
return config;
}
@Test
public void testOnlyHeader() {
YamlConfiguration config = getConfig();