blob: 607a3e9cac610f3e735ae8c0b3d7fcdf3163fe3a [file] [log] [blame]
/**
* Copyright (c) 2008-2011, http://www.snakeyaml.org
*
* 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.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TimeZone;
import junit.framework.TestCase;
import org.yaml.snakeyaml.Yaml;
public class ConstructorTest extends TestCase {
@SuppressWarnings("unchecked")
public void testMapOrder() {
String data = "one: zzz\ntwo: ccc\nthree: bbb\nfour: aaa";
Object map = construct(data);
assertNotNull(map);
assertTrue(map.getClass().toString(), map instanceof LinkedHashMap);
Map<String, String> m = (Map<String, String>) map;
assertEquals(4, m.keySet().size());
Iterator<String> iter = m.keySet().iterator();
assertEquals("one", iter.next());
assertEquals("two", iter.next());
assertEquals("three", iter.next());
assertEquals("four", iter.next());
}
/**
* create JavaBean
*/
public void testGetBeanAssumeClass() {
String data = "--- !!org.yaml.snakeyaml.constructor.Person\nfirstName: Andrey\nage: 99";
Object obj = construct(data);
assertNotNull(obj);
assertTrue("Unexpected: " + obj.getClass().toString(), obj instanceof Person);
Person person = (Person) obj;
assertEquals("Andrey", person.getFirstName());
assertNull(person.getLastName());
assertEquals(99, person.getAge().intValue());
}
/**
* create instance using constructor arguments
*/
public void testGetConstructorBean() {
String data = "--- !!org.yaml.snakeyaml.constructor.Person [ Andrey, Somov, 99 ]";
Object obj = construct(data);
assertNotNull(obj);
assertTrue(obj.getClass().toString(), obj instanceof Person);
Person person = (Person) obj;
assertEquals("Andrey", person.getFirstName());
assertEquals("Somov", person.getLastName());
assertEquals(99, person.getAge().intValue());
}
/**
* create instance using scalar argument
*/
public void testGetConstructorFromScalar() {
String data = "--- !!org.yaml.snakeyaml.constructor.Person 'Somov'";
Object obj = construct(data);
assertNotNull(obj);
assertTrue(obj.getClass().toString(), obj instanceof Person);
Person person = (Person) obj;
assertNull("Andrey", person.getFirstName());
assertEquals("Somov", person.getLastName());
assertNull(person.getAge());
}
public void testJavaBeanLoad() {
java.util.Calendar cal = java.util.Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.clear();
cal.set(1982, 5 - 1, 3); // Java's months are zero-based...
TestBean expected = new TestBean("Ola Bini", 24, cal.getTime());
assertEquals(
expected,
construct("--- !!org.yaml.snakeyaml.constructor.TestBean\nname: Ola Bini\nage: 24\nborn: 1982-05-03\n"));
}
public void testWrongName() {
try {
construct("--- !!org.yaml.snakeyaml.constructor.TestBean\nwrongName: No one\nage: 24\nborn: 1982-05-03\n");
fail("IntrospectionException expected.");
} catch (Exception e) {
assertEquals(
"null; Can't construct a java object for tag:yaml.org,2002:org.yaml.snakeyaml.constructor.TestBean; exception=Cannot create property=wrongName for JavaBean=#<org.jvyaml.TestBean name=\"null\" age=0 born=\"null\">; Unable to find property 'wrongName' on class: org.yaml.snakeyaml.constructor.TestBean",
e.getMessage());
}
}
private Object construct(String data) {
Yaml yaml = new Yaml();
return yaml.load(data);
}
}