1 /* 2 * Copyright (c) 2012-2017 The ANTLR Project. All rights reserved. 3 * Use of this file is governed by the BSD 3-clause license that 4 * can be found in the LICENSE.txt file in the project root. 5 */ 6 7 package org.antlr.v4.test.tool; 8 9 import org.antlr.v4.misc.EscapeSequenceParsing; 10 import org.antlr.v4.runtime.misc.IntervalSet; 11 import org.junit.Test; 12 13 import static org.antlr.v4.misc.EscapeSequenceParsing.Result; 14 import static org.junit.Assert.assertEquals; 15 16 public class TestEscapeSequenceParsing { 17 @Test testParseEmpty()18 public void testParseEmpty() { 19 assertEquals( 20 EscapeSequenceParsing.Result.Type.INVALID, 21 EscapeSequenceParsing.parseEscape("", 0).type); 22 } 23 24 @Test testParseJustBackslash()25 public void testParseJustBackslash() { 26 assertEquals( 27 EscapeSequenceParsing.Result.Type.INVALID, 28 EscapeSequenceParsing.parseEscape("\\", 0).type); 29 } 30 31 @Test testParseInvalidEscape()32 public void testParseInvalidEscape() { 33 assertEquals( 34 EscapeSequenceParsing.Result.Type.INVALID, 35 EscapeSequenceParsing.parseEscape("\\z", 0).type); 36 } 37 38 @Test testParseNewline()39 public void testParseNewline() { 40 assertEquals( 41 new Result(Result.Type.CODE_POINT, '\n', IntervalSet.EMPTY_SET, 0,2), 42 EscapeSequenceParsing.parseEscape("\\n", 0)); 43 } 44 45 @Test testParseTab()46 public void testParseTab() { 47 assertEquals( 48 new Result(Result.Type.CODE_POINT, '\t', IntervalSet.EMPTY_SET, 0,2), 49 EscapeSequenceParsing.parseEscape("\\t", 0)); 50 } 51 52 @Test testParseUnicodeTooShort()53 public void testParseUnicodeTooShort() { 54 assertEquals( 55 EscapeSequenceParsing.Result.Type.INVALID, 56 EscapeSequenceParsing.parseEscape("\\uABC", 0).type); 57 } 58 59 @Test testParseUnicodeBMP()60 public void testParseUnicodeBMP() { 61 assertEquals( 62 new Result(Result.Type.CODE_POINT, 0xABCD, IntervalSet.EMPTY_SET, 0,6), 63 EscapeSequenceParsing.parseEscape("\\uABCD", 0)); 64 } 65 66 @Test testParseUnicodeSMPTooShort()67 public void testParseUnicodeSMPTooShort() { 68 assertEquals( 69 EscapeSequenceParsing.Result.Type.INVALID, 70 EscapeSequenceParsing.parseEscape("\\u{}", 0).type); 71 } 72 73 @Test testParseUnicodeSMPMissingCloseBrace()74 public void testParseUnicodeSMPMissingCloseBrace() { 75 assertEquals( 76 EscapeSequenceParsing.Result.Type.INVALID, 77 EscapeSequenceParsing.parseEscape("\\u{12345", 0).type); 78 } 79 80 @Test testParseUnicodeTooBig()81 public void testParseUnicodeTooBig() { 82 assertEquals( 83 EscapeSequenceParsing.Result.Type.INVALID, 84 EscapeSequenceParsing.parseEscape("\\u{110000}", 0).type); 85 } 86 87 @Test testParseUnicodeSMP()88 public void testParseUnicodeSMP() { 89 assertEquals( 90 new Result(Result.Type.CODE_POINT, 0x10ABCD, IntervalSet.EMPTY_SET, 0,10), 91 EscapeSequenceParsing.parseEscape("\\u{10ABCD}", 0)); 92 } 93 94 @Test testParseUnicodePropertyTooShort()95 public void testParseUnicodePropertyTooShort() { 96 assertEquals( 97 EscapeSequenceParsing.Result.Type.INVALID, 98 EscapeSequenceParsing.parseEscape("\\p{}", 0).type); 99 } 100 101 @Test testParseUnicodePropertyMissingCloseBrace()102 public void testParseUnicodePropertyMissingCloseBrace() { 103 assertEquals( 104 EscapeSequenceParsing.Result.Type.INVALID, 105 EscapeSequenceParsing.parseEscape("\\p{1234", 0).type); 106 } 107 108 @Test testParseUnicodeProperty()109 public void testParseUnicodeProperty() { 110 assertEquals( 111 new Result(Result.Type.PROPERTY, -1, IntervalSet.of(66560, 66639), 0,11), 112 EscapeSequenceParsing.parseEscape("\\p{Deseret}", 0)); 113 } 114 115 @Test testParseUnicodePropertyInvertedTooShort()116 public void testParseUnicodePropertyInvertedTooShort() { 117 assertEquals( 118 EscapeSequenceParsing.Result.Type.INVALID, 119 EscapeSequenceParsing.parseEscape("\\P{}", 0).type); 120 } 121 122 @Test testParseUnicodePropertyInvertedMissingCloseBrace()123 public void testParseUnicodePropertyInvertedMissingCloseBrace() { 124 assertEquals( 125 EscapeSequenceParsing.Result.Type.INVALID, 126 EscapeSequenceParsing.parseEscape("\\P{Deseret", 0).type); 127 } 128 129 @Test testParseUnicodePropertyInverted()130 public void testParseUnicodePropertyInverted() { 131 IntervalSet expected = IntervalSet.of(0, 66559); 132 expected.add(66640, Character.MAX_CODE_POINT); 133 assertEquals( 134 new Result(Result.Type.PROPERTY, -1, expected, 0, 11), 135 EscapeSequenceParsing.parseEscape("\\P{Deseret}", 0)); 136 } 137 } 138