1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package examples.staticstate;
17
18 import java.util.ArrayList;
19 import java.util.List;
20 import java.util.Set;
21
22 import junit.framework.TestCase;
23
24 import org.yaml.snakeyaml.DumperOptions;
25 import org.yaml.snakeyaml.Yaml;
26 import org.yaml.snakeyaml.constructor.Constructor;
27 import org.yaml.snakeyaml.introspector.Property;
28 import org.yaml.snakeyaml.nodes.MappingNode;
29 import org.yaml.snakeyaml.nodes.Node;
30 import org.yaml.snakeyaml.nodes.NodeTuple;
31 import org.yaml.snakeyaml.nodes.ScalarNode;
32 import org.yaml.snakeyaml.representer.Representer;
33
34
35
36
37 public class StaticFieldsTest extends TestCase {
38 public void testAsJavaBean() {
39 JavaBeanWithStaticState bean = new JavaBeanWithStaticState();
40 bean.setName("Bahrack");
41 bean.setAge(-47);
42 JavaBeanWithStaticState.setType("Represent");
43 JavaBeanWithStaticState.color = "Black";
44 Yaml yaml = new Yaml();
45 String output = yaml.dump(bean);
46
47 assertEquals("!!examples.staticstate.JavaBeanWithStaticState {age: -47, name: Bahrack}\n",
48 output);
49
50 JavaBeanWithStaticState bean2 = (JavaBeanWithStaticState) yaml.load(output);
51 assertEquals(-47, bean2.getAge());
52 assertEquals("Bahrack", bean2.getName());
53 }
54
55 public void testCustomDump() {
56 JavaBeanWithStaticState bean = new JavaBeanWithStaticState();
57 bean.setName("Lui");
58 bean.setAge(25);
59 JavaBeanWithStaticState.setType("Represent");
60 JavaBeanWithStaticState.color = "Black";
61 Yaml yaml = new Yaml(new MyRepresenter(), new DumperOptions());
62 String output = yaml.dump(bean);
63
64 assertEquals(
65 "!!examples.staticstate.JavaBeanWithStaticState {age: 25, name: Lui, color: Black,\n type: Represent}\n",
66 output);
67 }
68
69 public void testCustomLoad() {
70 Yaml yaml = new Yaml(new MyConstructor());
71 String output = "!!examples.staticstate.JavaBeanWithStaticState {age: 25, name: Lui, color: Oranje,\n type: King}\n";
72 JavaBeanWithStaticState bean2 = (JavaBeanWithStaticState) yaml.load(output);
73 assertEquals(25, bean2.getAge());
74 assertEquals("Lui", bean2.getName());
75 assertEquals("Oranje", JavaBeanWithStaticState.color);
76 assertEquals("King", JavaBeanWithStaticState.getType());
77 }
78
79 private class MyRepresenter extends Representer {
80 @Override
81 protected MappingNode representJavaBean(Set<Property> properties, Object javaBean) {
82 MappingNode node = super.representJavaBean(properties, javaBean);
83 if (javaBean instanceof JavaBeanWithStaticState) {
84 List<NodeTuple> value = node.getValue();
85 value.add(new NodeTuple(representData("color"),
86 representData(JavaBeanWithStaticState.color)));
87 value.add(new NodeTuple(representData("type"),
88 representData(JavaBeanWithStaticState.getType())));
89 }
90 return node;
91 }
92 }
93
94 private class MyConstructor extends Constructor {
95 protected Object constructObject(Node node) {
96 if (node.getType().isAssignableFrom(JavaBeanWithStaticState.class)) {
97 MappingNode beanNode = (MappingNode) node;
98 List<NodeTuple> value = beanNode.getValue();
99 List<NodeTuple> removed = new ArrayList<NodeTuple>();
100 for (NodeTuple tuple : value) {
101 ScalarNode keyNode = (ScalarNode) tuple.getKeyNode();
102 if (keyNode.getValue().equals("color")) {
103 ScalarNode valueNode = (ScalarNode) tuple.getValueNode();
104 JavaBeanWithStaticState.color = valueNode.getValue();
105 } else if (keyNode.getValue().equals("type")) {
106 ScalarNode valueNode = (ScalarNode) tuple.getValueNode();
107 JavaBeanWithStaticState.setType(valueNode.getValue());
108 } else
109 removed.add(tuple);
110 }
111 beanNode.setValue(removed);
112 JavaBeanWithStaticState bean = (JavaBeanWithStaticState) super
113 .constructObject(beanNode);
114
115 return bean;
116 } else {
117 return super.constructObject(node);
118 }
119 }
120 }
121 }