| // 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()); |
| } |
| } |