Backed out changeset: e9ec8f7cbaa9 - keep ignoring duplicate keys
diff --git a/src/main/java/org/yaml/snakeyaml/constructor/BaseConstructor.java b/src/main/java/org/yaml/snakeyaml/constructor/BaseConstructor.java
index 755a5a7..227b95d 100644
--- a/src/main/java/org/yaml/snakeyaml/constructor/BaseConstructor.java
+++ b/src/main/java/org/yaml/snakeyaml/constructor/BaseConstructor.java
@@ -382,10 +382,7 @@
new RecursiveTuple<Map<Object, Object>, RecursiveTuple<Object, Object>>(
mapping, new RecursiveTuple<Object, Object>(key, value)));
} else {
- Object previous = mapping.put(key, value);
- if (previous != null) throw new ConstructorException("while constructing a mapping",
- node.getStartMark(), "found duplicate key '" + key + "' with values '" + previous + "' and '" + value + "'", tuple
- .getKeyNode().getStartMark());
+ mapping.put(key, value);
}
}
}
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue139/MergeValueTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue139/MergeValueTest.java
index 399de94..55bf50f 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue139/MergeValueTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue139/MergeValueTest.java
@@ -21,33 +21,21 @@
import org.yaml.snakeyaml.Util;
import org.yaml.snakeyaml.Yaml;
-import org.yaml.snakeyaml.constructor.ConstructorException;
public class MergeValueTest extends TestCase {
public void testNotUniqueSimple() {
- String simple = "{k: 1, k: 2}";
+ String simple = "{key: 1, key: 2}";
Yaml yaml = new Yaml();
- try {
- yaml.load(simple);
- fail("Duplicate key must not be accepted.");
- } catch (ConstructorException e) {
- System.out.print(e);
- assertTrue(simple, e.getMessage().contains("duplicate key"));
- }
+ @SuppressWarnings("unchecked")
+ Map<String, Integer> map = (Map<String, Integer>) yaml.load(simple);
+ assertEquals(1, map.size());
+ assertEquals(new Integer(2), map.get("key"));
}
public void testMerge() {
check("issues/issue139-1.yaml");// merge with unique keys
- }
-
- public void testMergeWithSameKey() {
- try {
- check("issues/issue139-2.yaml");// merge with same key
- fail("Duplicate key must not be accepted.");
- } catch (ConstructorException e) {
- assertTrue(e.getMessage().contains("duplicate key"));
- }
+ check("issues/issue139-2.yaml");// merge with same key
}
private void check(String name) {
@@ -76,7 +64,7 @@
assertEquals(2, map.size());
Map<String, Integer> common = (Map<String, Integer>) map.get("common");
Map<String, Integer> production = (Map<String, Integer>) map.get("production");
- assertEquals(new Integer(1), common.get("key"));
- assertEquals(new Integer(2), production.get("key"));
+ assertEquals(new Integer(2), common.get("key"));
+ assertEquals(new Integer(3), production.get("key"));
}
}
diff --git a/src/test/resources/issues/issue139-2.yaml b/src/test/resources/issues/issue139-2.yaml
index b52d1d5..ca2967c 100644
--- a/src/test/resources/issues/issue139-2.yaml
+++ b/src/test/resources/issues/issue139-2.yaml
@@ -1,6 +1,6 @@
common: &id_common
key: 1
- key: 2 # this is the same key
+ key: 2 # this value must overwrite the previous. Is it specified ?
production:
<<: *id_common
\ No newline at end of file
diff --git a/src/test/resources/issues/issue139-3.yaml b/src/test/resources/issues/issue139-3.yaml
index 8ed5a48..3b5d0d9 100644
--- a/src/test/resources/issues/issue139-3.yaml
+++ b/src/test/resources/issues/issue139-3.yaml
@@ -1,6 +1,7 @@
common: &id_common
key: 1
+ key: 2
production:
<<: *id_common
- key: 2 # this value must stay
\ No newline at end of file
+ key: 3 # this value must stay
\ No newline at end of file