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