Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Unified Diff: tests/compiler/dart2js_extra/useful_error_message_1_test.dart

Issue 1138313002: Better toString and Error.toSafeString output for closures for dart2js. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tests/compiler/dart2js_extra/useful_error_message_1_test.dart
diff --git a/tests/compiler/dart2js_extra/useful_error_message_1_test.dart b/tests/compiler/dart2js_extra/useful_error_message_1_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..59a3bc913a8f1203efa69c8cd5f140de90170325
--- /dev/null
+++ b/tests/compiler/dart2js_extra/useful_error_message_1_test.dart
@@ -0,0 +1,83 @@
+// Copyright (c) 2015, 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.
+
+// Test that closures have a useful string that identifies the function by name
+// in error messages.
+
+import "package:expect/expect.dart";
+
+@NoInline
+@AssumeDynamic
+confuse(x) => x;
+
+class CCCC {
+ instanceMethod([a, b]) => '[$a, $b]';
+ static staticMethod() => 'hi';
+ // Default `toString` method returns "Instance of 'CCCC'" or similar with a
+ // shorter name if minified.
+}
+
+main() {
+ var c = confuse(new CCCC());
+
+ var instanceString = confuse(c).toString();
+ bool isMinified = instanceString.contains(new RegExp("Instance of '..?.?'"));
+ if (!isMinified) {
+ Expect.equals("Instance of 'CCCC'", instanceString);
+ }
+
+ checkContains(String message, String tag) {
+ if (!message.contains(tag)) {
+ if (!isMinified) {
+ Expect.fail('"$message" should contain "$tag"');
+ }
+ // When minified we will accept quoted names up to 3 characters.
+ Expect.isTrue(
+ message.contains(new RegExp("'..?.?'")),
+ '"$message" should contain minified name');
+ }
+ }
+
+ // We use ArgumentError.value since it prints the value using
+ // Error.safeToString.
+ var e1 = new ArgumentError.value(c);
+ var s1 = '$e1';
+ Expect.isTrue(s1.contains(instanceString),
+ 'Error message "$s1" should contain "$instanceString"');
+
+ // Instance method tear-off.
+ var e2 = new ArgumentError.value(confuse(c).instanceMethod);
+ var s2 = '$e2';
+ // Instance method tear-off should contain instance string.
+ Expect.isTrue(s2.contains(instanceString),
+ 'Error message "$s2" should contain "$instanceString"');
+ // Instance method tear-off should also name the method.
+ checkContains(s2.replaceAll(instanceString, '*'), "instanceMethod");
+
+ // Top level tear-off.
+ var e3 = new ArgumentError.value(confuse);
+ var s3 = '$e3';
+ checkContains(s3, "confuse");
+ checkContains('$confuse', "confuse");
+
+ // Static method tear-off.
+ var e4 = new ArgumentError.value(CCCC.staticMethod);
+ var s4 = '$e4';
+ checkContains(s4, "staticMethod");
+ checkContains('${CCCC.staticMethod}', "staticMethod");
+
+ // Local anonymous closure.
+ var anon = () => c;
+ var e5 = new ArgumentError.value(anon);
+ var s5 = '$e5';
+ checkContains(s5, "main_closure");
+ checkContains('$anon', "main_closure");
+
+ // Local named closure.
+ localFunction() => c;
+ var e6 = new ArgumentError.value(localFunction);
+ var s6 = '$e6';
+ checkContains(s6, "localFunction");
+ checkContains('$localFunction', "localFunction");
+}

Powered by Google App Engine
This is Rietveld 408576698