/** | |
* Copyright (c) 2008-2010 Andrey Somov | |
* | |
* 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.constructor; | |
import java.io.IOException; | |
import java.util.Date; | |
import java.util.List; | |
import java.util.Map; | |
import java.util.TreeMap; | |
import junit.framework.TestCase; | |
import org.yaml.snakeyaml.Dumper; | |
import org.yaml.snakeyaml.DumperOptions; | |
import org.yaml.snakeyaml.JavaBeanLoader; | |
import org.yaml.snakeyaml.Loader; | |
import org.yaml.snakeyaml.TypeDescription; | |
import org.yaml.snakeyaml.Util; | |
import org.yaml.snakeyaml.Yaml; | |
import org.yaml.snakeyaml.nodes.Tag; | |
import org.yaml.snakeyaml.representer.Representer; | |
public class TypeSafeCollectionsTest extends TestCase { | |
public void testTypeSafeList() throws IOException { | |
Constructor constructor = new Constructor(Car.class); | |
TypeDescription carDescription = new TypeDescription(Car.class); | |
carDescription.putListPropertyType("wheels", Wheel.class); | |
constructor.addTypeDescription(carDescription); | |
Loader loader = new Loader(constructor); | |
Yaml yaml = new Yaml(loader); | |
Car car = (Car) yaml.load(Util.getLocalResource("constructor/car-no-root-class.yaml")); | |
assertEquals("12-XP-F4", car.getPlate()); | |
List<Wheel> wheels = car.getWheels(); | |
assertNotNull(wheels); | |
assertEquals(5, wheels.size()); | |
for (Wheel wheel : wheels) { | |
assertTrue(wheel.getId() > 0); | |
} | |
} | |
public void testTypeSafeMap() throws IOException { | |
Constructor constructor = new Constructor(MyCar.class); | |
TypeDescription carDescription = new TypeDescription(MyCar.class); | |
carDescription.putMapPropertyType("wheels", MyWheel.class, Object.class); | |
constructor.addTypeDescription(carDescription); | |
Loader loader = new Loader(constructor); | |
Yaml yaml = new Yaml(loader); | |
MyCar car = (MyCar) yaml.load(Util | |
.getLocalResource("constructor/car-no-root-class-map.yaml")); | |
assertEquals("00-FF-Q2", car.getPlate()); | |
Map<MyWheel, Date> wheels = car.getWheels(); | |
assertNotNull(wheels); | |
assertEquals(5, wheels.size()); | |
for (MyWheel wheel : wheels.keySet()) { | |
assertTrue(wheel.getId() > 0); | |
Date date = wheels.get(wheel); | |
long time = date.getTime(); | |
assertTrue("It must be midnight.", time % 10000 == 0); | |
} | |
} | |
public void testWithGlobalTag() throws IOException { | |
Map<MyWheel, Date> wheels = new TreeMap<MyWheel, Date>(); | |
long time = 1248212168084L; | |
for (int i = 1; i < 6; i++) { | |
MyWheel mw = new MyWheel(); | |
mw.setId(i); | |
mw.setBrand(mw.getBrand() + String.valueOf(i)); | |
wheels.put(mw, new Date(time + i)); | |
} | |
MyCar c = new MyCar(); | |
c.setPlate("00-FF-Q2"); | |
c.setWheels(wheels); | |
Representer representer = new Representer(); | |
representer.addClassTag(MyWheel.class, Tag.MAP); | |
Dumper dumper = new Dumper(representer, new DumperOptions()); | |
Yaml yaml = new Yaml(dumper); | |
String output = yaml.dump(c); | |
assertEquals(Util.getLocalResource("javabeans/mycar-with-global-tag1.yaml"), output); | |
// load | |
JavaBeanLoader<MyCar> beanLoader = new JavaBeanLoader<MyCar>(MyCar.class); | |
MyCar car = beanLoader.load(output); | |
assertNotNull(car); | |
assertEquals("00-FF-Q2", car.getPlate()); | |
assertEquals(5, car.getWheels().size()); | |
for (Date d : car.getWheels().values()) { | |
// give a day for any timezone | |
assertTrue(d.before(new Date(time + 1000 * 60 * 60 * 24))); | |
assertTrue(d.after(new Date(time))); | |
} | |
Object wheel = car.getWheels().keySet().iterator().next(); | |
assertTrue(wheel instanceof MyWheel); | |
MyWheel w = (MyWheel) wheel; | |
assertEquals(1, w.getId()); | |
assertEquals("Pirelli1", w.getBrand()); | |
} | |
} |