1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.yaml.snakeyaml.representer;
18
19 import junit.framework.TestCase;
20
21 import org.yaml.snakeyaml.Yaml;
22 import org.yaml.snakeyaml.constructor.AbstractConstruct;
23 import org.yaml.snakeyaml.constructor.Constructor;
24 import org.yaml.snakeyaml.nodes.Node;
25 import org.yaml.snakeyaml.nodes.ScalarNode;
26 import org.yaml.snakeyaml.nodes.Tag;
27
28 public class RepresentTest extends TestCase {
29
30 public void testCustomRepresenter() {
31 Yaml yaml = new Yaml(new MyConstructor(), new MyRepresenter());
32 CustomBean etalon = new CustomBean("A", 1);
33 String output = yaml.dump(etalon);
34 assertEquals("!!Dice 'Ad1'\n", output);
35 CustomBean bean = (CustomBean) yaml.load(output);
36 assertEquals("A", bean.getPrefix());
37 assertEquals(1, bean.getSuffix());
38 assertEquals(etalon, bean);
39 }
40
41 class CustomBean {
42 private String prefix;
43 private int suffix;
44
45 public CustomBean(String prefix, int suffix) {
46 this.prefix = prefix;
47 this.suffix = suffix;
48 }
49
50 public String getPrefix() {
51 return prefix;
52 }
53
54 public int getSuffix() {
55 return suffix;
56 }
57
58 @Override
59 public boolean equals(Object obj) {
60 CustomBean bean = (CustomBean) obj;
61 return prefix.equals(bean.getPrefix()) && suffix == bean.getSuffix();
62 }
63 }
64
65 class MyRepresenter extends Representer {
66 public MyRepresenter() {
67 this.representers.put(CustomBean.class, new RepresentDice());
68 }
69
70 private class RepresentDice implements Represent {
71 public Node representData(Object data) {
72 CustomBean coin = (CustomBean) data;
73 String value = coin.getPrefix() + "d" + coin.getSuffix();
74 return representScalar(new Tag("!!Dice"), value);
75 }
76 }
77 }
78
79 class MyConstructor extends Constructor {
80 public MyConstructor() {
81 this.yamlConstructors.put(new Tag(Tag.PREFIX + "Dice"), new ConstructDice());
82 }
83
84 private class ConstructDice extends AbstractConstruct {
85 public Object construct(Node node) {
86 String val = (String) constructScalar((ScalarNode) node);
87 return new CustomBean(val.substring(0, 1), new Integer(val.substring(2)));
88 }
89 }
90 }
91 }