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.javabeans;
17  
18  import junit.framework.TestCase;
19  
20  import org.yaml.snakeyaml.Yaml;
21  
22  public class TriangleBeanTest extends TestCase {
23  
24      public void testGetTriangle() {
25          Triangle triangle = new Triangle();
26          triangle.setName("Triangle25");
27          TriangleBean bean = new TriangleBean();
28          bean.setShape(triangle);
29          bean.setName("Bean25");
30          Yaml beanDumper = new Yaml();
31          String output = beanDumper.dumpAsMap(bean);
32          assertEquals(
33                  "name: Bean25\nshape: !!org.yaml.snakeyaml.javabeans.Triangle\n  name: Triangle25\n",
34                  output);
35          Yaml beanLoader = new Yaml();
36          TriangleBean loadedBean = beanLoader.loadAs(output, TriangleBean.class);
37          assertNotNull(loadedBean);
38          assertEquals("Bean25", loadedBean.getName());
39          assertEquals(7, loadedBean.getShape().process());
40      }
41  
42      public void testClassNotFound() {
43          String output = "name: Bean25\nshape: !!org.yaml.snakeyaml.javabeans.Triangle777\n  name: Triangle25\n";
44          Yaml beanLoader = new Yaml();
45          try {
46              beanLoader.loadAs(output, TriangleBean.class);
47              fail("Class not found expected.");
48          } catch (Exception e) {
49              assertEquals(
50                      "null; Can't construct a java object for tag:yaml.org,2002:org.yaml.snakeyaml.javabeans.TriangleBean; exception=Cannot create property=shape for JavaBean=TriangleBean name=Bean25; null; Can't construct a java object for tag:yaml.org,2002:org.yaml.snakeyaml.javabeans.Triangle777; exception=Class not found: org.yaml.snakeyaml.javabeans.Triangle777;  in 'string', line 2, column 8:\n    shape: !!org.yaml.snakeyaml.javabeans.T ... \n           ^;  in 'string', line 1, column 1:\n    name: Bean25\n    ^",
51                      e.getMessage());
52          }
53      }
54  
55      /**
56       * Runtime class has less priority then an explicit tag
57       */
58      public void testClassAndTag() {
59          String output = "name: !!whatever Bean25\nshape: !!org.yaml.snakeyaml.javabeans.Triangle\n  name: Triangle25\n";
60          Yaml beanLoader = new Yaml();
61          try {
62              beanLoader.loadAs(output, TriangleBean.class);
63              fail("Runtime class has less priority then an explicit tag");
64          } catch (Exception e) {
65              assertTrue(e
66                      .getMessage()
67                      .startsWith(
68                              "null; Can't construct a java object for tag:yaml.org,2002:org.yaml.snakeyaml.javabeans.TriangleBean; exception=Cannot create property=name for JavaBean=TriangleBean name=null; null; Can't construct a java object for tag:yaml.org,2002:whatever; exception=Class not found: whatever"));
69          }
70      }
71  }