geforkt von Mirrors/Paper
#703: Fix/test yaml anchors and merge
By: Wolf2323 <gabrielpatrikurban@gmail.com>
Dieser Commit ist enthalten in:
Ursprung
014fc854ad
Commit
4fd0026eb5
@ -141,6 +141,7 @@ public class YamlConfiguration extends FileConfiguration {
|
||||
}
|
||||
|
||||
private void fromNodeTree(@NotNull MappingNode input, @NotNull ConfigurationSection section) {
|
||||
constructor.flattenMapping(input);
|
||||
for (NodeTuple nodeTuple : input.getValue()) {
|
||||
ScalarNode key = (ScalarNode) nodeTuple.getKeyNode();
|
||||
String keyString = key.getValue();
|
||||
|
@ -7,6 +7,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.yaml.snakeyaml.constructor.SafeConstructor;
|
||||
import org.yaml.snakeyaml.error.YAMLException;
|
||||
import org.yaml.snakeyaml.nodes.MappingNode;
|
||||
import org.yaml.snakeyaml.nodes.Node;
|
||||
import org.yaml.snakeyaml.nodes.Tag;
|
||||
|
||||
@ -16,6 +17,11 @@ public class YamlConstructor extends SafeConstructor {
|
||||
this.yamlConstructors.put(Tag.MAP, new ConstructCustomObject());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void flattenMapping(@NotNull final MappingNode node) {
|
||||
super.flattenMapping(node);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Object construct(@NotNull Node node) {
|
||||
return constructObject(node);
|
||||
|
@ -4,6 +4,7 @@ import static org.junit.Assert.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.junit.Test;
|
||||
|
||||
public class YamlConfigurationTest extends FileConfigurationTest {
|
||||
@ -89,4 +90,58 @@ public class YamlConfigurationTest extends FileConfigurationTest {
|
||||
|
||||
assertEquals(expected, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAnchorNode() throws InvalidConfigurationException {
|
||||
YamlConfiguration config = getConfig();
|
||||
String content = "effects:\n"
|
||||
+ " eff1: &novaEarth\n"
|
||||
+ " position: special\n"
|
||||
+ " effect: nova\n"
|
||||
+ " eff2: *novaEarth\n"
|
||||
+ " eff3: *novaEarth";
|
||||
config.loadFromString(content);
|
||||
|
||||
String expected = "effects:\n"
|
||||
+ " eff1:\n"
|
||||
+ " position: special\n"
|
||||
+ " effect: nova\n"
|
||||
+ " eff2:\n"
|
||||
+ " position: special\n"
|
||||
+ " effect: nova\n"
|
||||
+ " eff3:\n"
|
||||
+ " position: special\n"
|
||||
+ " effect: nova\n";
|
||||
assertEquals(expected, config.saveToString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMergeNode() throws InvalidConfigurationException {
|
||||
YamlConfiguration config = getConfig();
|
||||
String content = "effects:\n"
|
||||
+ " eff1: &novaEarth\n"
|
||||
+ " position: special\n"
|
||||
+ " effect: nova\n"
|
||||
+ " eff2: \n"
|
||||
+ " <<: *novaEarth\n"
|
||||
+ " height-offset: 0\n"
|
||||
+ " eff3: \n"
|
||||
+ " <<: *novaEarth\n"
|
||||
+ " height-offset: 2";
|
||||
config.loadFromString(content);
|
||||
|
||||
String expected = "effects:\n"
|
||||
+ " eff1:\n"
|
||||
+ " position: special\n"
|
||||
+ " effect: nova\n"
|
||||
+ " eff2:\n"
|
||||
+ " position: special\n"
|
||||
+ " effect: nova\n"
|
||||
+ " height-offset: 0\n"
|
||||
+ " eff3:\n"
|
||||
+ " position: special\n"
|
||||
+ " effect: nova\n"
|
||||
+ " height-offset: 2\n";
|
||||
assertEquals(expected, config.saveToString());
|
||||
}
|
||||
}
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren