View Javadoc

1   /**
2    * Copyright (c) 2008-2012, http://www.snakeyaml.org
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.yaml.snakeyaml.constructor;
17  
18  import java.util.Iterator;
19  import java.util.LinkedHashMap;
20  import java.util.Map;
21  import java.util.TimeZone;
22  
23  import junit.framework.TestCase;
24  
25  import org.yaml.snakeyaml.Yaml;
26  
27  public class ConstructorTest extends TestCase {
28  
29      @SuppressWarnings("unchecked")
30      public void testMapOrder() {
31          String data = "one: zzz\ntwo: ccc\nthree: bbb\nfour: aaa";
32          Object map = construct(data);
33          assertNotNull(map);
34          assertTrue(map.getClass().toString(), map instanceof LinkedHashMap);
35          Map<String, String> m = (Map<String, String>) map;
36          assertEquals(4, m.keySet().size());
37          Iterator<String> iter = m.keySet().iterator();
38          assertEquals("one", iter.next());
39          assertEquals("two", iter.next());
40          assertEquals("three", iter.next());
41          assertEquals("four", iter.next());
42      }
43  
44      /**
45       * create JavaBean
46       */
47      public void testGetBeanAssumeClass() {
48          String data = "--- !!org.yaml.snakeyaml.constructor.Person\nfirstName: Andrey\nage: 99";
49          Object obj = construct(data);
50          assertNotNull(obj);
51          assertTrue("Unexpected: " + obj.getClass().toString(), obj instanceof Person);
52          Person person = (Person) obj;
53          assertEquals("Andrey", person.getFirstName());
54          assertNull(person.getLastName());
55          assertEquals(99, person.getAge().intValue());
56      }
57  
58      /**
59       * create instance using constructor arguments
60       */
61      public void testGetConstructorBean() {
62          String data = "--- !!org.yaml.snakeyaml.constructor.Person [ Andrey, Somov, 99 ]";
63          Object obj = construct(data);
64          assertNotNull(obj);
65          assertTrue(obj.getClass().toString(), obj instanceof Person);
66          Person person = (Person) obj;
67          assertEquals("Andrey", person.getFirstName());
68          assertEquals("Somov", person.getLastName());
69          assertEquals(99, person.getAge().intValue());
70      }
71  
72      /**
73       * create instance using scalar argument
74       */
75      public void testGetConstructorFromScalar() {
76          String data = "--- !!org.yaml.snakeyaml.constructor.Person 'Somov'";
77          Object obj = construct(data);
78          assertNotNull(obj);
79          assertTrue(obj.getClass().toString(), obj instanceof Person);
80          Person person = (Person) obj;
81          assertNull("Andrey", person.getFirstName());
82          assertEquals("Somov", person.getLastName());
83          assertNull(person.getAge());
84      }
85  
86      public void testJavaBeanLoad() {
87          java.util.Calendar cal = java.util.Calendar.getInstance(TimeZone.getTimeZone("UTC"));
88          cal.clear();
89          cal.set(1982, 5 - 1, 3); // Java's months are zero-based...
90  
91          TestBean expected = new TestBean("Ola Bini", 24, cal.getTime());
92          assertEquals(
93                  expected,
94                  construct("--- !!org.yaml.snakeyaml.constructor.TestBean\nname: Ola Bini\nage: 24\nborn: 1982-05-03\n"));
95      }
96  
97      public void testWrongName() {
98          try {
99              construct("--- !!org.yaml.snakeyaml.constructor.TestBean\nwrongName: No one\nage: 24\nborn: 1982-05-03\n");
100             fail("IntrospectionException expected.");
101         } catch (Exception e) {
102             assertEquals(
103                     "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;  in 'string', line 1, column 5:\n    --- !!org.yaml.snakeyaml.constructor ... \n        ^",
104                     e.getMessage());
105         }
106     }
107 
108     private Object construct(String data) {
109         Yaml yaml = new Yaml();
110         return yaml.load(data);
111     }
112 }