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.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          // System.out.println(doc);
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          // System.out.println(doc);
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       * set and JavaBean refer to each other
56       */
57      public void testLoadRecursiveTest() {
58          String doc = Util.getLocalResource("issues/issue73-recursive9.txt");
59          // System.out.println(doc);
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          // assertFalse(set.remove("ggg"));???
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 }