• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.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 {
testDumpException()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  
testLoadException()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       */
testLoadRecursiveTest()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  
getSet()87          public SortedSet<Object> getSet() {
88              return set;
89          }
90  
setSet(SortedSet<Object> set)91          public void setSet(SortedSet<Object> set) {
92              this.set = set;
93          }
94  
getId()95          public String getId() {
96              return id;
97          }
98  
setId(String id)99          public void setId(String id) {
100              this.id = id;
101          }
102  
compareTo(Object o)103          public int compareTo(Object o) {
104              return toString().compareTo(o.toString());
105          }
106  
107          @Override
equals(Object obj)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
hashCode()118          public int hashCode() {
119              return toString().hashCode();
120          }
121  
122          @Override
toString()123          public String toString() {
124              return "Bean id=" + id + "set=" + System.identityHashCode(set);
125          }
126      }
127  }
128