blob: 866178c6fd0667d3051af51a166ceb35e5fd7b66 [file] [log] [blame]
// Copyright (c) 2014, 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.
library string_escaping_test;
import 'dart:async';
import 'package:observatory/service_io.dart';
import 'package:test/test.dart';
import 'test_helper.dart';
@pragma("vm:entry-point") // Prevent obfuscation
var ascii;
@pragma("vm:entry-point") // Prevent obfuscation
var latin1;
@pragma("vm:entry-point") // Prevent obfuscation
var unicode;
@pragma("vm:entry-point") // Prevent obfuscation
var hebrew;
@pragma("vm:entry-point") // Prevent obfuscation
var singleQuotes;
@pragma("vm:entry-point") // Prevent obfuscation
var doubleQuotes;
@pragma("vm:entry-point") // Prevent obfuscation
var newLines;
@pragma("vm:entry-point") // Prevent obfuscation
var tabs;
@pragma("vm:entry-point") // Prevent obfuscation
var suggrogatePairs;
@pragma("vm:entry-point") // Prevent obfuscation
var nullInTheMiddle;
@pragma("vm:entry-point") // Prevent obfuscation
var escapedUnicodeEscape;
@pragma("vm:entry-point") // Prevent obfuscation
var longStringEven;
@pragma("vm:entry-point") // Prevent obfuscation
var longStringOdd;
@pragma("vm:entry-point") // Prevent obfuscation
var malformedWithLeadSurrogate;
@pragma("vm:entry-point") // Prevent obfuscation
var malformedWithTrailSurrogate;
void script() {
ascii = "Hello, World!";
latin1 = "blåbærgrød";
unicode = "Îñţérñåţîöñåļîžåţîờñ";
hebrew = "שלום רב שובך צפורה נחמדת"; // Right-to-left text.
singleQuotes = "'One,' he said.";
doubleQuotes = '"Two," he said.';
newLines = "Windows\r\nSmalltalk\rUnix\n";
tabs = "One\tTwo\tThree";
suggrogatePairs = "1𝄞2𝄞𝄞3𝄞𝄞𝄞";
nullInTheMiddle = "There are four\u0000 words.";
escapedUnicodeEscape = "Should not be A: \\u0041";
// A surrogate pair will cross the preferred truncation boundry.
longStringEven = "..";
for (int i = 0; i < 512; i++) longStringEven += "𝄞";
longStringOdd = ".";
for (int i = 0; i < 512; i++) longStringOdd += "𝄞";
malformedWithLeadSurrogate = "before" + "𝄞"[0] + "after";
malformedWithTrailSurrogate = "before" + "𝄞"[1] + "after";
}
Future testStrings(Isolate isolate) async {
Library lib = isolate.rootLibrary;
await lib.load();
for (var variable in lib.variables) {
await variable.load();
}
expectFullString(String varName, String varValueAsString) {
Field field = lib.variables.singleWhere((v) => v.name == varName);
Instance value = field.staticValue as Instance;
expect(value.valueAsString, equals(varValueAsString));
expect(value.valueAsStringIsTruncated, isFalse);
}
expectTruncatedString(String varName, String varValueAsString) {
Field field = lib.variables.singleWhere((v) => v.name == varName);
Instance value = field.staticValue as Instance;
expect(varValueAsString, startsWith(value.valueAsString!));
expect(value.valueAsStringIsTruncated, isTrue);
}
script(); // Need to initialize variables in the testing isolate.
expectFullString('ascii', ascii);
expectFullString('latin1', latin1);
expectFullString('unicode', unicode);
expectFullString('hebrew', hebrew);
expectFullString('singleQuotes', singleQuotes);
expectFullString('doubleQuotes', doubleQuotes);
expectFullString('newLines', newLines);
expectFullString('tabs', tabs);
expectFullString('suggrogatePairs', suggrogatePairs);
expectFullString('nullInTheMiddle', nullInTheMiddle);
expectTruncatedString('longStringEven', longStringEven);
expectTruncatedString('longStringOdd', longStringOdd);
expectFullString('malformedWithLeadSurrogate', malformedWithLeadSurrogate);
expectFullString('malformedWithTrailSurrogate', malformedWithTrailSurrogate);
}
var tests = <IsolateTest>[
testStrings,
];
main(args) => runIsolateTests(args, tests, testeeBefore: script);