blob: 98a7eaa06586a4866775ae71751c2c56e255ed69 [file] [log] [blame]
/**
* Copyright (c) 2008-2010, http://code.google.com/p/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
*
* 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.
*/
package org.yaml.snakeyaml.recursive;
import java.io.IOException;
import java.util.Date;
import junit.framework.TestCase;
import org.yaml.snakeyaml.SnakeYaml;
import org.yaml.snakeyaml.TypeDescription;
import org.yaml.snakeyaml.Util;
import org.yaml.snakeyaml.constructor.Constructor;
public class Human_WithArrayOfChildrenTest extends TestCase {
public static class Human_WithArrayOfChildren extends AbstractHuman {
private Human_WithArrayOfChildren father;
private Human_WithArrayOfChildren mother;
private Human_WithArrayOfChildren partner;
private Human_WithArrayOfChildren bankAccountOwner;
protected Human_WithArrayOfChildren[] children;
public Human_WithArrayOfChildren() {
children = new Human_WithArrayOfChildren[0];
}
public Human_WithArrayOfChildren getFather() {
return father;
}
public void setFather(Human_WithArrayOfChildren father) {
this.father = father;
}
public Human_WithArrayOfChildren getMother() {
return mother;
}
public void setMother(Human_WithArrayOfChildren mother) {
this.mother = mother;
}
public Human_WithArrayOfChildren getPartner() {
return partner;
}
public void setPartner(Human_WithArrayOfChildren partner) {
this.partner = partner;
}
public Human_WithArrayOfChildren getBankAccountOwner() {
return bankAccountOwner;
}
public void setBankAccountOwner(Human_WithArrayOfChildren bankAccountOwner) {
this.bankAccountOwner = bankAccountOwner;
}
public Human_WithArrayOfChildren[] getChildren() {
return children;
}
public void setChildren(Human_WithArrayOfChildren[] children) {
this.children = children;
}
}
public void testChildrenArray() throws IOException {
Human_WithArrayOfChildren father = new Human_WithArrayOfChildren();
father.setName("Father");
father.setBirthday(new Date(1000000000));
father.setBirthPlace("Leningrad");
father.setBankAccountOwner(father);
//
Human_WithArrayOfChildren mother = new Human_WithArrayOfChildren();
mother.setName("Mother");
mother.setBirthday(new Date(100000000000L));
mother.setBirthPlace("Saint-Petersburg");
father.setPartner(mother);
mother.setPartner(father);
mother.setBankAccountOwner(father);
//
Human_WithArrayOfChildren son = new Human_WithArrayOfChildren();
son.setName("Son");
son.setBirthday(new Date(310000000000L));
son.setBirthPlace("Munich");
son.setBankAccountOwner(father);
son.setFather(father);
son.setMother(mother);
//
Human_WithArrayOfChildren daughter = new Human_WithArrayOfChildren();
daughter.setName("Daughter");
daughter.setBirthday(new Date(420000000000L));
daughter.setBirthPlace("New York");
daughter.setBankAccountOwner(father);
daughter.setFather(father);
daughter.setMother(mother);
//
Human_WithArrayOfChildren[] children = new Human_WithArrayOfChildren[] { son, daughter };
father.setChildren(children);
mother.setChildren(children);
//
Constructor constructor = new Constructor(Human_WithArrayOfChildren.class);
TypeDescription HumanWithChildrenArrayDescription = new TypeDescription(
Human_WithArrayOfChildren.class);
HumanWithChildrenArrayDescription.putListPropertyType("children",
Human_WithArrayOfChildren.class);
constructor.addTypeDescription(HumanWithChildrenArrayDescription);
SnakeYaml yaml = new SnakeYaml(constructor);
String output = yaml.dump(son);
// System.out.println(output);
String etalon = Util.getLocalResource("recursive/with-childrenArray.yaml");
assertEquals(etalon, output);
//
Human_WithArrayOfChildren son2 = (Human_WithArrayOfChildren) yaml.load(output);
assertNotNull(son2);
assertEquals("Son", son.getName());
Human_WithArrayOfChildren 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());
Human_WithArrayOfChildren[] fathersChildren = father2.getChildren();
assertEquals(2, fathersChildren.length);
Human_WithArrayOfChildren[] mothersChildren = father2.getPartner().getChildren();
assertEquals(2, mothersChildren.length);
assertSame(mothersChildren, fathersChildren);
for (Object child : fathersChildren) {
// check if type descriptor was correct
assertSame(Human_WithArrayOfChildren.class, child.getClass());
}
}
}