Index: utils/tests/pub/command_line_config.dart |
diff --git a/utils/tests/pub/command_line_config.dart b/utils/tests/pub/command_line_config.dart |
deleted file mode 100644 |
index 47c68a9bef5423aba7567b289bec4b6b9346b47d..0000000000000000000000000000000000000000 |
--- a/utils/tests/pub/command_line_config.dart |
+++ /dev/null |
@@ -1,171 +0,0 @@ |
-// Copyright (c) 2013, 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 command_line_config; |
- |
-import 'dart:io'; |
-import 'dart:math' as math; |
- |
-import 'package:pathos/path.dart' as path; |
-import 'package:unittest/unittest.dart'; |
-import '../../pub/utils.dart'; |
- |
-/// Gets a "special" string (ANSI escape or Unicode). On Windows, returns |
-/// something else since those aren't supported. |
-String _getSpecial(String color, [String onWindows = '']) { |
- // No ANSI escapes on windows. |
- if (Platform.operatingSystem == 'windows') return onWindows; |
- return color; |
-} |
- |
-/// Pretty Unicode characters! |
-final _checkbox = _getSpecial('\u2713', 'PASS'); |
-final _ballotX = _getSpecial('\u2717', 'FAIL'); |
-final _lambda = _getSpecial('\u03bb', '<fn>'); |
- |
-final _green = _getSpecial('\u001b[32m'); |
-final _red = _getSpecial('\u001b[31m'); |
-final _magenta = _getSpecial('\u001b[35m'); |
-final _none = _getSpecial('\u001b[0m'); |
- |
-/// A custom unittest configuration for running the pub tests from the |
-/// command-line and generating human-friendly output. |
-class CommandLineConfiguration extends Configuration { |
- void onInit() { |
- // Do nothing. Overridden to prevent the base class from printing. |
- } |
- |
- void onTestResult(TestCase testCase) { |
- var result; |
- switch (testCase.result) { |
- case PASS: result = '$_green$_checkbox$_none'; break; |
- case FAIL: result = '$_red$_ballotX$_none'; break; |
- case ERROR: result = '$_magenta?$_none'; break; |
- } |
- print('$result ${testCase.description}'); |
- |
- if (testCase.message != '') { |
- print(_indent(testCase.message)); |
- } |
- |
- _printStackTrace(testCase.stackTrace); |
- |
- super.onTestResult(testCase); |
- } |
- |
- void onSummary(int passed, int failed, int errors, List<TestCase> results, |
- String uncaughtError) { |
- var success = false; |
- if (uncaughtError != null) { |
- print('Top-level uncaught error: $uncaughtError'); |
- } else if (errors != 0) { |
- print('${_green}$passed${_none} passed, ${_red}$failed${_none} failed, ' |
- '${_magenta}$errors${_none} errors.'); |
- } else if (failed != 0) { |
- print('${_green}$passed${_none} passed, ${_red}$failed${_none} ' |
- 'failed.'); |
- } else if (passed == 0) { |
- print('No tests found.'); |
- } else { |
- print('All ${_green}$passed${_none} tests passed!'); |
- success = true; |
- } |
- } |
- |
- 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) { |
- // TODO(nweiz): Use this simpler code once issue 2980 is fixed. |
- // return str.replaceAll(new RegExp("^", multiLine: true), " "); |
- return str.split("\n").map((line) => " $line").join("\n"); |
- } |
-} |
- |
-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); |
- } |
-} |