1
2
3
4
5
6
7
8
9
10
11 package ch.qos.logback.core.pattern.parser;
12
13
14
15 import static org.junit.Assert.assertEquals;
16
17 import java.util.ArrayList;
18 import java.util.List;
19
20 import org.junit.Test;
21
22 import ch.qos.logback.core.pattern.util.AlmostAsIsEscapeUtil;
23
24 public class TokenStreamTest {
25
26
27 @Test
28 public void testEmpty() throws ScanException {
29 List tl = new TokenStream("").tokenize();
30 List witness = new ArrayList();
31 assertEquals(witness, tl);
32 }
33
34 @Test
35 public void testSingleLiteral() throws ScanException {
36 List tl = new TokenStream("hello").tokenize();
37 List<Token> witness = new ArrayList<Token>();
38 witness.add(new Token(Token.LITERAL, "hello"));
39 assertEquals(witness, tl);
40 }
41
42 @Test
43 public void testLiteralWithPercent() throws ScanException {
44 {
45 List tl = new TokenStream("hello\\%world").tokenize();
46
47 List<Token> witness = new ArrayList<Token>();
48 witness.add(new Token(Token.LITERAL, "hello%world"));
49 assertEquals(witness, tl);
50 }
51 {
52 List tl = new TokenStream("hello\\%").tokenize();
53 List<Token> witness = new ArrayList<Token>();
54 witness.add(new Token(Token.LITERAL, "hello%"));
55 assertEquals(witness, tl);
56 }
57
58 {
59 List tl = new TokenStream("\\%").tokenize();
60 List<Token> witness = new ArrayList<Token>();
61 witness.add(new Token(Token.LITERAL, "%"));
62 assertEquals(witness, tl);
63 }
64 }
65
66 @Test
67 public void testBasic() throws ScanException {
68
69
70 {
71 List tl = new TokenStream("%c").tokenize();
72 List<Token> witness = new ArrayList<Token>();
73 witness.add(Token.PERCENT_TOKEN);
74 witness.add(new Token(Token.KEYWORD, "c"));
75 assertEquals(witness, tl);
76 }
77
78 {
79
80 List tl = new TokenStream("%a%b").tokenize();
81 List<Token> witness = new ArrayList<Token>();
82 witness.add(Token.PERCENT_TOKEN);
83 witness.add(new Token(Token.KEYWORD, "a"));
84 witness.add(Token.PERCENT_TOKEN);
85 witness.add(new Token(Token.KEYWORD, "b"));
86 assertEquals(witness, tl);
87 }
88
89 {
90
91 List tl = new TokenStream("xyz%-34c").tokenize();
92 List<Token> witness = new ArrayList<Token>();
93 witness.add(new Token(Token.LITERAL, "xyz"));
94 witness.add(Token.PERCENT_TOKEN);
95 witness.add(new Token(Token.FORMAT_MODIFIER, "-34"));
96 witness.add(new Token(Token.KEYWORD, "c"));
97 assertEquals(witness, tl);
98 }
99 }
100
101 @Test
102 public void testComplexNR() throws ScanException {
103 List tl = new TokenStream("%d{1234} [%34.-67toto] %n").tokenize();
104 List<Token> witness = new ArrayList<Token>();
105 witness.add(Token.PERCENT_TOKEN);
106 witness.add(new Token(Token.KEYWORD, "d"));
107 witness.add(new Token(Token.OPTION, "1234"));
108 witness.add(new Token(Token.LITERAL, " ["));
109 witness.add(Token.PERCENT_TOKEN);
110 witness.add(new Token(Token.FORMAT_MODIFIER, "34.-67"));
111 witness.add(new Token(Token.KEYWORD, "toto"));
112 witness.add(new Token(Token.LITERAL, "] "));
113 witness.add(Token.PERCENT_TOKEN);
114 witness.add(new Token(Token.KEYWORD, "n"));
115 assertEquals(witness, tl);
116 }
117
118 @Test
119 public void testEmptyP() throws ScanException {
120 List tl = new TokenStream("()").tokenize();
121 List<Token> witness = new ArrayList<Token>();
122 witness.add(new Token(Token.LITERAL, "("));
123 witness.add(Token.RIGHT_PARENTHESIS_TOKEN);
124 assertEquals(witness, tl);
125 }
126
127 @Test
128 public void testEmptyP2() throws ScanException {
129 List tl = new TokenStream("%()").tokenize();
130 List<Token> witness = new ArrayList<Token>();
131 witness.add(Token.PERCENT_TOKEN);
132 witness.add(Token.LEFT_PARENTHESIS_TOKEN);
133 witness.add(Token.RIGHT_PARENTHESIS_TOKEN);
134 assertEquals(witness, tl);
135 }
136
137 @Test
138 public void testEscape() throws ScanException {
139 {
140 List tl = new TokenStream("\\%").tokenize();
141 List<Token> witness = new ArrayList<Token>();
142 witness.add(new Token(Token.LITERAL, "%"));
143 assertEquals(witness, tl);
144 }
145
146 {
147 List tl = new TokenStream("\\%\\(\\t\\)\\r\\n").tokenize();
148 List<Token> witness = new ArrayList<Token>();
149 witness.add(new Token(Token.LITERAL, "%(\t)\r\n"));
150 assertEquals(witness, tl);
151 }
152
153 {
154 List tl = new TokenStream("\\\\%x").tokenize();
155 List<Token> witness = new ArrayList<Token>();
156 witness.add(new Token(Token.LITERAL, "\\"));
157 witness.add(Token.PERCENT_TOKEN);
158 witness.add(new Token(Token.KEYWORD, "x"));
159 assertEquals(witness, tl);
160 }
161
162 {
163 List tl = new TokenStream("%x\\)").tokenize();
164 List<Token> witness = new ArrayList<Token>();
165 witness.add(Token.PERCENT_TOKEN);
166 witness.add(new Token(Token.KEYWORD, "x"));
167 witness.add(new Token(Token.LITERAL, ")"));
168 assertEquals(witness, tl);
169 }
170
171 {
172 List tl = new TokenStream("%x\\_a").tokenize();
173 List<Token> witness = new ArrayList<Token>();
174 witness.add(Token.PERCENT_TOKEN);
175 witness.add(new Token(Token.KEYWORD, "x"));
176 witness.add(new Token(Token.LITERAL, "a"));
177 assertEquals(witness, tl);
178 }
179 {
180 List tl = new TokenStream("%x\\_%b").tokenize();
181 List<Token> witness = new ArrayList<Token>();
182 witness.add(Token.PERCENT_TOKEN);
183 witness.add(new Token(Token.KEYWORD, "x"));
184 witness.add(Token.PERCENT_TOKEN);
185 witness.add(new Token(Token.KEYWORD, "b"));
186 assertEquals(witness, tl);
187 }
188 }
189
190 @Test
191 public void testOptions() throws ScanException {
192 {
193 List tl = new TokenStream("%x{t}").tokenize();
194 List<Token> witness = new ArrayList<Token>();
195 witness.add(Token.PERCENT_TOKEN);
196 witness.add(new Token(Token.KEYWORD, "x"));
197 witness.add(new Token(Token.OPTION, "t"));
198 assertEquals(witness, tl);
199 }
200
201 {
202 List tl = new TokenStream("%x{t,y}").tokenize();
203 List<Token> witness = new ArrayList<Token>();
204 witness.add(Token.PERCENT_TOKEN);
205 witness.add(new Token(Token.KEYWORD, "x"));
206 witness.add(new Token(Token.OPTION, "t,y"));
207 assertEquals(witness, tl);
208 }
209
210 {
211 List tl = new TokenStream("%x{\"hello world.\", \"12y \"}").tokenize();
212 List<Token> witness = new ArrayList<Token>();
213 witness.add(Token.PERCENT_TOKEN);
214 witness.add(new Token(Token.KEYWORD, "x"));
215 witness.add(new Token(Token.OPTION, "\"hello world.\", \"12y \""));
216 assertEquals(witness, tl);
217 }
218
219 {
220 List tl = new TokenStream("%x{opt\\}}").tokenize();
221 List<Token> witness = new ArrayList<Token>();
222 witness.add(Token.PERCENT_TOKEN);
223 witness.add(new Token(Token.KEYWORD, "x"));
224 witness.add(new Token(Token.OPTION, "opt}"));
225 assertEquals(witness, tl);
226 }
227 }
228
229 @Test
230 public void testSimpleP() throws ScanException {
231 List tl = new TokenStream("%(hello %class{.4?})").tokenize();
232 List<Token> witness = new ArrayList<Token>();
233 witness.add(Token.PERCENT_TOKEN);
234 witness.add(Token.LEFT_PARENTHESIS_TOKEN);
235 witness.add(new Token(Token.LITERAL, "hello "));
236 witness.add(Token.PERCENT_TOKEN);
237 witness.add(new Token(Token.KEYWORD, "class"));
238 witness.add(new Token(Token.OPTION, ".4?"));
239 witness.add(Token.RIGHT_PARENTHESIS_TOKEN);
240 assertEquals(witness, tl);
241 }
242
243 @Test
244 public void testSimpleP2() throws ScanException {
245 List tl = new TokenStream("X %a %-12.550(hello %class{.4?})").tokenize();
246 List<Token> witness = new ArrayList<Token>();
247 witness.add(new Token(Token.LITERAL, "X "));
248 witness.add(Token.PERCENT_TOKEN);
249 witness.add(new Token(Token.KEYWORD, "a"));
250 witness.add(new Token(Token.LITERAL, " "));
251 witness.add(Token.PERCENT_TOKEN);
252 witness.add(new Token(Token.FORMAT_MODIFIER, "-12.550"));
253 witness.add(Token.LEFT_PARENTHESIS_TOKEN);
254 witness.add(new Token(Token.LITERAL, "hello "));
255 witness.add(Token.PERCENT_TOKEN);
256 witness.add(new Token(Token.KEYWORD, "class"));
257 witness.add(new Token(Token.OPTION, ".4?"));
258 witness.add(Token.RIGHT_PARENTHESIS_TOKEN);
259 assertEquals(witness, tl);
260 }
261
262 @Test
263 public void testMultipleRecursion() throws ScanException {
264 List tl = new TokenStream("%-1(%d %45(%class %file))").tokenize();
265 List<Token> witness = new ArrayList<Token>();
266 witness.add(Token.PERCENT_TOKEN);
267 witness.add(new Token(Token.FORMAT_MODIFIER, "-1"));
268 witness.add(Token.LEFT_PARENTHESIS_TOKEN);
269 witness.add(Token.PERCENT_TOKEN);
270 witness.add(new Token(Token.KEYWORD, "d"));
271 witness.add(new Token(Token.LITERAL, " "));
272 witness.add(Token.PERCENT_TOKEN);
273 witness.add(new Token(Token.FORMAT_MODIFIER, "45"));
274 witness.add(Token.LEFT_PARENTHESIS_TOKEN);
275 witness.add(Token.PERCENT_TOKEN);
276 witness.add(new Token(Token.KEYWORD, "class"));
277 witness.add(new Token(Token.LITERAL, " "));
278 witness.add(Token.PERCENT_TOKEN);
279 witness.add(new Token(Token.KEYWORD, "file"));
280 witness.add(Token.RIGHT_PARENTHESIS_TOKEN);
281 witness.add(Token.RIGHT_PARENTHESIS_TOKEN);
282
283 assertEquals(witness, tl);
284 }
285
286 @Test
287 public void testNested() throws ScanException {
288 List tl = new TokenStream("%(%a%(%b))").tokenize();
289 List<Token> witness = new ArrayList<Token>();
290 witness.add(Token.PERCENT_TOKEN);
291 witness.add(Token.LEFT_PARENTHESIS_TOKEN);
292 witness.add(Token.PERCENT_TOKEN);
293 witness.add(new Token(Token.KEYWORD, "a"));
294 witness.add(Token.PERCENT_TOKEN);
295 witness.add(Token.LEFT_PARENTHESIS_TOKEN);
296 witness.add(Token.PERCENT_TOKEN);
297 witness.add(new Token(Token.KEYWORD, "b"));
298 witness.add(Token.RIGHT_PARENTHESIS_TOKEN);
299 witness.add(Token.RIGHT_PARENTHESIS_TOKEN);
300
301 assertEquals(witness, tl);
302
303 }
304
305 @Test
306 public void testEscapedParanteheses() throws ScanException {
307 {
308 List tl = new TokenStream("\\(%h\\)").tokenize();
309 List<Token> witness = new ArrayList<Token>();
310 witness.add(new Token(Token.LITERAL, "("));
311 witness.add(Token.PERCENT_TOKEN);
312 witness.add(new Token(Token.KEYWORD, "h"));
313 witness.add(new Token(Token.LITERAL, ")"));
314 assertEquals(witness, tl);
315 }
316 {
317 List tl = new TokenStream("(%h\\)").tokenize();
318 List<Token> witness = new ArrayList<Token>();
319 witness.add(new Token(Token.LITERAL, "("));
320 witness.add(Token.PERCENT_TOKEN);
321 witness.add(new Token(Token.KEYWORD, "h"));
322 witness.add(new Token(Token.LITERAL, ")"));
323 assertEquals(witness, tl);
324 }
325 }
326
327 @Test
328 public void testWindowsLikeBackSlashes() throws ScanException {
329 {
330 List tl = new TokenStream("c:\\hello\\world.%i", new AlmostAsIsEscapeUtil())
331 .tokenize();
332
333 List<Token> witness = new ArrayList<Token>();
334 witness.add(new Token(Token.LITERAL, "c:\\hello\\world."));
335 witness.add(Token.PERCENT_TOKEN);
336 witness.add(new Token(Token.KEYWORD, "i"));
337 assertEquals(witness, tl);
338 }
339 }
340 }