1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.yaml.snakeyaml.issues.issue73;
17
18 import java.util.Set;
19 import java.util.SortedSet;
20 import java.util.TreeSet;
21
22 import junit.framework.TestCase;
23
24 import org.yaml.snakeyaml.Util;
25 import org.yaml.snakeyaml.Yaml;
26
27 public class RecursiveSortedSetTest extends TestCase {
28 public void testDumpException() {
29 SortedSet<Object> set = new TreeSet<Object>();
30 Bean11 bean = new Bean11();
31 bean.setId("ID555");
32 bean.setSet(set);
33 set.add("ggg");
34 set.add("hhh");
35 set.add(bean);
36 Yaml yaml = new Yaml();
37 String doc = yaml.dump(bean);
38
39 assertEquals(Util.getLocalResource("issues/issue73-recursive9.txt"), doc);
40 }
41
42 public void testLoadException() {
43 String doc = Util.getLocalResource("issues/issue73-recursive10.txt");
44
45 Yaml yaml = new Yaml();
46 try {
47 yaml.load(doc);
48 fail("Recursive sets are not supported.");
49 } catch (Exception e) {
50 assertTrue(e.getMessage(), e.getMessage().contains("Set cannot be recursive."));
51 }
52 }
53
54
55
56
57 public void testLoadRecursiveTest() {
58 String doc = Util.getLocalResource("issues/issue73-recursive9.txt");
59
60 Yaml yaml = new Yaml();
61 Bean11 beanWithSet = (Bean11) yaml.load(doc);
62 Set<Object> set = beanWithSet.getSet();
63 assertEquals(TreeSet.class, set.getClass());
64 assertEquals("ID555", beanWithSet.getId());
65 assertEquals(3, set.size());
66 assertTrue(set.remove("ggg"));
67
68 assertTrue(set.remove("hhh"));
69 assertEquals(1, set.size());
70
71 Bean11 beanRef = (Bean11) set.iterator().next();
72 assertEquals(beanWithSet, beanRef);
73 assertSame(beanWithSet, beanRef);
74
75 assertFalse(set.isEmpty());
76 assertTrue(set.contains(beanWithSet));
77 assertFalse(set.add(beanWithSet));
78 assertTrue(set.remove(beanWithSet));
79 assertFalse(set.remove(beanWithSet));
80 assertTrue(set.isEmpty());
81 }
82
83 public static class Bean11 implements Comparable<Object> {
84 private SortedSet<Object> set;
85 private String id;
86
87 public SortedSet<Object> getSet() {
88 return set;
89 }
90
91 public void setSet(SortedSet<Object> set) {
92 this.set = set;
93 }
94
95 public String getId() {
96 return id;
97 }
98
99 public void setId(String id) {
100 this.id = id;
101 }
102
103 public int compareTo(Object o) {
104 return toString().compareTo(o.toString());
105 }
106
107 @Override
108 public boolean equals(Object obj) {
109 if (obj instanceof Bean11) {
110 Bean11 b = (Bean11) obj;
111 return id.equals(b.id);
112 } else {
113 return false;
114 }
115 }
116
117 @Override
118 public int hashCode() {
119 return toString().hashCode();
120 }
121
122 @Override
123 public String toString() {
124 return "Bean id=" + id + "set=" + System.identityHashCode(set);
125 }
126 }
127 }