// 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 boundary. 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 = [ testStrings, ]; main(args) => runIsolateTests(args, tests, testeeBefore: script);