| // 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_2/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; |
| 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; |
| 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); |