aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib/src/test/java/com/yahoo/javacc/UnicodeUtilitiesTestCase.java
blob: d49583ec8f5eb370347caefcd79f22f6186e6abe (plain) (blame)
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 Yahoo. 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 Simon Thoresen Hult
 */
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);
                         }
                     }));
    }
}