1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.javacc;
import org.junit.Test;
import static com.yahoo.javacc.UnicodeUtilities.quote;
import static com.yahoo.javacc.UnicodeUtilities.unquote;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
/**
* @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a>
*/
public class UnicodeUtilitiesTestCase {
@Test
public void testQuote() {
assertEquals("'\\f'", quote("\f", '\''));
assertEquals("'\\n'", quote("\n", '\''));
assertEquals("'\\r'", quote("\r", '\''));
assertEquals("'\\t'", quote("\t", '\''));
for (char c = 'a'; c <= 'z'; ++c) {
assertEquals("'" + c + "'", quote(String.valueOf(c), '\''));
}
assertEquals("'\\u4f73'", quote("\u4f73", '\''));
assertEquals("'\\u80fd'", quote("\u80fd", '\''));
assertEquals("'\\u7d22'", quote("\u7d22", '\''));
assertEquals("'\\u5c3c'", quote("\u5c3c", '\''));
assertEquals("'\\u60e0'", quote("\u60e0", '\''));
assertEquals("'\\u666e'", quote("\u666e", '\''));
assertEquals("\"foo\"", quote("foo", '"'));
assertEquals("\"'foo\"", quote("'foo", '"'));
assertEquals("\"foo'\"", quote("foo'", '"'));
assertEquals("\"'foo'\"", quote("'foo'", '"'));
assertEquals("\"\\\"foo\"", quote("\"foo", '"'));
assertEquals("\"foo\\\"\"", quote("foo\"", '"'));
assertEquals("\"\\\"foo\\\"\"", quote("\"foo\"", '"'));
assertEquals("\"\\\"'foo'\\\"\"", quote("\"'foo'\"", '"'));
assertEquals("\"'\\\"foo\\\"'\"", quote("'\"foo\"'", '"'));
assertEquals("\"'f\\\\'o\\\"o\\\\\\\\'\"", quote("'f\\'o\"o\\\\'", '"'));
assertEquals("\"\\female \\nude fa\\rt fe\\tish\"", quote("\female \nude fa\rt fe\tish", '"'));
assertEquals("\"\\u666e\"", quote("\u666e", '"'));
}
@Test
public void testQuoteUnquote() {
assertEquals("\"foo\"", quote(unquote("'foo'"), '"'));
assertEquals("\"\\foo\"", quote(unquote(quote("\foo", '"')), '"'));
assertEquals("\u666e", unquote(quote("\u666e", '"')));
}
@Test
public void testUnquote() {
assertEquals("foo", unquote("foo"));
assertEquals("'foo", unquote("'foo"));
assertEquals("foo'", unquote("foo'"));
assertEquals("foo", unquote("'foo'"));
assertEquals("\"foo", unquote("\"foo"));
assertEquals("foo\"", unquote("foo\""));
assertEquals("foo", unquote("\"foo\""));
assertEquals("'foo'", unquote("\"'foo'\""));
assertEquals("\"foo\"", unquote("'\"foo\"'"));
assertEquals("f'o\"o\\", unquote("'f\\'o\"o\\\\'"));
assertEquals("\female \nude fa\rt fe\tish", unquote("'\\female \\nude fa\\rt fe\\tish'"));
assertEquals("\u666e", unquote("\"\\u666e\""));
try {
unquote("\"\\uSiM0N\"");
fail();
} catch (IllegalArgumentException e) {
}
assertEquals("simo\n", unquote("'\\s\\i\\m\\o\\n'"));
try {
unquote("\"foo\"bar\"");
fail();
} catch (IllegalArgumentException e) {
}
try {
unquote("'foo'bar'");
fail();
} catch (IllegalArgumentException e) {
}
}
@Test
public void requireThatTokenIncludesOnlyAcceptedChars() {
assertEquals("\"\\u0000\",\"\\u7777\",\"\\uffff\",",
UnicodeUtilities.generateToken(new UnicodeUtilities.Predicate() {
@Override
public boolean accepts(char c) {
return c == 0x0000 || c == 0x7777 || c == 0xffff;
}
}));
assertEquals("\"\\u0006\",\"\\u0009\",\"\\u0060\"-\"\\u0069\",",
UnicodeUtilities.generateToken(new UnicodeUtilities.Predicate() {
@Override
public boolean accepts(char c) {
return c == 0x6 || c == 0x9 || (c >= 0x60 && c <= 0x69);
}
}));
}
}
|