TypeSafeMapTest.java revision 37c1b0be3cfcd6fd38fdbae858a02c49e438d85b
1/** 2 * Copyright (c) 2008-2011, 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 17package examples.collections; 18 19import java.util.LinkedHashMap; 20import java.util.Map; 21 22import junit.framework.TestCase; 23 24import org.yaml.snakeyaml.JavaBeanDumper; 25import org.yaml.snakeyaml.JavaBeanLoader; 26import org.yaml.snakeyaml.Util; 27 28/** 29 * Test MapBean->Map<String, Developer> developers <br/> 30 * Developer class must be properly recognised 31 */ 32public class TypeSafeMapTest extends TestCase { 33 public void testDumpMap() { 34 MapBean bean = new MapBean(); 35 Map<String, Integer> data = new LinkedHashMap<String, Integer>(); 36 data.put("aaa", 1); 37 data.put("bbb", 2); 38 data.put("zzz", 3); 39 bean.setData(data); 40 Map<String, Developer2> developers = new LinkedHashMap<String, Developer2>(); 41 developers.put("team1", new Developer2("Fred", "creator")); 42 developers.put("team2", new Developer2("John", "committer")); 43 bean.setDevelopers(developers); 44 JavaBeanDumper dumper = new JavaBeanDumper(false); 45 String output = dumper.dump(bean); 46 // System.out.println(output); 47 String etalon = Util.getLocalResource("examples/map-bean-10.yaml"); 48 assertEquals(etalon, output); 49 } 50 51 public void testDumpMap2() { 52 MapBean bean = new MapBean(); 53 Map<String, Integer> data = new LinkedHashMap<String, Integer>(); 54 data.put("aaa", 1); 55 data.put("bbb", 2); 56 bean.setData(data); 57 Map<String, Developer2> developers = new LinkedHashMap<String, Developer2>(); 58 developers.put("team1", new Developer2("Fred", "creator")); 59 developers.put("team2", new Developer2("John", "committer")); 60 developers.put("team3", new Developer222("Bill", "head")); 61 bean.setDevelopers(developers); 62 JavaBeanDumper dumper = new JavaBeanDumper(false); 63 String output = dumper.dump(bean); 64 // System.out.println(output); 65 String etalon = Util.getLocalResource("examples/map-bean-11.yaml"); 66 assertEquals(etalon, output); 67 } 68 69 public void testLoadMap() { 70 String output = Util.getLocalResource("examples/map-bean-10.yaml"); 71 // System.out.println(output); 72 JavaBeanLoader<MapBean> beanLoader = new JavaBeanLoader<MapBean>(MapBean.class); 73 MapBean parsed = beanLoader.load(output); 74 assertNotNull(parsed); 75 Map<String, Integer> data = parsed.getData(); 76 assertEquals(3, data.size()); 77 assertEquals(new Integer(1), data.get("aaa")); 78 assertEquals(new Integer(2), data.get("bbb")); 79 assertEquals(new Integer(3), data.get("zzz")); 80 Map<String, Developer2> developers = parsed.getDevelopers(); 81 assertEquals(2, developers.size()); 82 assertEquals("Developer must be recognised.", Developer2.class, developers.get("team1") 83 .getClass()); 84 Developer2 fred = developers.get("team1"); 85 assertEquals("Fred", fred.getName()); 86 assertEquals("creator", fred.getRole()); 87 } 88 89 public static class MapBean { 90 private Map<String, Integer> data; 91 private String name; 92 private Map<String, Developer2> developers; 93 94 public MapBean() { 95 name = "Bean123"; 96 } 97 98 public Map<String, Integer> getData() { 99 return data; 100 } 101 102 public void setData(Map<String, Integer> data) { 103 this.data = data; 104 } 105 106 public String getName() { 107 return name; 108 } 109 110 public void setName(String name) { 111 this.name = name; 112 } 113 114 public Map<String, Developer2> getDevelopers() { 115 return developers; 116 } 117 118 public void setDevelopers(Map<String, Developer2> developers) { 119 this.developers = developers; 120 } 121 } 122 123 public static class Developer2 { 124 private String name; 125 private String role; 126 127 public Developer2() { 128 } 129 130 public Developer2(String name, String role) { 131 this.name = name; 132 this.role = role; 133 } 134 135 public String getName() { 136 return name; 137 } 138 139 public void setName(String name) { 140 this.name = name; 141 } 142 143 public String getRole() { 144 return role; 145 } 146 147 public void setRole(String role) { 148 this.role = role; 149 } 150 } 151 152 public static class Developer222 extends Developer2 { 153 public Developer222() { 154 super(); 155 } 156 157 public Developer222(String name, String role) { 158 super(name, role); 159 } 160 } 161 162 /* 163 * No generic collection 164 */ 165 @SuppressWarnings({ "unchecked", "rawtypes" }) 166 public void testLoadMapWithObject() { 167 String output = Util.getLocalResource("examples/map-bean-10.yaml"); 168 // System.out.println(output); 169 JavaBeanLoader<MapBeanNoGenerics> beanLoader = new JavaBeanLoader<MapBeanNoGenerics>( 170 MapBeanNoGenerics.class); 171 MapBeanNoGenerics parsed = beanLoader.load(output); 172 assertNotNull(parsed); 173 Map<String, Integer> data = parsed.getData(); 174 assertEquals(3, data.size()); 175 assertEquals(new Integer(1), data.get("aaa")); 176 assertEquals(new Integer(2), data.get("bbb")); 177 assertEquals(new Integer(3), data.get("zzz")); 178 Map developers = parsed.getDevelopers(); 179 assertNotNull(developers); 180 assertEquals(2, developers.size()); 181 Object o1 = developers.get("team1"); 182 // because of erasure we get simply Map 183 Map<String, String> developer = (Map<String, String>) o1; 184 assertEquals("Fred", developer.get("name")); 185 assertEquals("creator", developer.get("role")); 186 } 187 188 @SuppressWarnings("rawtypes") 189 public static class MapBeanNoGenerics { 190 private Map data; 191 private String name; 192 private Map developers; 193 194 public MapBeanNoGenerics() { 195 name = "Bean123"; 196 } 197 198 public Map getData() { 199 return data; 200 } 201 202 public void setData(Map data) { 203 this.data = data; 204 } 205 206 public String getName() { 207 return name; 208 } 209 210 public void setName(String name) { 211 this.name = name; 212 } 213 214 public Map getDevelopers() { 215 return developers; 216 } 217 218 public void setDevelopers(Map developers) { 219 this.developers = developers; 220 } 221 } 222} 223