1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.yaml.snakeyaml.issues.issue67;
17
18 import junit.framework.TestCase;
19
20 import org.yaml.snakeyaml.LoaderOptions;
21 import org.yaml.snakeyaml.Util;
22 import org.yaml.snakeyaml.Yaml;
23 import org.yaml.snakeyaml.nodes.Tag;
24 import org.yaml.snakeyaml.representer.Representer;
25 import org.yaml.snakeyaml.scanner.ScannerException;
26
27 public class NonAsciiCharsInClassNameTest extends TestCase {
28 private String PREFIX = "!!org.yaml.snakeyaml.issues.issue67.NonAsciiCharsInClassNameTest$";
29
30 public void testDump() {
31 Académico obj = new Académico();
32 obj.setId(1);
33 obj.setName("Foo bar baz");
34 Yaml yaml = new Yaml();
35 String result = yaml.dump(obj);
36 assertEquals(PREFIX + "Acad%C3%A9mico {\n id: 1, name: Foo bar baz}\n", result);
37 }
38
39 public void testLoad() {
40 Yaml yaml = new Yaml();
41 Académico obj = (Académico) yaml.load(PREFIX + "Acad%C3%A9mico {id: 3, name: Foo bar}");
42 assertEquals(3, obj.getId());
43 assertEquals("Foo bar", obj.getName());
44 }
45
46 public void testLoadInvalidPattern() {
47 try {
48 Yaml yaml = new Yaml();
49 yaml.load(PREFIX + "Acad%WZ%A9mico {id: 3, name: Foo bar}");
50 fail("Illegal hex characters in escape (%) pattern must not be accepted.");
51 } catch (Exception e) {
52 assertEquals(
53 "while scanning a tag; expected URI escape sequence of 2 hexadecimal numbers, but found W(87) and Z(90); in 'string', line 1, column 71:\n ... nAsciiCharsInClassNameTest$Acad%WZ%A9mico {id: 3, name: Foo bar}\n ^",
54 e.getMessage());
55 }
56 }
57
58 @SuppressWarnings("deprecation")
59 public void testLoadInvalidPatternTooShort() {
60 try {
61 LoaderOptions options = new LoaderOptions();
62 Yaml yaml = new Yaml(options);
63 yaml.load(PREFIX + "Acad%9%A9mico {id: 3, name: Foo bar}");
64 fail("Illegal hex characters in escape (%) pattern must not be accepted.");
65 } catch (ScannerException e) {
66 assertEquals(
67 "while scanning a tag; expected URI escape sequence of 2 hexadecimal numbers, but found 9(57) and %(37); in 'string', line 1, column 71:\n ... nAsciiCharsInClassNameTest$Acad%9%A9mico {id: 3, name: Foo bar}\n ^",
68 e.getMessage());
69 assertEquals(Util.getLocalResource("issues/issue67-error1.txt"), e.toString());
70 }
71 }
72
73 @SuppressWarnings("deprecation")
74 public void testLoadInvalidUtf8() {
75 try {
76 LoaderOptions options = new LoaderOptions();
77 Yaml yaml = new Yaml(options);
78 yaml.load(PREFIX + "Acad%C0mico {id: 3, name: Foo bar}");
79 fail("Illegal UTF-8 must not be accepted.");
80 } catch (ScannerException e) {
81 assertEquals(
82 "while scanning a tag; expected URI in UTF-8: Input length = 1; in 'string', line 1, column 70:\n ... onAsciiCharsInClassNameTest$Acad%C0mico {id: 3, name: Foo bar}\n ^",
83 e.getMessage());
84 assertEquals(Util.getLocalResource("issues/issue67-error2.txt"), e.toString());
85 }
86 }
87
88 public static class Académico {
89 public int getId() {
90 return id;
91 }
92
93 public void setId(int id) {
94 this.id = id;
95 }
96
97 public String getName() {
98 return name;
99 }
100
101 public void setName(String name) {
102 this.name = name;
103 }
104
105 private int id;
106 private String name;
107 }
108
109 public void testDumpCustomTag() {
110 Académico obj = new Académico();
111 obj.setId(123);
112 obj.setName("Foo bar 123");
113 Representer repr = new Representer();
114 repr.addClassTag(Académico.class, new Tag("!foo"));
115 Yaml yaml = new Yaml(repr);
116 String result = yaml.dump(obj);
117 assertEquals("!foo {id: 123, name: Foo bar 123}\n", result);
118 }
119
120 public void testDumpEscapedTag() {
121 Académico obj = new Académico();
122 obj.setId(123);
123 obj.setName("Foo bar 123");
124 Representer repr = new Representer();
125 repr.addClassTag(Académico.class, new Tag("!Académico"));
126 Yaml yaml = new Yaml(repr);
127 String result = yaml.dump(obj);
128 assertEquals("!Acad%C3%A9mico {id: 123, name: Foo bar 123}\n", result);
129 }
130
131 public void testTag() {
132 Tag tag = new Tag("!java/javabean:foo.Bar");
133 assertEquals("!java/javabean:foo.Bar", tag.getValue());
134 }
135 }