1 /**
2  * Copyright (c) 2008, 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.generics;
17 
18 import static org.junit.Assert.assertArrayEquals;
19 
20 import java.util.HashMap;
21 import java.util.Map;
22 
23 import junit.framework.TestCase;
24 
25 import org.yaml.snakeyaml.Yaml;
26 
27 public class ObjectValuesTest extends TestCase {
28 
testObjectValues()29     public void testObjectValues() {
30         ObjectValues ov = new ObjectValues();
31         Integer obj = new Integer(131313);
32         ov.setObject(obj);
33         final Map<String, Map<Integer, Object>> prop2values = new HashMap<String, Map<Integer, Object>>();
34 
35         final String[] props = { "prop1", "prop2", "prop3" };
36         for (String name : props) {
37             Map<Integer, Object> values = new HashMap<Integer, Object>();
38             prop2values.put(name, values);
39             for (int i = 0; i < 3; i++) {
40                 values.put(i, name + i);
41             }
42         }
43 
44         ov.setValues(prop2values);
45         ov.setPossible(props);
46 
47         Yaml dumper = new Yaml();
48         String dumpedStr = dumper.dumpAsMap(ov);
49         Yaml loader = new Yaml();
50         ObjectValues ov2 = loader.loadAs(dumpedStr, ObjectValues.class);
51 
52         assertEquals(ov.getObject(), ov2.getObject());
53         assertEquals(ov.getValues(), ov2.getValues());
54         assertArrayEquals(ov.getPossible(), ov2.getPossible());
55         ov.getPossible()[0] = ov2.getPossible()[0];
56     }
57 
58     @SuppressWarnings("unchecked")
testObjectValuesWithParam()59     public void testObjectValuesWithParam() {
60         ObjectValuesWithParam<String, Integer> ov = new ObjectValuesWithParam<String, Integer>();
61         Integer obj = new Integer(131313);
62         ov.setObject(obj);
63         final Map<String, Map<Integer, Object>> prop2values = new HashMap<String, Map<Integer, Object>>();
64 
65         final String[] props = { "prop1", "prop2", "prop3" };
66         for (String name : props) {
67             Map<Integer, Object> values = new HashMap<Integer, Object>();
68             prop2values.put(name, values);
69             for (int i = 0; i < 3; i++) {
70                 values.put(i, name + i);
71             }
72         }
73 
74         ov.setValues(prop2values);
75         ov.setPossible(props);
76 
77         Yaml dumper = new Yaml();
78         String dumpedStr = dumper.dumpAsMap(ov);
79         Yaml loader = new Yaml();
80         ObjectValuesWithParam<String, Integer> ov2 = loader.loadAs(dumpedStr,
81                 new ObjectValuesWithParam<String, Integer>().getClass());
82 
83         assertEquals(ov.getObject(), ov2.getObject());
84         assertEquals(ov.getValues(), ov2.getValues());
85         assertArrayEquals(ov.getPossible(), ov2.getPossible());
86         // TODO: This actually FAILS. Use of GenericArrays is ..... no words.
87         // assertEquals(ov.getPossible()[0], ov2.getPossible()[0]);
88         try {
89             ov2.getPossible()[0].toString();
90         } catch (Exception e) {
91             assertTrue(e.getMessage(), e.getMessage().startsWith("[Ljava.lang.Object"));
92         }
93     }
94 }
95