aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java')
-rw-r--r--src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java903
1 files changed, 437 insertions, 466 deletions
diff --git a/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java b/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java
index 5bc1a0e6..eac51023 100644
--- a/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java
+++ b/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java
@@ -1,17 +1,15 @@
/**
- * Copyright (c) 2008, http://www.snakeyaml.org
+ * Copyright (c) 2008, SnakeYAML
*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
*/
package org.yaml.snakeyaml.recursive.generics;
@@ -26,474 +24,447 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
-
import junit.framework.TestCase;
-
+import org.yaml.snakeyaml.LoaderOptions;
import org.yaml.snakeyaml.TypeDescription;
import org.yaml.snakeyaml.Util;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
-import org.yaml.snakeyaml.generics.GenericsBugDetector;
import org.yaml.snakeyaml.nodes.Tag;
import org.yaml.snakeyaml.representer.Representer;
public class HumanGenericsTest extends TestCase {
- public void testNoChildren() throws IOException, IntrospectionException {
- if (!GenericsBugDetector.isProperIntrospection()) {
- return;
- }
- HumanGen father = new HumanGen();
- father.setName("Father");
- father.setBirthday(new Date(1000000000));
- father.setBirthPlace("Leningrad");
- father.setBankAccountOwner(father);
- HumanGen mother = new HumanGen();
- mother.setName("Mother");
- mother.setBirthday(new Date(100000000000L));
- mother.setBirthPlace("Saint-Petersburg");
- father.setPartner(mother);
- mother.setPartner(father);
- mother.setBankAccountOwner(father);
- Yaml yaml = new Yaml();
- String output = yaml.dump(father);
- String etalon = Util.getLocalResource("recursive/generics/no-children-1.yaml");
- assertEquals(etalon, output);
- //
- HumanGen father2 = (HumanGen) yaml.load(output);
- assertNotNull(father2);
- assertEquals("Father", father2.getName());
- assertEquals("Mother", father2.getPartner().getName());
- assertEquals("Father", father2.getBankAccountOwner().getName());
- assertSame(father2, father2.getBankAccountOwner());
- }
-
- /**
- * the YAML document should contain no global tags
- *
- * @throws IntrospectionException
- */
- public void testNoChildren2() throws IOException, IntrospectionException {
- if (!GenericsBugDetector.isProperIntrospection()) {
- return;
- }
- HumanGen father = new HumanGen();
- father.setName("Father");
- father.setBirthday(new Date(1000000000));
- father.setBirthPlace("Leningrad");
- father.setBankAccountOwner(father);
- HumanGen mother = new HumanGen();
- mother.setName("Mother");
- mother.setBirthday(new Date(100000000000L));
- mother.setBirthPlace("Saint-Petersburg");
- father.setPartner(mother);
- mother.setPartner(father);
- mother.setBankAccountOwner(father);
- Yaml yaml = new Yaml();
- String output = yaml.dumpAsMap(father);
- String etalon = Util.getLocalResource("recursive/generics/no-children-2.yaml");
- assertEquals(etalon, output);
- //
- Yaml loader = new Yaml();
- HumanGen father2 = (HumanGen) loader.loadAs(etalon, HumanGen.class);
- assertNotNull(father2);
- assertEquals("Father", father2.getName());
- assertEquals("Mother", father2.getPartner().getName());
- assertEquals("Father", father2.getBankAccountOwner().getName());
- assertSame(father2, father2.getBankAccountOwner());
- }
-
- public void testChildren() throws IOException, IntrospectionException {
- if (!GenericsBugDetector.isProperIntrospection()) {
- return;
- }
- HumanGen father = new HumanGen();
- father.setName("Father");
- father.setBirthday(new Date(1000000000));
- father.setBirthPlace("Leningrad");
- father.setBankAccountOwner(father);
- //
- HumanGen mother = new HumanGen();
- mother.setName("Mother");
- mother.setBirthday(new Date(100000000000L));
- mother.setBirthPlace("Saint-Petersburg");
- father.setPartner(mother);
- mother.setPartner(father);
- mother.setBankAccountOwner(father);
- //
- HumanGen son = new HumanGen();
- son.setName("Son");
- son.setBirthday(new Date(310000000000L));
- son.setBirthPlace("Munich");
- son.setBankAccountOwner(father);
- son.setFather(father);
- son.setMother(mother);
- //
- HumanGen daughter = new HumanGen();
- daughter.setName("Daughter");
- daughter.setBirthday(new Date(420000000000L));
- daughter.setBirthPlace("New York");
- daughter.setBankAccountOwner(father);
- daughter.setFather(father);
- daughter.setMother(mother);
- //
- Set<HumanGen> children = new LinkedHashSet<HumanGen>(2);
- children.add(son);
- children.add(daughter);
- father.setChildren(children);
- mother.setChildren(children);
- //
-
- Constructor constructor = new Constructor();
- TypeDescription humanDescription = new TypeDescription(HumanGen.class);
- humanDescription.putMapPropertyType("children", HumanGen.class, Object.class);
- constructor.addTypeDescription(humanDescription);
-
- Yaml yaml = new Yaml(constructor);
- String output = yaml.dump(son);
- // System.out.println(output);
- String etalon = Util.getLocalResource("recursive/generics/with-children.yaml");
- assertEquals(etalon, output);
- //
- HumanGen son2 = (HumanGen) yaml.load(output);
- assertNotNull(son2);
- assertEquals("Son", son.getName());
-
- HumanGen father2 = son2.getFather();
- assertEquals("Father", father2.getName());
- assertEquals("Mother", son2.getMother().getName());
- assertSame(father2, father2.getBankAccountOwner());
- assertSame(father2.getPartner(), son2.getMother());
- assertSame(father2, son2.getMother().getPartner());
-
- Set<HumanGen> children2 = father2.getChildren();
- assertEquals(2, children2.size());
- assertSame(father2.getPartner().getChildren(), children2);
-
- for (Object child : children2) {
- assertSame(HumanGen.class, child.getClass()); // check if type
- // descriptor was correct
- }
- }
-
- public void testChildren2() throws IOException, IntrospectionException {
- if (!GenericsBugDetector.isProperIntrospection()) {
- return;
- }
- HumanGen2 father = new HumanGen2();
- father.setName("Father");
- father.setBirthday(new Date(1000000000));
- father.setBirthPlace("Leningrad");
- father.setBankAccountOwner(father);
- //
- HumanGen2 mother = new HumanGen2();
- mother.setName("Mother");
- mother.setBirthday(new Date(100000000000L));
- mother.setBirthPlace("Saint-Petersburg");
- father.setPartner(mother);
- mother.setPartner(father);
- mother.setBankAccountOwner(father);
- //
- HumanGen2 son = new HumanGen2();
- son.setName("Son");
- son.setBirthday(new Date(310000000000L));
- son.setBirthPlace("Munich");
- son.setBankAccountOwner(father);
- son.setFather(father);
- son.setMother(mother);
- //
- HumanGen2 daughter = new HumanGen2();
- daughter.setName("Daughter");
- daughter.setBirthday(new Date(420000000000L));
- daughter.setBirthPlace("New York");
- daughter.setBankAccountOwner(father);
- daughter.setFather(father);
- daughter.setMother(mother);
- //
- HashMap<HumanGen2, String> children = new LinkedHashMap<HumanGen2, String>(2);
- children.put(son, "son");
- children.put(daughter, "daughter");
- father.setChildren(children);
- mother.setChildren(children);
- //
- Representer representer = new Representer();
- representer.addClassTag(HumanGen2.class, Tag.MAP);
- Yaml yaml = new Yaml(representer);
- String output = yaml.dump(son);
- // System.out.println(output);
- String etalon = Util.getLocalResource("recursive/generics/with-children-2.yaml");
- assertEquals(etalon, output);
- // load
- TypeDescription humanDescription = new TypeDescription(HumanGen2.class);
- humanDescription.putMapPropertyType("children", HumanGen2.class, String.class);
- Yaml beanLoader = new Yaml(new Constructor(humanDescription));
- //
- HumanGen2 son2 = beanLoader.loadAs(output, HumanGen2.class);
- assertNotNull(son2);
- assertEquals("Son", son.getName());
-
- HumanGen2 father2 = son2.getFather();
- assertEquals("Father", father2.getName());
- assertEquals("Mother", son2.getMother().getName());
- assertSame(father2, father2.getBankAccountOwner());
- assertSame(father2.getPartner(), son2.getMother());
- assertSame(father2, son2.getMother().getPartner());
-
- Map<HumanGen2, String> children2 = father2.getChildren();
- assertEquals(2, children2.size());
- assertSame(father2.getPartner().getChildren(), children2);
-
- }
-
- public void testChildren3() throws IOException, IntrospectionException {
- if (!GenericsBugDetector.isProperIntrospection()) {
- return;
- }
- HumanGen3 father = new HumanGen3();
- father.setName("Father");
- father.setBirthday(new Date(1000000000));
- father.setBirthPlace("Leningrad");
- father.setBankAccountOwner(father);
- //
- HumanGen3 mother = new HumanGen3();
- mother.setName("Mother");
- mother.setBirthday(new Date(100000000000L));
- mother.setBirthPlace("Saint-Petersburg");
- father.setPartner(mother);
- mother.setPartner(father);
- mother.setBankAccountOwner(father);
- //
- HumanGen3 son = new HumanGen3();
- son.setName("Son");
- son.setBirthday(new Date(310000000000L));
- son.setBirthPlace("Munich");
- son.setBankAccountOwner(father);
- son.setFather(father);
- son.setMother(mother);
- //
- HumanGen3 daughter = new HumanGen3();
- daughter.setName("Daughter");
- daughter.setBirthday(new Date(420000000000L));
- daughter.setBirthPlace("New York");
- daughter.setBankAccountOwner(father);
- daughter.setFather(father);
- daughter.setMother(mother);
- //
- ArrayList<HumanGen3> children = new ArrayList<HumanGen3>();
- children.add(son);
- children.add(daughter);
- father.setChildren(children);
- mother.setChildren(children);
- //
-
- Constructor constructor = new Constructor();
- TypeDescription Human3Description = new TypeDescription(HumanGen3.class);
- Human3Description.putListPropertyType("children", HumanGen3.class);
- constructor.addTypeDescription(Human3Description);
-
- Yaml yaml = new Yaml(constructor);
- String output = yaml.dump(son);
- // System.out.println(output);
- String etalon = Util.getLocalResource("recursive/generics/with-children-3.yaml");
- assertEquals(etalon, output);
- //
- HumanGen3 son2 = (HumanGen3) yaml.load(output);
- assertNotNull(son2);
- assertEquals("Son", son.getName());
-
- HumanGen3 father2 = son2.getFather();
- assertEquals("Father", father2.getName());
- assertEquals("Mother", son2.getMother().getName());
- assertSame(father2, father2.getBankAccountOwner());
- assertSame(father2.getPartner(), son2.getMother());
- assertSame(father2, son2.getMother().getPartner());
-
- List<HumanGen3> children2 = father2.getChildren();
- assertEquals(2, children2.size());
- assertSame(father2.getPartner().getChildren(), children2);
-
- for (Object child : children2) {
- assertSame(HumanGen3.class, child.getClass()); // check if type
- // descriptor was
- // correct
- }
- }
-
- /*
- * Loads same structure as created in testChildren. But root object is set
- * of children
- */
- @SuppressWarnings("unchecked")
- public void testChildrenSetAsRoot() throws IOException, IntrospectionException {
- if (!GenericsBugDetector.isProperIntrospection()) {
- return;
- }
- String etalon = Util.getLocalResource("recursive/generics/with-children-as-set.yaml");
-
- Constructor constructor = new Constructor();
- TypeDescription humanDescription = new TypeDescription(HumanGen.class);
- humanDescription.putMapPropertyType("children", HumanGen.class, Object.class);
- constructor.addTypeDescription(humanDescription);
-
- Yaml yaml = new Yaml(constructor);
- Set<HumanGen> children2 = (Set<HumanGen>) yaml.load(etalon);
- assertNotNull(children2);
- assertEquals(2, children2.size());
-
- HumanGen firstChild = children2.iterator().next();
-
- HumanGen father2 = firstChild.getFather();
- assertEquals("Father", father2.getName());
- assertEquals("Mother", firstChild.getMother().getName());
- assertSame(father2, father2.getBankAccountOwner());
- assertSame(father2.getPartner(), firstChild.getMother());
- assertSame(father2, firstChild.getMother().getPartner());
-
- assertSame(father2.getPartner().getChildren(), children2);
-
- for (Object child : children2) {
- assertSame(HumanGen.class, child.getClass()); // check if type
- // descriptor was correct
- }
+ public void testNoChildren() throws IOException, IntrospectionException {
+ HumanGen father = new HumanGen();
+ father.setName("Father");
+ father.setBirthday(new Date(1000000000));
+ father.setBirthPlace("Leningrad");
+ father.setBankAccountOwner(father);
+ HumanGen mother = new HumanGen();
+ mother.setName("Mother");
+ mother.setBirthday(new Date(100000000000L));
+ mother.setBirthPlace("Saint-Petersburg");
+ father.setPartner(mother);
+ mother.setPartner(father);
+ mother.setBankAccountOwner(father);
+ Yaml yaml = new Yaml();
+ String output = yaml.dump(father);
+ String etalon = Util.getLocalResource("recursive/generics/no-children-1.yaml");
+ assertEquals(etalon, output);
+ //
+ HumanGen father2 = yaml.load(output);
+ assertNotNull(father2);
+ assertEquals("Father", father2.getName());
+ assertEquals("Mother", father2.getPartner().getName());
+ assertEquals("Father", father2.getBankAccountOwner().getName());
+ assertSame(father2, father2.getBankAccountOwner());
+ }
+
+ /**
+ * the YAML document should contain no global tags
+ *
+ * @throws IntrospectionException
+ */
+ public void testNoChildren2() throws IOException, IntrospectionException {
+ HumanGen father = new HumanGen();
+ father.setName("Father");
+ father.setBirthday(new Date(1000000000));
+ father.setBirthPlace("Leningrad");
+ father.setBankAccountOwner(father);
+ HumanGen mother = new HumanGen();
+ mother.setName("Mother");
+ mother.setBirthday(new Date(100000000000L));
+ mother.setBirthPlace("Saint-Petersburg");
+ father.setPartner(mother);
+ mother.setPartner(father);
+ mother.setBankAccountOwner(father);
+ Yaml yaml = new Yaml();
+ String output = yaml.dumpAsMap(father);
+ String etalon = Util.getLocalResource("recursive/generics/no-children-2.yaml");
+ assertEquals(etalon, output);
+ //
+ Yaml loader = new Yaml();
+ HumanGen father2 = loader.loadAs(etalon, HumanGen.class);
+ assertNotNull(father2);
+ assertEquals("Father", father2.getName());
+ assertEquals("Mother", father2.getPartner().getName());
+ assertEquals("Father", father2.getBankAccountOwner().getName());
+ assertSame(father2, father2.getBankAccountOwner());
+ }
+
+ public void testChildren() throws IOException, IntrospectionException {
+ HumanGen father = new HumanGen();
+ father.setName("Father");
+ father.setBirthday(new Date(1000000000));
+ father.setBirthPlace("Leningrad");
+ father.setBankAccountOwner(father);
+ //
+ HumanGen mother = new HumanGen();
+ mother.setName("Mother");
+ mother.setBirthday(new Date(100000000000L));
+ mother.setBirthPlace("Saint-Petersburg");
+ father.setPartner(mother);
+ mother.setPartner(father);
+ mother.setBankAccountOwner(father);
+ //
+ HumanGen son = new HumanGen();
+ son.setName("Son");
+ son.setBirthday(new Date(310000000000L));
+ son.setBirthPlace("Munich");
+ son.setBankAccountOwner(father);
+ son.setFather(father);
+ son.setMother(mother);
+ //
+ HumanGen daughter = new HumanGen();
+ daughter.setName("Daughter");
+ daughter.setBirthday(new Date(420000000000L));
+ daughter.setBirthPlace("New York");
+ daughter.setBankAccountOwner(father);
+ daughter.setFather(father);
+ daughter.setMother(mother);
+ //
+ Set<HumanGen> children = new LinkedHashSet<HumanGen>(2);
+ children.add(son);
+ children.add(daughter);
+ father.setChildren(children);
+ mother.setChildren(children);
+ //
+
+ LoaderOptions options = new LoaderOptions();
+ options.setAllowRecursiveKeys(true);
+ Constructor constructor = new Constructor(options);
+ TypeDescription humanDescription = new TypeDescription(HumanGen.class);
+ humanDescription.putMapPropertyType("children", HumanGen.class, Object.class);
+ constructor.addTypeDescription(humanDescription);
+
+ Yaml yaml = new Yaml(constructor);
+ String output = yaml.dump(son);
+ // System.out.println(output);
+ String etalon = Util.getLocalResource("recursive/generics/with-children.yaml");
+ assertEquals(etalon, output);
+ //
+ HumanGen son2 = yaml.load(output);
+ assertNotNull(son2);
+ assertEquals("Son", son.getName());
+
+ HumanGen father2 = son2.getFather();
+ assertEquals("Father", father2.getName());
+ assertEquals("Mother", son2.getMother().getName());
+ assertSame(father2, father2.getBankAccountOwner());
+ assertSame(father2.getPartner(), son2.getMother());
+ assertSame(father2, son2.getMother().getPartner());
+
+ Set<HumanGen> children2 = father2.getChildren();
+ assertEquals(2, children2.size());
+ assertSame(father2.getPartner().getChildren(), children2);
+
+ for (Object child : children2) {
+ assertSame(HumanGen.class, child.getClass()); // check if type
+ // descriptor was correct
}
-
- /*
- * Loads same structure as created in testChildren. But root object is map
- * of children
- */
- @SuppressWarnings("unchecked")
- public void testChildrenMapAsRoot() throws IOException, IntrospectionException {
- if (!GenericsBugDetector.isProperIntrospection()) {
- return;
- }
- String etalon = Util.getLocalResource("recursive/generics/with-children-as-map.yaml");
-
- Constructor constructor = new Constructor();
- TypeDescription Human2Description = new TypeDescription(HumanGen2.class);
- Human2Description.putMapPropertyType("children", HumanGen2.class, String.class);
- constructor.addTypeDescription(Human2Description);
-
- Yaml yaml = new Yaml(constructor);
- Map<HumanGen2, String> children2 = (Map<HumanGen2, String>) yaml.load(etalon);
- assertNotNull(children2);
- assertEquals(2, children2.size());
-
- Entry<HumanGen2, String> firstEntry = children2.entrySet().iterator().next();
- HumanGen2 firstChild = firstEntry.getKey();
-
- HumanGen2 father2 = firstChild.getFather();
- assertEquals("Father", father2.getName());
- assertEquals("Mother", firstChild.getMother().getName());
- assertSame(father2, father2.getBankAccountOwner());
- assertSame(father2.getPartner(), firstChild.getMother());
- assertSame(father2, firstChild.getMother().getPartner());
-
- assertSame(father2.getPartner().getChildren(), children2);
+ }
+
+ public void testChildren2() throws IOException, IntrospectionException {
+ HumanGen2 father = new HumanGen2();
+ father.setName("Father");
+ father.setBirthday(new Date(1000000000));
+ father.setBirthPlace("Leningrad");
+ father.setBankAccountOwner(father);
+ //
+ HumanGen2 mother = new HumanGen2();
+ mother.setName("Mother");
+ mother.setBirthday(new Date(100000000000L));
+ mother.setBirthPlace("Saint-Petersburg");
+ father.setPartner(mother);
+ mother.setPartner(father);
+ mother.setBankAccountOwner(father);
+ //
+ HumanGen2 son = new HumanGen2();
+ son.setName("Son");
+ son.setBirthday(new Date(310000000000L));
+ son.setBirthPlace("Munich");
+ son.setBankAccountOwner(father);
+ son.setFather(father);
+ son.setMother(mother);
+ //
+ HumanGen2 daughter = new HumanGen2();
+ daughter.setName("Daughter");
+ daughter.setBirthday(new Date(420000000000L));
+ daughter.setBirthPlace("New York");
+ daughter.setBankAccountOwner(father);
+ daughter.setFather(father);
+ daughter.setMother(mother);
+ //
+ HashMap<HumanGen2, String> children = new LinkedHashMap<HumanGen2, String>(2);
+ children.put(son, "son");
+ children.put(daughter, "daughter");
+ father.setChildren(children);
+ mother.setChildren(children);
+ //
+ Representer representer = new Representer();
+ representer.addClassTag(HumanGen2.class, Tag.MAP);
+ Yaml yaml = new Yaml(representer);
+ String output = yaml.dump(son);
+ // System.out.println(output);
+ String etalon = Util.getLocalResource("recursive/generics/with-children-2.yaml");
+ assertEquals(etalon, output);
+ // load
+ TypeDescription humanDescription = new TypeDescription(HumanGen2.class);
+ humanDescription.putMapPropertyType("children", HumanGen2.class, String.class);
+
+ LoaderOptions options = new LoaderOptions();
+ options.setAllowRecursiveKeys(true);
+ Yaml beanLoader = new Yaml(new Constructor(humanDescription, options));
+ //
+ HumanGen2 son2 = beanLoader.loadAs(output, HumanGen2.class);
+ assertNotNull(son2);
+ assertEquals("Son", son.getName());
+
+ HumanGen2 father2 = son2.getFather();
+ assertEquals("Father", father2.getName());
+ assertEquals("Mother", son2.getMother().getName());
+ assertSame(father2, father2.getBankAccountOwner());
+ assertSame(father2.getPartner(), son2.getMother());
+ assertSame(father2, son2.getMother().getPartner());
+
+ Map<HumanGen2, String> children2 = father2.getChildren();
+ assertEquals(2, children2.size());
+ assertSame(father2.getPartner().getChildren(), children2);
+
+ }
+
+ public void testChildren3() throws IOException, IntrospectionException {
+ HumanGen3 father = new HumanGen3();
+ father.setName("Father");
+ father.setBirthday(new Date(1000000000));
+ father.setBirthPlace("Leningrad");
+ father.setBankAccountOwner(father);
+ //
+ HumanGen3 mother = new HumanGen3();
+ mother.setName("Mother");
+ mother.setBirthday(new Date(100000000000L));
+ mother.setBirthPlace("Saint-Petersburg");
+ father.setPartner(mother);
+ mother.setPartner(father);
+ mother.setBankAccountOwner(father);
+ //
+ HumanGen3 son = new HumanGen3();
+ son.setName("Son");
+ son.setBirthday(new Date(310000000000L));
+ son.setBirthPlace("Munich");
+ son.setBankAccountOwner(father);
+ son.setFather(father);
+ son.setMother(mother);
+ //
+ HumanGen3 daughter = new HumanGen3();
+ daughter.setName("Daughter");
+ daughter.setBirthday(new Date(420000000000L));
+ daughter.setBirthPlace("New York");
+ daughter.setBankAccountOwner(father);
+ daughter.setFather(father);
+ daughter.setMother(mother);
+ //
+ ArrayList<HumanGen3> children = new ArrayList<HumanGen3>();
+ children.add(son);
+ children.add(daughter);
+ father.setChildren(children);
+ mother.setChildren(children);
+ //
+
+ Constructor constructor = new Constructor();
+ TypeDescription Human3Description = new TypeDescription(HumanGen3.class);
+ Human3Description.putListPropertyType("children", HumanGen3.class);
+ constructor.addTypeDescription(Human3Description);
+
+ Yaml yaml = new Yaml(constructor);
+ String output = yaml.dump(son);
+ // System.out.println(output);
+ String etalon = Util.getLocalResource("recursive/generics/with-children-3.yaml");
+ assertEquals(etalon, output);
+ //
+ HumanGen3 son2 = yaml.load(output);
+ assertNotNull(son2);
+ assertEquals("Son", son.getName());
+
+ HumanGen3 father2 = son2.getFather();
+ assertEquals("Father", father2.getName());
+ assertEquals("Mother", son2.getMother().getName());
+ assertSame(father2, father2.getBankAccountOwner());
+ assertSame(father2.getPartner(), son2.getMother());
+ assertSame(father2, son2.getMother().getPartner());
+
+ List<HumanGen3> children2 = father2.getChildren();
+ assertEquals(2, children2.size());
+ assertSame(father2.getPartner().getChildren(), children2);
+
+ for (Object child : children2) {
+ assertSame(HumanGen3.class, child.getClass()); // check if type
+ // descriptor was
+ // correct
}
-
- /*
- * Loads same structure as created in testChildren. But root object is list
- * of children
- */
- @SuppressWarnings("unchecked")
- public void testChildrenListRoot() throws IOException, IntrospectionException {
- if (!GenericsBugDetector.isProperIntrospection()) {
- return;
- }
- HumanGen3 father = new HumanGen3();
- father.setName("Father");
- father.setBirthday(new Date(1000000000));
- father.setBirthPlace("Leningrad");
- father.setBankAccountOwner(father);
- //
- HumanGen3 mother = new HumanGen3();
- mother.setName("Mother");
- mother.setBirthday(new Date(100000000000L));
- mother.setBirthPlace("Saint-Petersburg");
- father.setPartner(mother);
- mother.setPartner(father);
- mother.setBankAccountOwner(father);
- //
- HumanGen3 son = new HumanGen3();
- son.setName("Son");
- son.setBirthday(new Date(310000000000L));
- son.setBirthPlace("Munich");
- son.setBankAccountOwner(father);
- son.setFather(father);
- son.setMother(mother);
- //
- HumanGen3 daughter = new HumanGen3();
- daughter.setName("Daughter");
- daughter.setBirthday(new Date(420000000000L));
- daughter.setBirthPlace("New York");
- daughter.setBankAccountOwner(father);
- daughter.setFather(father);
- daughter.setMother(mother);
- //
- ArrayList<HumanGen3> children = new ArrayList<HumanGen3>();
- children.add(son);
- children.add(daughter);
- father.setChildren(children);
- mother.setChildren(children);
- //
-
- Constructor constructor = new Constructor();
- TypeDescription Human3Description = new TypeDescription(HumanGen3.class);
- Human3Description.putListPropertyType("children", HumanGen3.class);
- constructor.addTypeDescription(Human3Description);
-
- Yaml yaml = new Yaml(constructor);
- String output = yaml.dump(father.getChildren());
- // System.out.println(output);
- String etalon = Util.getLocalResource("recursive/generics/with-children-as-list.yaml");
- assertEquals(etalon, output);
- //
- List<HumanGen3> children2 = (List<HumanGen3>) yaml.load(output);
- assertNotNull(children2);
- HumanGen3 son2 = children2.iterator().next();
- assertEquals(2, children2.size());
-
- HumanGen3 father2 = son2.getFather();
- assertEquals("Father", father2.getName());
- assertEquals("Mother", son2.getMother().getName());
- assertSame(father2, father2.getBankAccountOwner());
- assertSame(father2.getPartner(), son2.getMother());
- assertSame(father2, son2.getMother().getPartner());
-
- assertSame(father2.getPartner().getChildren(), children2);
-
- for (Object child : children2) {
- assertSame(HumanGen3.class, child.getClass()); // check if type
- // descriptor was
- // correct
- }
+ }
+
+ /*
+ * Loads same structure as created in testChildren. But root object is set of children
+ */
+ @SuppressWarnings("unchecked")
+ public void testChildrenSetAsRoot() throws IOException, IntrospectionException {
+ String etalon = Util.getLocalResource("recursive/generics/with-children-as-set.yaml");
+
+ Constructor constructor = new Constructor();
+ TypeDescription humanDescription = new TypeDescription(HumanGen.class);
+ humanDescription.putMapPropertyType("children", HumanGen.class, Object.class);
+ constructor.addTypeDescription(humanDescription);
+
+ Yaml yaml = new Yaml(constructor);
+ Set<HumanGen> children2 = yaml.load(etalon);
+ assertNotNull(children2);
+ assertEquals(2, children2.size());
+
+ HumanGen firstChild = children2.iterator().next();
+
+ HumanGen father2 = firstChild.getFather();
+ assertEquals("Father", father2.getName());
+ assertEquals("Mother", firstChild.getMother().getName());
+ assertSame(father2, father2.getBankAccountOwner());
+ assertSame(father2.getPartner(), firstChild.getMother());
+ assertSame(father2, firstChild.getMother().getPartner());
+
+ assertSame(father2.getPartner().getChildren(), children2);
+
+ for (Object child : children2) {
+ assertSame(HumanGen.class, child.getClass()); // check if type
+ // descriptor was correct
}
-
- public void testBeanRing() throws IOException, IntrospectionException {
- if (!GenericsBugDetector.isProperIntrospection()) {
- return;
- }
- HumanGen man1 = new HumanGen();
- man1.setName("Man 1");
- HumanGen man2 = new HumanGen();
- man2.setName("Man 2");
- HumanGen man3 = new HumanGen();
- man3.setName("Man 3");
- man1.setBankAccountOwner(man2);
- man2.setBankAccountOwner(man3);
- man3.setBankAccountOwner(man1);
- //
- Yaml yaml = new Yaml();
- String output = yaml.dump(man1);
- // System.out.println(output);
- String etalon = Util.getLocalResource("recursive/generics/beanring-3.yaml");
- assertEquals(etalon, output);
- //
- HumanGen loadedMan1 = (HumanGen) yaml.load(output);
- assertNotNull(loadedMan1);
- assertEquals("Man 1", loadedMan1.getName());
- HumanGen loadedMan2 = loadedMan1.getBankAccountOwner();
- HumanGen loadedMan3 = loadedMan2.getBankAccountOwner();
- assertSame(loadedMan1, loadedMan3.getBankAccountOwner());
+ }
+
+ /*
+ * Loads same structure as created in testChildren. But root object is map of children
+ */
+ @SuppressWarnings("unchecked")
+ public void testChildrenMapAsRoot() throws IOException, IntrospectionException {
+ String etalon = Util.getLocalResource("recursive/generics/with-children-as-map.yaml");
+
+ Constructor constructor = new Constructor();
+ TypeDescription Human2Description = new TypeDescription(HumanGen2.class);
+ Human2Description.putMapPropertyType("children", HumanGen2.class, String.class);
+ constructor.addTypeDescription(Human2Description);
+
+ Yaml yaml = new Yaml(constructor);
+ Map<HumanGen2, String> children2 = yaml.load(etalon);
+ assertNotNull(children2);
+ assertEquals(2, children2.size());
+
+ Entry<HumanGen2, String> firstEntry = children2.entrySet().iterator().next();
+ HumanGen2 firstChild = firstEntry.getKey();
+
+ HumanGen2 father2 = firstChild.getFather();
+ assertEquals("Father", father2.getName());
+ assertEquals("Mother", firstChild.getMother().getName());
+ assertSame(father2, father2.getBankAccountOwner());
+ assertSame(father2.getPartner(), firstChild.getMother());
+ assertSame(father2, firstChild.getMother().getPartner());
+
+ assertSame(father2.getPartner().getChildren(), children2);
+ }
+
+ /*
+ * Loads same structure as created in testChildren. But root object is list of children
+ */
+ @SuppressWarnings("unchecked")
+ public void testChildrenListRoot() throws IOException, IntrospectionException {
+ HumanGen3 father = new HumanGen3();
+ father.setName("Father");
+ father.setBirthday(new Date(1000000000));
+ father.setBirthPlace("Leningrad");
+ father.setBankAccountOwner(father);
+ //
+ HumanGen3 mother = new HumanGen3();
+ mother.setName("Mother");
+ mother.setBirthday(new Date(100000000000L));
+ mother.setBirthPlace("Saint-Petersburg");
+ father.setPartner(mother);
+ mother.setPartner(father);
+ mother.setBankAccountOwner(father);
+ //
+ HumanGen3 son = new HumanGen3();
+ son.setName("Son");
+ son.setBirthday(new Date(310000000000L));
+ son.setBirthPlace("Munich");
+ son.setBankAccountOwner(father);
+ son.setFather(father);
+ son.setMother(mother);
+ //
+ HumanGen3 daughter = new HumanGen3();
+ daughter.setName("Daughter");
+ daughter.setBirthday(new Date(420000000000L));
+ daughter.setBirthPlace("New York");
+ daughter.setBankAccountOwner(father);
+ daughter.setFather(father);
+ daughter.setMother(mother);
+ //
+ ArrayList<HumanGen3> children = new ArrayList<HumanGen3>();
+ children.add(son);
+ children.add(daughter);
+ father.setChildren(children);
+ mother.setChildren(children);
+ //
+
+ Constructor constructor = new Constructor();
+ TypeDescription Human3Description = new TypeDescription(HumanGen3.class);
+ Human3Description.putListPropertyType("children", HumanGen3.class);
+ constructor.addTypeDescription(Human3Description);
+
+ Yaml yaml = new Yaml(constructor);
+ String output = yaml.dump(father.getChildren());
+ // System.out.println(output);
+ String etalon = Util.getLocalResource("recursive/generics/with-children-as-list.yaml");
+ assertEquals(etalon, output);
+ //
+ List<HumanGen3> children2 = yaml.load(output);
+ assertNotNull(children2);
+ HumanGen3 son2 = children2.iterator().next();
+ assertEquals(2, children2.size());
+
+ HumanGen3 father2 = son2.getFather();
+ assertEquals("Father", father2.getName());
+ assertEquals("Mother", son2.getMother().getName());
+ assertSame(father2, father2.getBankAccountOwner());
+ assertSame(father2.getPartner(), son2.getMother());
+ assertSame(father2, son2.getMother().getPartner());
+
+ assertSame(father2.getPartner().getChildren(), children2);
+
+ for (Object child : children2) {
+ assertSame(HumanGen3.class, child.getClass()); // check if type
+ // descriptor was
+ // correct
}
+ }
+
+ public void testBeanRing() throws IOException, IntrospectionException {
+ HumanGen man1 = new HumanGen();
+ man1.setName("Man 1");
+ HumanGen man2 = new HumanGen();
+ man2.setName("Man 2");
+ HumanGen man3 = new HumanGen();
+ man3.setName("Man 3");
+ man1.setBankAccountOwner(man2);
+ man2.setBankAccountOwner(man3);
+ man3.setBankAccountOwner(man1);
+ //
+ Yaml yaml = new Yaml();
+ String output = yaml.dump(man1);
+ // System.out.println(output);
+ String etalon = Util.getLocalResource("recursive/generics/beanring-3.yaml");
+ assertEquals(etalon, output);
+ //
+ HumanGen loadedMan1 = yaml.load(output);
+ assertNotNull(loadedMan1);
+ assertEquals("Man 1", loadedMan1.getName());
+ HumanGen loadedMan2 = loadedMan1.getBankAccountOwner();
+ HumanGen loadedMan3 = loadedMan2.getBankAccountOwner();
+ assertSame(loadedMan1, loadedMan3.getBankAccountOwner());
+ }
}