blob: 2edb2751c56d1a439f678c783883e6b1960ea616 [file] [log] [blame]
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
/**
* @assertion The production CharacterEscape :: c ControlLetter evaluates as
* follows:
* <ol>
* <li>Let ch be the character represented by ControlLetter.</li>
* <li>Let i be ch's code unit value.</li>
* <li>Let j be the remainder of dividing i by 32.</li>
* <li>Return the character whose code unit value is j.</li>
* </ol>
* <br/>ControlLetter :: one of
* <ul>
* <li>a-z</li>
* <li>A-Z</li>
* </ul>
* @description Checks that the specified algorithm does not extend to
* unsupported control letters (using ranges between and around the supported
* ones).
* @author rodionov
* @Issue 1293
*/
import "../../../../Utils/expect.dart";
main() {
// Not sure this test makes sense at all.
List<int> errors = <int>[];
for(var alpha = 0x0030; alpha < 0x0040; alpha++) {
RegExp? re = null;
try {
RegExp re = new RegExp("\\c${new String.fromCharCodes([alpha])}");
} catch(e) { Expect.isTrue(e is FormatException); }
if(re != null) {
String str = new String.fromCharCodes([alpha % 32]);
if (null != re.firstMatch(str)) {
errors.add(alpha);
}
}
}
for(var alpha = 0x005B; alpha < 0x0060; alpha++) {
RegExp? re = null;
try {
RegExp re = new RegExp("\\c${new String.fromCharCodes([alpha])}");
} catch(e) { Expect.isTrue(e is FormatException); }
if(re != null) {
String str = new String.fromCharCodes([alpha % 32]);
if (null != re.firstMatch(str)) {
errors.add(alpha);
}
}
}
for(var alpha = 0x007B; alpha <= 0x044F; alpha++) {
if(alpha % 32 == 0) {
continue; // \u0000 seems to match anything??!
}
// | character should be terminated here
RegExp re = alpha != 0x007C ?
RegExp("\\c${new String.fromCharCodes([alpha])}") :
RegExp("\\c\\${new String.fromCharCodes([alpha])}");
String str = new String.fromCharCodes([alpha % 32]);
if(null != re.firstMatch(str)) {
errors.add(alpha);
}
}
if(errors.length > 0) {
StringBuffer errStr = new StringBuffer();
void f(int alpha) {
errStr.write("\"\\c${new String.fromCharCodes([alpha])} \" matches \""
"${String.fromCharCodes([alpha % 32])}\", although it should not\n");
}
errors.forEach(f);
Expect.fail(errStr.toString());
}
}