1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.pyyaml;
18
19 import java.util.ArrayList;
20 import java.util.HashMap;
21 import java.util.HashSet;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Set;
25 import java.util.TreeMap;
26
27 import junit.framework.TestCase;
28
29 import org.yaml.snakeyaml.Yaml;
30 import org.yaml.snakeyaml.constructor.SafeConstructor;
31
32 public class PyRecursiveTest extends TestCase {
33
34 @SuppressWarnings("unchecked")
35 public void testDict() {
36 Map<AnInstance, AnInstance> value = new HashMap<AnInstance, AnInstance>();
37 AnInstance instance = new AnInstance(value, value);
38 value.put(instance, instance);
39 Yaml yaml = new Yaml();
40 String output1 = yaml.dump(value);
41 assertTrue(output1.contains("!!org.pyyaml.AnInstance"));
42 assertTrue(output1.contains("&id001"));
43 assertTrue(output1.contains("&id002"));
44 assertTrue(output1.contains("*id001"));
45 assertTrue(output1.contains("*id002"));
46 assertTrue(output1.contains("foo"));
47 assertTrue(output1.contains("bar"));
48 Map<AnInstance, AnInstance> value2 = (Map<AnInstance, AnInstance>) yaml.load(output1);
49 assertEquals(value.size(), value2.size());
50 for (AnInstance tmpInstance : value2.values()) {
51 assertSame(tmpInstance.getBar(), tmpInstance.getFoo());
52 assertSame(tmpInstance.getBar(), value2);
53 assertSame(tmpInstance, value2.get(tmpInstance));
54 }
55 }
56
57 @SuppressWarnings({ "unchecked", "rawtypes" })
58 public void testDictSafeConstructor() {
59 Map value = new TreeMap();
60 value.put("abc", "www");
61 value.put("qwerty", value);
62 Yaml yaml = new Yaml(new SafeConstructor());
63 String output1 = yaml.dump(value);
64 assertEquals("&id001\nabc: www\nqwerty: *id001\n", output1);
65 Map value2 = (Map) yaml.load(output1);
66 assertEquals(2, value2.size());
67 assertEquals("www", value2.get("abc"));
68 assertTrue(value2.get("qwerty") instanceof Map);
69 Map value3 = (Map) value2.get("qwerty");
70 assertTrue(value3.get("qwerty") instanceof Map);
71 }
72
73 @SuppressWarnings({ "unchecked", "rawtypes" })
74 public void testList() {
75 List value = new ArrayList();
76 value.add(value);
77 value.add("test");
78 value.add(new Integer(1));
79
80 Yaml yaml = new Yaml();
81 String output1 = yaml.dump(value);
82 assertEquals("&id001\n- *id001\n- test\n- 1\n", output1);
83 List value2 = (List) yaml.load(output1);
84 assertEquals(3, value2.size());
85 assertEquals(value.size(), value2.size());
86 assertSame(value2, value2.get(0));
87
88
89
90 value.remove(0);
91 value2.remove(0);
92 assertEquals(value, value2);
93 }
94
95 @SuppressWarnings({ "unchecked", "rawtypes" })
96 public void testListSafeConstructor() {
97 List value = new ArrayList();
98 value.add(value);
99 value.add("test");
100 value.add(new Integer(1));
101
102 Yaml yaml = new Yaml(new SafeConstructor());
103 String output1 = yaml.dump(value);
104 assertEquals("&id001\n- *id001\n- test\n- 1\n", output1);
105 List value2 = (List) yaml.load(output1);
106 assertEquals(3, value2.size());
107 assertEquals(value.size(), value2.size());
108 assertSame(value2, value2.get(0));
109
110
111
112 value.remove(0);
113 value2.remove(0);
114 assertEquals(value, value2);
115 }
116
117 @SuppressWarnings({ "unchecked", "rawtypes" })
118 public void testSet() {
119 Set value = new HashSet();
120 value.add(new AnInstance(value, value));
121 Yaml yaml = new Yaml();
122 String output1 = yaml.dump(value);
123 Set<AnInstance> value2 = (Set<AnInstance>) yaml.load(output1);
124
125 assertEquals(value.size(), value2.size());
126 for (AnInstance tmpInstance : value2) {
127 assertSame(tmpInstance.getBar(), tmpInstance.getFoo());
128 assertSame(tmpInstance.getBar(), value2);
129 }
130 }
131
132 public void testSet2() {
133 Set<Object> set = new HashSet<Object>(3);
134 set.add("aaa");
135 set.add(111);
136 set.add(set);
137 Yaml yaml = new Yaml();
138 try {
139 yaml.dump(set);
140 fail("Java does not allow a recursive set to be a key for a map.");
141 } catch (StackOverflowError e) {
142
143 }
144 }
145 }