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

Unified Diff: sdk/lib/_internal/pub/test/command_line_config.dart

Issue 18400002: Roll back "Use package:stack_trace in unittest." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 6 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
« no previous file with comments | « pkg/unittest/pubspec.yaml ('k') | tests/standalone/standalone.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/pub/test/command_line_config.dart
diff --git a/sdk/lib/_internal/pub/test/command_line_config.dart b/sdk/lib/_internal/pub/test/command_line_config.dart
index 0801384fbe4bee0390543a199dbb00cac11b759b..bdceafb80ba6e21702d434f9514943c64c117b66 100644
--- a/sdk/lib/_internal/pub/test/command_line_config.dart
+++ b/sdk/lib/_internal/pub/test/command_line_config.dart
@@ -41,9 +41,7 @@ class CommandLineConfiguration extends Configuration {
print(_indent(testCase.message));
}
- if (testCase.stackTrace != null) {
- print(_indent(testCase.stackTrace.toString()));
- }
+ _printStackTrace(testCase.stackTrace);
super.onTestResult(testCase);
}
@@ -70,4 +68,93 @@ class CommandLineConfiguration extends Configuration {
void onDone(bool success) {
if (!success) exit(1);
}
+
+ void _printStackTrace(String stackTrace) {
+ if (stackTrace == null || stackTrace == '') return;
+
+ print('');
+
+ // Parse out each stack entry.
+ var stack = [];
+ for (var line in stackTrace.split('\n')) {
+ if (line.trim() == '') continue;
+ stack.add(new _StackFrame(line));
+ }
+
+ if (stack.length == 0) return;
+
+ // Figure out the longest path so we know how much to pad.
+ int longest = stack.map((frame) => frame.location.length).reduce(math.max);
+
+ // Print out the stack trace nicely formatted.
+ for (var frame in stack) {
+ print(' ${_padLeft(frame.location, longest)} ${frame.member}');
+ }
+
+ print('');
+ }
+
+ String _padLeft(String string, int length) {
+ if (string.length >= length) return string;
+
+ var result = new StringBuffer();
+ result.write(string);
+ for (var i = 0; i < length - string.length; i++) {
+ result.write(' ');
+ }
+
+ return result.toString();
+ }
+
+ String _indent(String str) =>
+ str.replaceAll(new RegExp("^", multiLine: true), " ");
+}
+
+class _StackFrame {
+ static final fileRegExp = new RegExp(
+ r'#\d+\s+(.*) \(file://(/.+):(\d+):(\d+)\)');
+ static final coreRegExp = new RegExp(r'#\d+\s+(.*) \((.+):(\d+):(\d+)\)');
+
+ /// If `true`, then this stack frame is for a library built into Dart and
+ /// not a regular file path.
+ final bool isCore;
+
+ /// The path to the library or the library name if a core library.
+ String library;
+
+ /// The line number.
+ final String line;
+
+ /// The column number.
+ final String column;
+
+ /// The member where the error occurred.
+ final String member;
+
+ /// A formatted description of the code location.
+ String get location => '$library $line:$column';
+
+ _StackFrame._(this.isCore, this.library, this.line, this.column, this.member);
+
+ factory _StackFrame(String text) {
+ var match = fileRegExp.firstMatch(text);
+ var isCore = false;
+
+ if (match == null) {
+ match = coreRegExp.firstMatch(text);
+ if (match == null) {
+ throw new FormatException("Couldn't parse stack trace line '$text'.");
+ }
+ isCore = true;
+ }
+
+ var library = match[2];
+ if (!isCore) {
+ // Make the library path relative to the entrypoint.
+ library = path.relative(library);
+ }
+
+ var member = match[1].replaceAll("<anonymous closure>", _lambda);
+ return new _StackFrame._(isCore, library, match[3], match[4], member);
+ }
}
« no previous file with comments | « pkg/unittest/pubspec.yaml ('k') | tests/standalone/standalone.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698