blob: 81b58115786b0df32bddacea228cdd2230b2d4b5 [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 15.10.2.12: The production CharacterClassEscape :: s evaluates by
/// returning the set of characters containing the characters that are on the
/// right-hand side of the WhiteSpace (7.2) or LineTerminator (7.3) productions.
/// @description Checks that \s indeed matches all 26 whitespace and line
/// terminator characters but no others (tested vs all characters from the basic
/// plane)
/// @3rdparty sputnik-v1:S15.10.2.12_A1_T1.js-S15.10.2.12_A1_T5.js
/// @author rodionov
/// @Issue 1296
import "../../../../Utils/expect.dart";
main() {
RegExp re = new RegExp("\\s");
List<String> errors = <String>[];
for (int alpha = 0x0000; alpha <= 0xFFFF; alpha++) {
switch(alpha) {
// white space as per chapter 7.2
case 0x0009:
case 0x000B:
case 0x000C:
case 0x0020:
case 0x00A0:
case 0xFEFF:
// category Zs
case 0x1680:
case 0x2000:
case 0x2001:
case 0x2002:
case 0x2003:
case 0x2004:
case 0x2005:
case 0x2006:
case 0x2007:
case 0x2008:
case 0x2009:
case 0x200A:
case 0x202F:
case 0x205F:
case 0x3000:
// line terminators as per chapter 7.3
case 0x000A:
case 0x000D:
case 0x2028:
case 0x2029:
if(null == re.firstMatch(new String.fromCharCodes([alpha]))) {
errors.add("\\s !~ char($alpha)");
}
break;
default:
if(null != re.firstMatch(new String.fromCharCodes([alpha]))) {
errors.add("\\s ~ char($alpha)");
}
break;
}
}
if(errors.length > 0) {
StringBuffer sb = new StringBuffer();
sb.writeAll(errors, "\n");
Expect.fail("\n" + sb.toString());
}
}