dart-sdk/tests/web_2/string_escape_test.dart
Sigmund Cherem 912005267d [web] rename suite dart2js -> web.
Change-Id: I46be49b2effec3e38a3dc44cd45cfe736f77fa78
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/182680
Commit-Queue: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Joshua Litt <joshualitt@google.com>
Reviewed-by: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Stephen Adams <sra@google.com>
2021-02-04 23:11:32 +00:00

151 lines
4.8 KiB
Dart
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright (c) 2012, 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.
// @dart = 2.7
import "package:expect/expect.dart";
// Test that string escapes work correctly.
testSingleCharacterEscapes() {
List/*<String>*/ examples = [
"\b\f\n\r\t\v",
'\b\f\n\r\t\v',
"""\b\f\n\r\t\v""",
'''\b\f\n\r\t\v''',
];
List values = [8, 12, 10, 13, 9, 11];
for (String s in examples) {
Expect.equals(6, s.length);
for (int i = 0; i < 6; i++) {
Expect.equals(values[i], s.codeUnitAt(i));
}
}
// An escaped quote isn't part of a multiline end quote.
Expect.equals(r'"', """\"""");
Expect.equals(r"'", '''\'''');
Expect.equals(r'" "', """" \"""");
Expect.equals(r"' '", '''' \'''');
Expect.equals(r'"" ', """"" """);
Expect.equals(r"'' ", ''''' ''');
}
testXEscapes() {
var allBytes =
"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
"\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
"\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
"\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
"\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
"\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
"\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
"\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
"\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
"\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
"\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
"\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
"\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
Expect.equals(256, allBytes.length);
for (int i = 0; i < 256; i++) {
Expect.equals(i, allBytes.codeUnitAt(i));
}
}
testUEscapes() {
List /*String*/ examples = [
"\u0000\u0001\u0022\u0027\u005c\u007f\u0080\u00ff"
"\u0100\u1000\ud7ff\ue000\uffff",
'\u0000\u0001\u0022\u0027\u005c\u007f\u0080\u00ff'
'\u0100\u1000\ud7ff\ue000\uffff',
"""\u0000\u0001\u0022\u0027\u005c\u007f\u0080\u00ff"""
"""\u0100\u1000\ud7ff\ue000\uffff""",
'''\u0000\u0001\u0022\u0027\u005c\u007f\u0080\u00ff'''
'''\u0100\u1000\ud7ff\ue000\uffff'''
];
List/*<int>*/ values = [
0,
1,
0x22,
0x27,
0x5c,
0x7f,
0x80,
0xff,
0x100,
0x1000,
0xd7ff,
0xe000,
0xffff
];
for (String s in examples) {
Expect.equals(values.length, s.length);
for (int i = 0; i < values.length; i++) {
Expect.equals(values[i], s.codeUnitAt(i));
}
}
// No characters above 0xffff until Leg supports that.
var long = "\u{0}\u{00}\u{000}\u{0000}\u{00000}\u{000000}"
"\u{1}\u{01}\u{001}\u{00001}"
"\u{ffff}\u{0ffff}\u{00ffff}";
var longValues = [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0xffff, 0xffff, 0xffff];
Expect.equals(longValues.length, long.length);
for (int i = 0; i < longValues.length; i++) {
Expect.equals(longValues[i], long.codeUnitAt(i));
}
}
testIdentityEscapes() {
// All non-control ASCII characters escaped, except those with special
// meaning: b, f, n, r, t, u, v, and x (replaced by \x00).
var asciiLiterals =
"\ \!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\0\1\2\3\4\5\6\7\8\9\:\;\<\=\>"
"\?\@\A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z\[\\\]"
"\^\_\`\a\x00\c\d\e\x00\g\h\i\j\k\l\m\x00\o\p\q\x00\s\x00\x00\x00"
"\w\x00\y\z\{\|\}\~\";
Expect.equals(128 - 32, asciiLiterals.length);
for (int i = 32; i < 128; i++) {
int code = asciiLiterals.codeUnitAt(i - 32);
if (code != 0) {
Expect.equals(i, code);
}
}
}
testQuotes() {
// The string [ "' ].
String bothQuotes = ' "' "' ";
Expect.equals(bothQuotes, " \"' ");
Expect.equals(bothQuotes, ' "\' ');
Expect.equals(bothQuotes, """ "' """);
Expect.equals(bothQuotes, ''' "' ''');
Expect.equals(bothQuotes, r""" "' """);
Expect.equals(bothQuotes, r''' "' ''');
}
testRawStrings() {
String raw1 = r'\x00';
Expect.equals(4, raw1.length);
Expect.equals(0x5c, raw1.codeUnitAt(0));
}
main() {
// Test \x??.
testXEscapes();
// Test \u???? and \u{?+}.
testUEscapes();
// Test \b, \f, \n, \r, \t, \v.
testSingleCharacterEscapes();
// Test all other single character (identity) escaeps.
testIdentityEscapes();
// Test that quotes are handled correctly.
testQuotes();
// Test that raw strings are raw.
testRawStrings();
}