📄 unicodeescapes2test.java
字号:
package gls.ch03.s03;import junit.framework.*;import org.codehaus.groovy.tck.*;public class UnicodeEscapes2Test extends TestCase { public void testPass() throws Throwable { StringBuffer srcBuffer = new StringBuffer(); srcBuffer.append("package gls.ch03.s03").append(lineSep); srcBuffer.append("/**").append(lineSep); srcBuffer.append(" * GLS 3.3:").append(lineSep); srcBuffer.append(" * Implementations first recognize Unicode escapes in their input, translating ").append(lineSep); srcBuffer.append(" * the ASCII characters backslash and 'u' followed by four hexadecimal digits").append(lineSep); srcBuffer.append(" * to the Unicode character with the indicated hexadecimal value, and passing").append(lineSep); srcBuffer.append(" * all other characters unchanged. ").append(lineSep); srcBuffer.append(" *").append(lineSep); srcBuffer.append(" * @author Alan Green").append(lineSep); srcBuffer.append(" */").append(lineSep); srcBuffer.append("").append(lineSep); srcBuffer.append("class UnicodeEscapes2 extends GroovyTestCase {").append(lineSep); srcBuffer.append("").append(lineSep); srcBuffer.append(" // GLS: If an even number of backslashes precede the 'u', it is not ").append(lineSep); srcBuffer.append(" // an escape").append(lineSep); srcBuffer.append(" void testCountBackslash() {").append(lineSep); srcBuffer.append(" def a = 1").append(lineSep); srcBuffer.append(" assert \\u0061 == 1 // char 61 is 'a'").append(lineSep); srcBuffer.append(" ").append(lineSep); srcBuffer.append(" // Not intepreted as an escape").append(lineSep); srcBuffer.append(" // \\\\u0061 == 1 // @fail:parse").append(lineSep); srcBuffer.append("").append(lineSep); srcBuffer.append(" assert \"\\u0061\".length() == 1").append(lineSep); srcBuffer.append(" // Double backslash interpreted as a single backslash in string").append(lineSep); srcBuffer.append(" assert \"\\\\u0061\".length() == 6").append(lineSep); srcBuffer.append(" assert \"\\\\\\u0061\".length() == 2").append(lineSep); srcBuffer.append(" ").append(lineSep); srcBuffer.append(" }").append(lineSep); srcBuffer.append("").append(lineSep); srcBuffer.append(" // GLS: If an eligible \\ is followed by u, or more than one u, and the last u").append(lineSep); srcBuffer.append(" // is not followed by four hexadecimal digits, then a compile-time error").append(lineSep); srcBuffer.append(" // occurs.").append(lineSep); srcBuffer.append(" void testFourHexDigits() {").append(lineSep); srcBuffer.append(" // these next lines won't work. The backslash has been replace by a ").append(lineSep); srcBuffer.append(" // forwards slash so that the file parses. (Comments don't comment out").append(lineSep); srcBuffer.append(" // unicode escapes.)").append(lineSep); srcBuffer.append(" // assert \"/u7\" == \"\\07\" //@fail:parse ").append(lineSep); srcBuffer.append(" // def /u61 = 2 //@fail:parse ").append(lineSep); srcBuffer.append(" // def /u061 = 2 //@fail:parse ").append(lineSep); srcBuffer.append("").append(lineSep); srcBuffer.append(" // If five digits, only the first four count").append(lineSep); srcBuffer.append(" def \\u00610 = 2 ").append(lineSep); srcBuffer.append(" assert a0 == 2").append(lineSep); srcBuffer.append(" }").append(lineSep); srcBuffer.append(" void testInvalidHexDigits() {").append(lineSep); srcBuffer.append(" // invalid hex digits").append(lineSep); srcBuffer.append(" // assert \"\\ufffg\" == \"a\" // @fail:parse").append(lineSep); srcBuffer.append(" // assert \"\\uu006g\" == \"a\" // @fail:parse").append(lineSep); srcBuffer.append(" // assert \"\\uab cd\" == \"acd\" // @fail:parse").append(lineSep); srcBuffer.append(" }").append(lineSep); srcBuffer.append("}").append(lineSep); Object result = helper.evaluate(srcBuffer.toString(),"testPass"); if (result instanceof TestResult) { TestResult testResult = (TestResult)result; if (testResult.errorCount() > 0) { TestFailure firstTestFailure = (TestFailure)testResult.errors().nextElement(); throw firstTestFailure.thrownException(); } if (testResult.failureCount() > 0) { AssertionFailedError firstFailure = (AssertionFailedError)(testResult.failures().nextElement()); throw firstFailure; } } } public void testFailParse1() throws Throwable { StringBuffer srcBuffer = new StringBuffer(); srcBuffer.append("package gls.ch03.s03").append(lineSep); srcBuffer.append("/**").append(lineSep); srcBuffer.append(" * GLS 3.3:").append(lineSep); srcBuffer.append(" * Implementations first recognize Unicode escapes in their input, translating ").append(lineSep); srcBuffer.append(" * the ASCII characters backslash and 'u' followed by four hexadecimal digits").append(lineSep); srcBuffer.append(" * to the Unicode character with the indicated hexadecimal value, and passing").append(lineSep); srcBuffer.append(" * all other characters unchanged. ").append(lineSep); srcBuffer.append(" *").append(lineSep); srcBuffer.append(" * @author Alan Green").append(lineSep); srcBuffer.append(" */").append(lineSep); srcBuffer.append("").append(lineSep); srcBuffer.append("class UnicodeEscapes2 extends GroovyTestCase {").append(lineSep); srcBuffer.append("").append(lineSep); srcBuffer.append(" // GLS: If an even number of backslashes precede the 'u', it is not ").append(lineSep); srcBuffer.append(" // an escape").append(lineSep); srcBuffer.append(" void testCountBackslash() {").append(lineSep); srcBuffer.append(" def a = 1").append(lineSep); srcBuffer.append(" assert \\u0061 == 1 // char 61 is 'a'").append(lineSep); srcBuffer.append(" ").append(lineSep); srcBuffer.append(" // Not intepreted as an escape").append(lineSep); srcBuffer.append(" \\\\u0061 == 1 // @fail:parse").append(lineSep); srcBuffer.append("").append(lineSep); srcBuffer.append(" assert \"\\u0061\".length() == 1").append(lineSep); srcBuffer.append(" // Double backslash interpreted as a single backslash in string").append(lineSep); srcBuffer.append(" assert \"\\\\u0061\".length() == 6").append(lineSep); srcBuffer.append(" assert \"\\\\\\u0061\".length() == 2").append(lineSep); srcBuffer.append(" ").append(lineSep); srcBuffer.append(" }").append(lineSep); srcBuffer.append("").append(lineSep); srcBuffer.append(" // GLS: If an eligible \\ is followed by u, or more than one u, and the last u").append(lineSep); srcBuffer.append(" // is not followed by four hexadecimal digits, then a compile-time error").append(lineSep); srcBuffer.append(" // occurs.").append(lineSep); srcBuffer.append(" void testFourHexDigits() {").append(lineSep); srcBuffer.append(" // these next lines won't work. The backslash has been replace by a ").append(lineSep); srcBuffer.append(" // forwards slash so that the file parses. (Comments don't comment out").append(lineSep); srcBuffer.append(" // unicode escapes.)").append(lineSep); srcBuffer.append(" // assert \"/u7\" == \"\\07\" //@fail:parse ").append(lineSep); srcBuffer.append(" // def /u61 = 2 //@fail:parse ").append(lineSep); srcBuffer.append(" // def /u061 = 2 //@fail:parse ").append(lineSep); srcBuffer.append("").append(lineSep); srcBuffer.append(" // If five digits, only the first four count").append(lineSep); srcBuffer.append(" def \\u00610 = 2 ").append(lineSep); srcBuffer.append(" assert a0 == 2").append(lineSep); srcBuffer.append(" }").append(lineSep); srcBuffer.append(" void testInvalidHexDigits() {").append(lineSep); srcBuffer.append(" // invalid hex digits").append(lineSep); srcBuffer.append(" // assert \"\\ufffg\" == \"a\" // @fail:parse").append(lineSep); srcBuffer.append(" // assert \"\\uu006g\" == \"a\" // @fail:parse").append(lineSep); srcBuffer.append(" // assert \"\\uab cd\" == \"acd\" // @fail:parse").append(lineSep); srcBuffer.append(" }").append(lineSep); srcBuffer.append("}").append(lineSep); try { helper.parse(srcBuffer.toString(),"testFailParse1"); fail("This line did not fail to parse: \\\\u0061 == 1 // @fail:parse"); } catch (Exception e) { // ignore an exception as that is what we're hoping for in this case. } } public void testFailParse2() throws Throwable { StringBuffer srcBuffer = new StringBuffer(); srcBuffer.append("package gls.ch03.s03").append(lineSep); srcBuffer.append("/**").append(lineSep); srcBuffer.append(" * GLS 3.3:").append(lineSep); srcBuffer.append(" * Implementations first recognize Unicode escapes in their input, translating ").append(lineSep); srcBuffer.append(" * the ASCII characters backslash and 'u' followed by four hexadecimal digits").append(lineSep); srcBuffer.append(" * to the Unicode character with the indicated hexadecimal value, and passing").append(lineSep); srcBuffer.append(" * all other characters unchanged. ").append(lineSep); srcBuffer.append(" *").append(lineSep); srcBuffer.append(" * @author Alan Green").append(lineSep); srcBuffer.append(" */").append(lineSep); srcBuffer.append("").append(lineSep); srcBuffer.append("class UnicodeEscapes2 extends GroovyTestCase {").append(lineSep); srcBuffer.append("").append(lineSep); srcBuffer.append(" // GLS: If an even number of backslashes precede the 'u', it is not ").append(lineSep); srcBuffer.append(" // an escape").append(lineSep); srcBuffer.append(" void testCountBackslash() {").append(lineSep); srcBuffer.append(" def a = 1").append(lineSep); srcBuffer.append(" assert \\u0061 == 1 // char 61 is 'a'").append(lineSep); srcBuffer.append(" ").append(lineSep); srcBuffer.append(" // Not intepreted as an escape").append(lineSep); srcBuffer.append(" // \\\\u0061 == 1 // @fail:parse").append(lineSep); srcBuffer.append("").append(lineSep); srcBuffer.append(" assert \"\\u0061\".length() == 1").append(lineSep); srcBuffer.append(" // Double backslash interpreted as a single backslash in string").append(lineSep); srcBuffer.append(" assert \"\\\\u0061\".length() == 6").append(lineSep); srcBuffer.append(" assert \"\\\\\\u0061\".length() == 2").append(lineSep); srcBuffer.append(" ").append(lineSep); srcBuffer.append(" }").append(lineSep); srcBuffer.append("").append(lineSep); srcBuffer.append(" // GLS: If an eligible \\ is followed by u, or more than one u, and the last u").append(lineSep); srcBuffer.append(" // is not followed by four hexadecimal digits, then a compile-time error").append(lineSep); srcBuffer.append(" // occurs.").append(lineSep); srcBuffer.append(" void testFourHexDigits() {").append(lineSep);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -