Index: tests/language/stacktrace_demangle_ctors_test.dart |
diff --git a/tests/language/stacktrace_demangle_ctors_test.dart b/tests/language/stacktrace_demangle_ctors_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..697ed127675e7b14d033f37c877f5ed1ed77dd97 |
--- /dev/null |
+++ b/tests/language/stacktrace_demangle_ctors_test.dart |
@@ -0,0 +1,59 @@ |
+// Copyright (c) 2017, 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 stack traces are properly demangled in constructors (#28740). |
+ |
+import "package:expect/expect.dart"; |
+ |
+class SomeClass { |
+ SomeClass.namedConstructor() { |
+ throw new Exception(); |
+ } |
+ |
+ SomeClass() { |
+ throw new Exception(); |
+ } |
+ |
+ factory SomeClass.useFactory() { |
+ throw new Exception(); |
+ } |
+} |
+ |
+class OnlyHasFactory { |
+ factory OnlyHasFactory() { |
+ throw new Exception(); |
+ } |
+} |
+ |
+void main() { |
+ try { |
+ new SomeClass(); |
+ } on Exception catch (e, st) { |
+ final stString = st.toString(); |
+ Expect.isTrue(stString.contains("new SomeClass")); |
+ Expect.isFalse(stString.contains("SomeClass.")); |
+ } |
+ |
+ try { |
+ new SomeClass.namedConstructor(); |
+ } on Exception catch (e, st) { |
+ final stString = st.toString(); |
+ Expect.isTrue(stString.contains("new SomeClass.namedConstructor")); |
+ } |
+ |
+ try { |
+ new OnlyHasFactory(); |
+ } on Exception catch (e, st) { |
+ final stString = st.toString(); |
+ Expect.isTrue(stString.contains("new OnlyHasFactory")); |
+ Expect.isFalse(stString.contains("OnlyHasFactory.")); |
+ } |
+ |
+ try { |
+ new SomeClass.useFactory(); |
+ } on Exception catch (e, st) { |
+ final stString = st.toString(); |
+ Expect.isTrue(stString.contains("new SomeClass.useFactory")); |
+ } |
+} |