1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.yaml.snakeyaml.issues.issue94;
17
18 import static org.junit.Assert.assertEquals;
19
20 import org.junit.Test;
21 import org.yaml.snakeyaml.Yaml;
22 import org.yaml.snakeyaml.constructor.AbstractConstruct;
23 import org.yaml.snakeyaml.constructor.Construct;
24 import org.yaml.snakeyaml.constructor.Constructor;
25 import org.yaml.snakeyaml.nodes.Node;
26
27 public class ChangeRuntimeClassTest {
28
29 @Test
30 public void testWithGlobalTag() {
31 String yamlText = "!!org.yaml.snakeyaml.issues.issue94.Entity\n" + "name: Matt\n"
32 + "nickName: Java\n";
33
34
35
36
37
38
39
40 Yaml yaml = new Yaml(new MyConstructor());
41
42 Entity loadedEntity = null;
43 loadedEntity = (Entity) yaml.load(yamlText);
44
45 assertEquals("Matt", loadedEntity.getName());
46
47
48
49
50 assertEquals("JJ-Java", loadedEntity.getNickName());
51 assertEquals(EntityLoadingProxy.class, loadedEntity.getClass());
52 }
53
54 @Test
55 public void testNoTag() {
56 String yamlText = "name: Matt\n" + "nickName: Java\n";
57 Yaml yaml = new Yaml(new MyConstructor(Entity.class));
58 Entity loadedEntity = null;
59 loadedEntity = (Entity) yaml.load(yamlText);
60 assertEquals("Matt", loadedEntity.getName());
61 assertEquals("JJ-Java", loadedEntity.getNickName());
62 }
63
64
65
66
67 private class MyConstructor extends Constructor {
68 public MyConstructor() {
69 super();
70 this.yamlConstructors.put(null, new ConstructProxy());
71 }
72
73 public MyConstructor(Class<?> clazz) {
74 super(clazz);
75 this.yamlConstructors.put(null, new ConstructProxy());
76 }
77
78 private class ConstructProxy extends AbstractConstruct {
79 private Construct getConstructor(Node node) {
80 Class<?> cl = getClassForNode(node);
81 if (cl.equals(Entity.class) && true) {
82
83 cl = EntityLoadingProxy.class;
84 }
85 node.setType(cl);
86
87 Construct constructor = yamlClassConstructors.get(node.getNodeId());
88 return constructor;
89 }
90
91 public Object construct(Node node) {
92 return getConstructor(node).construct(node);
93 }
94 }
95 }
96 }