1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.yaml.snakeyaml.extensions.compactnotation;
18
19 import java.util.List;
20 import java.util.Map;
21
22 import junit.framework.TestCase;
23
24 import org.yaml.snakeyaml.Util;
25 import org.yaml.snakeyaml.Yaml;
26 import org.yaml.snakeyaml.constructor.BaseConstructor;
27
28 public class CompactConstructorErrorsTest extends TestCase {
29
30 public void test1() {
31 BaseConstructor compact = new CompactConstructor();
32 Yaml yaml = new Yaml(compact);
33 String doc = Util.getLocalResource("compactnotation/error1.yaml");
34 try {
35 yaml.load(doc);
36 fail("Package is not specified.");
37 } catch (Exception e) {
38 assertEquals("java.lang.ClassNotFoundException: Table", e.getMessage());
39 }
40 }
41
42 private Object load(String fileName) {
43 CompactConstructor compact = new PackageCompactConstructor(
44 "org.yaml.snakeyaml.extensions.compactnotation");
45 Yaml yaml = new Yaml(compact);
46 String doc = Util.getLocalResource("compactnotation/" + fileName);
47 Object obj = yaml.load(doc);
48 assertNotNull(obj);
49 return obj;
50 }
51
52 private void failLoad(String fileName, String failure) {
53 load(fileName);
54 fail(failure);
55 }
56
57 private void check(String fileName, String failure, String message) {
58 try {
59 failLoad(fileName, failure);
60 } catch (Exception e) {
61 assertEquals(message, e.getMessage());
62 }
63 }
64
65 public void test2() {
66 check("error2.yaml",
67 "No single argument constructor provided.",
68 "java.lang.NoSuchMethodException: org.yaml.snakeyaml.extensions.compactnotation.Table.<init>(java.lang.String)");
69 }
70
71 public void test3() {
72 check("error3.yaml",
73 "In-line parameters can only be Strings.",
74 "org.yaml.snakeyaml.error.YAMLException: Cannot set property='size' with value='17' (class java.lang.String) in Row id=id111");
75 }
76
77
78
79
80 @SuppressWarnings("unchecked")
81 public void test4() {
82 Table table = (Table) load("error4.yaml");
83 List<Row> rows = table.getRows();
84 assertEquals(1, rows.size());
85 assertFalse("Row should not be created.", rows.get(0) instanceof Row);
86 Map<String, String> map = (Map<String, String>) rows.get(0);
87 assertEquals(1, map.size());
88 assertEquals("15}", map.get("Row(id111, description = text) {size"));
89 }
90
91
92
93
94 @SuppressWarnings("unchecked")
95 public void test5() {
96 Table table = (Table) load("error5.yaml");
97 List<Row> rows = table.getRows();
98 assertEquals(1, rows.size());
99 assertFalse("Row should not be created.", rows.get(0) instanceof Row);
100 Map<String, String> map = (Map<String, String>) rows.get(0);
101 assertEquals(4, map.size());
102
103 assertNull(map.get(new Row("id222")));
104 assertTrue(map.containsKey(new Row("id222")));
105 assertEquals(17, map.get("size"));
106 }
107
108 public void test6() {
109 check("error6.yaml",
110 "Invalid property.",
111 "org.yaml.snakeyaml.error.YAMLException: Unable to find property 'foo' on class: org.yaml.snakeyaml.extensions.compactnotation.Table");
112 }
113
114 public void test7() {
115 check("error7.yaml",
116 "Invalid property.",
117 "org.yaml.snakeyaml.error.YAMLException: Unable to find property 'foo' on class: org.yaml.snakeyaml.extensions.compactnotation.Table");
118 }
119
120 public void test8() {
121 check("error8.yaml",
122 "No list property",
123 "org.yaml.snakeyaml.error.YAMLException: No list property found in class org.yaml.snakeyaml.extensions.compactnotation.Row");
124 }
125
126 public void test9() {
127 check("error9.yaml",
128 "Many list properties found",
129 "org.yaml.snakeyaml.error.YAMLException: Many list properties found in class org.yaml.snakeyaml.extensions.compactnotation.ManyListsTable; Please override getSequencePropertyName() to specify which property to use.");
130 }
131 }