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.issues.issue61;
17  
18  import java.util.HashMap;
19  import java.util.Map;
20  
21  import junit.framework.TestCase;
22  
23  import org.yaml.snakeyaml.Util;
24  import org.yaml.snakeyaml.Yaml;
25  
26  public class GenericMapBeanTest extends TestCase {
27      @SuppressWarnings("unchecked")
28      public void testGenericMap() {
29          Yaml yaml = new Yaml();
30          MapProvider<String, Integer> listProvider = new MapProvider<String, Integer>();
31          listProvider.getMap().put("foo", 17);
32          listProvider.getMap().put("bar", 19);
33          String s = yaml.dumpAsMap(listProvider);
34          // System.out.println(s);
35          assertEquals("map:\n  foo: 17\n  bar: 19\n", s);
36          // parse
37          Yaml loader = new Yaml();
38          MapProvider<String, Integer> listProvider2 = loader.loadAs(s, MapProvider.class);
39          assertEquals(new Integer(17), listProvider2.getMap().get("foo"));
40          assertEquals(new Integer(19), listProvider2.getMap().get("bar"));
41          assertEquals(listProvider, listProvider2);
42      }
43  
44      @SuppressWarnings("rawtypes")
45      public void testGenericBean() {
46          Yaml yaml = new Yaml();
47          MapProvider<String, Bean> listProvider = new MapProvider<String, Bean>();
48          Bean foo = new Bean();
49          foo.setName("foo");
50          listProvider.getMap().put("foo", foo);
51          Bean bar = new Bean();
52          bar.setName("bar");
53          bar.setNumber(3);
54          listProvider.getMap().put("bar", bar);
55          String s = yaml.dumpAsMap(listProvider);
56          // System.out.println(s);
57          String etalon = Util.getLocalResource("issues/issue61-2.yaml");
58          assertEquals(etalon, s);
59          // parse
60          Yaml loader = new Yaml();
61          MapProvider listProvider2 = loader.loadAs(s, MapProvider.class);
62          Bean foo2 = (Bean) listProvider2.getMap().get("foo");
63          assertEquals("foo", foo2.getName());
64          assertEquals(0, foo2.getNumber());
65          Bean bar2 = (Bean) listProvider2.getMap().get("bar");
66          assertEquals("bar", bar2.getName());
67          assertEquals(3, bar2.getNumber());
68      }
69  
70      public static class MapProvider<K, V> {
71          private Map<K, V> map = new HashMap<K, V>();
72  
73          public Map<K, V> getMap() {
74              return map;
75          }
76  
77          public void setMap(Map<K, V> map) {
78              this.map = map;
79          }
80  
81          @SuppressWarnings("rawtypes")
82          @Override
83          public boolean equals(Object obj) {
84              if (obj instanceof MapProvider) {
85                  return map.equals(((MapProvider) obj).getMap());
86              } else {
87                  return false;
88              }
89          }
90  
91          @Override
92          public int hashCode() {
93              return map.hashCode();
94          }
95      }
96  
97      public static class Bean {
98          private String name;
99          private int number;
100 
101         public String getName() {
102             return name;
103         }
104 
105         public void setName(String name) {
106             this.name = name;
107         }
108 
109         public int getNumber() {
110             return number;
111         }
112 
113         public void setNumber(int number) {
114             this.number = number;
115         }
116     }
117 }