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.issue60;
17  
18  import java.beans.IntrospectionException;
19  import java.util.Arrays;
20  import java.util.Collections;
21  import java.util.LinkedHashSet;
22  import java.util.Set;
23  import java.util.TreeSet;
24  
25  import junit.framework.TestCase;
26  
27  import org.yaml.snakeyaml.Util;
28  import org.yaml.snakeyaml.Yaml;
29  import org.yaml.snakeyaml.introspector.BeanAccess;
30  import org.yaml.snakeyaml.introspector.Property;
31  import org.yaml.snakeyaml.introspector.PropertyUtils;
32  import org.yaml.snakeyaml.representer.Representer;
33  
34  //issue 59
35  public class CustomOrderTest extends TestCase {
36  
37      public void testReversedOrder() {
38          Representer repr = new Representer();
39          repr.setPropertyUtils(new ReversedPropertyUtils());
40          Yaml yaml = new Yaml(repr);
41          String output = yaml.dump(getBean());
42          // System.out.println(output);
43          assertEquals(Util.getLocalResource("issues/issue59-1.yaml"), output);
44      }
45  
46      private class ReversedPropertyUtils extends PropertyUtils {
47          @Override
48          protected Set<Property> createPropertySet(Class<? extends Object> type, BeanAccess bAccess)
49                  throws IntrospectionException {
50              Set<Property> result = new TreeSet<Property>(Collections.reverseOrder());
51              result.addAll(super.createPropertySet(type, bAccess));
52              return result;
53          }
54      }
55  
56      public void testUnsorted() {
57          Representer repr = new Representer();
58          repr.setPropertyUtils(new UnsortedPropertyUtils());
59          Yaml yaml = new Yaml(repr);
60          String output = yaml.dump(getBean());
61          // System.out.println(output);
62          assertEquals(Util.getLocalResource("issues/issue59-2.yaml"), output);
63      }
64  
65      private class UnsortedPropertyUtils extends PropertyUtils {
66          @Override
67          protected Set<Property> createPropertySet(Class<? extends Object> type, BeanAccess bAccess)
68                  throws IntrospectionException {
69              Set<Property> result = new LinkedHashSet<Property>(getPropertiesMap(type,
70                      BeanAccess.FIELD).values());
71              result.remove(result.iterator().next());// drop 'listInt' property
72              return result;
73          }
74      }
75  
76      private SkipBean getBean() {
77          SkipBean bean = new SkipBean();
78          bean.setText("foo");
79          bean.setListDate(null);
80          bean.setListInt(Arrays.asList(new Integer[] { null, 1, 2, 3 }));
81          bean.setListStr(Arrays.asList(new String[] { "bar", null, "foo", null }));
82          return bean;
83      }
84  }