1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.yaml.snakeyaml.ruby;
17
18 import junit.framework.TestCase;
19
20 import org.yaml.snakeyaml.DumperOptions;
21 import org.yaml.snakeyaml.TypeDescription;
22 import org.yaml.snakeyaml.Util;
23 import org.yaml.snakeyaml.Yaml;
24 import org.yaml.snakeyaml.constructor.Constructor;
25 import org.yaml.snakeyaml.nodes.Tag;
26 import org.yaml.snakeyaml.representer.Representer;
27
28 public class RubyTest extends TestCase {
29
30 public void testParse() {
31 TestObject result = parseObject(Util.getLocalResource("ruby/ruby1.yaml"));
32 assertNotNull(result);
33 assertEquals(0, result.getSub1().getAtt2());
34 assertEquals("MyString", result.getSub2().getAtt1());
35 assertEquals(1, result.getSub2().getAtt2().size());
36 assertEquals(12345, result.getSub2().getAtt3());
37 }
38
39 public void testEmitNoTags() {
40 TestObject result = parseObject(Util.getLocalResource("ruby/ruby1.yaml"));
41 DumperOptions options = new DumperOptions();
42 options.setExplicitStart(true);
43 Yaml yaml2 = new Yaml(options);
44 String output = yaml2.dumpAsMap(result);
45 assertFalse("No tags expected.", output.contains("Sub1"));
46
47
48 Yaml beanLoader = new Yaml();
49 TestObject result2 = beanLoader.loadAs(output, TestObject.class);
50 assertEquals(0, result2.getSub1().getAtt2());
51 assertEquals("MyString", result2.getSub2().getAtt1());
52 assertEquals(1, result2.getSub2().getAtt2().size());
53 assertEquals(12345, result2.getSub2().getAtt3());
54 }
55
56 public void testEmitWithTags() {
57 TestObject result = parseObject(Util.getLocalResource("ruby/ruby1.yaml"));
58 DumperOptions options = new DumperOptions();
59 options.setExplicitStart(true);
60 Representer repr = new Representer();
61 repr.addClassTag(TestObject.class, new Tag("!ruby/object:Test::Module::Object"));
62 repr.addClassTag(Sub1.class, new Tag("!ruby/object:Test::Module::Sub1"));
63 repr.addClassTag(Sub2.class, new Tag("!ruby/object:Test::Module::Sub2"));
64 Yaml yaml2 = new Yaml(repr, options);
65 String output = yaml2.dump(result);
66
67 assertTrue("Tags must be present.",
68 output.startsWith("--- !ruby/object:Test::Module::Object"));
69 assertTrue("Tags must be present: " + output,
70 output.contains("!ruby/object:Test::Module::Sub1"));
71 assertTrue("Tags must be present.", output.contains("!ruby/object:Test::Module::Sub2"));
72
73 TestObject result2 = parseObject(output);
74 assertEquals(0, result2.getSub1().getAtt2());
75 assertEquals("MyString", result2.getSub2().getAtt1());
76 assertEquals(1, result2.getSub2().getAtt2().size());
77 assertEquals(12345, result2.getSub2().getAtt3());
78 }
79
80 public void testEmitWithTags2WithoutTagForParentJavabean() {
81 TestObject result = parseObject(Util.getLocalResource("ruby/ruby1.yaml"));
82 DumperOptions options = new DumperOptions();
83 options.setExplicitStart(true);
84 Representer repr = new Representer();
85 repr.addClassTag(Sub1.class, new Tag("!ruby/object:Test::Module::Sub1"));
86 repr.addClassTag(Sub2.class, new Tag("!ruby/object:Test::Module::Sub2"));
87 Yaml yaml2 = new Yaml(repr, options);
88 String output = yaml2.dump(result);
89
90 assertTrue("Tags must be present.",
91 output.startsWith("--- !!org.yaml.snakeyaml.ruby.TestObject"));
92 assertTrue("Tags must be present: " + output,
93 output.contains("!ruby/object:Test::Module::Sub1"));
94 assertTrue("Tags must be present.", output.contains("!ruby/object:Test::Module::Sub2"));
95
96 TestObject result2 = parseObject(output);
97 assertEquals(0, result2.getSub1().getAtt2());
98 assertEquals("MyString", result2.getSub2().getAtt1());
99 assertEquals(1, result2.getSub2().getAtt2().size());
100 assertEquals(12345, result2.getSub2().getAtt3());
101 }
102
103 private TestObject parseObject(String input) {
104 Constructor con = new Constructor(TestObject.class);
105 con.addTypeDescription(new TypeDescription(TestObject.class,
106 "!ruby/object:Test::Module::Object"));
107 con.addTypeDescription(new TypeDescription(Sub1.class, "!ruby/object:Test::Module::Sub1"));
108 con.addTypeDescription(new TypeDescription(Sub2.class, "!ruby/object:Test::Module::Sub2"));
109
110 Yaml yaml = new Yaml(con);
111 return (TestObject) yaml.load(input);
112 }
113 }