dart-sdk/tests/dart2js_2/string_escape_test.dart
Joshua Litt 05ca544f15 [dart2js] Move tests/compiler/dart2js_extra to tests/dart2js_2.
Change-Id: Iaa0ca2b4f2d1b15f79ddca37834d3ed2497bc068
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149242
Commit-Queue: Joshua Litt <joshualitt@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2020-06-03 15:15:30 +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();
}