| Index: pkg/unittest/lib/compact_vm_config.dart
 | 
| diff --git a/pkg/unittest/lib/compact_vm_config.dart b/pkg/unittest/lib/compact_vm_config.dart
 | 
| deleted file mode 100644
 | 
| index aee1405da0b7ed912c1c820bcd9d97ce88d40359..0000000000000000000000000000000000000000
 | 
| --- a/pkg/unittest/lib/compact_vm_config.dart
 | 
| +++ /dev/null
 | 
| @@ -1,216 +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.
 | 
| -
 | 
| -/// A test configuration that generates a compact 1-line progress bar. The bar
 | 
| -/// is updated in-place before and after each test is executed. If all tests
 | 
| -/// pass, only a couple of lines are printed in the terminal. If a test fails,
 | 
| -/// the failure is shown and the progress bar continues to be updated below it.
 | 
| -library unittest.compact_vm_config;
 | 
| -
 | 
| -import 'dart:async';
 | 
| -import 'dart:io';
 | 
| -import 'dart:isolate';
 | 
| -
 | 
| -import 'unittest.dart';
 | 
| -import 'src/utils.dart';
 | 
| -import 'vm_config.dart';
 | 
| -
 | 
| -const String _GREEN = '\u001b[32m';
 | 
| -const String _RED = '\u001b[31m';
 | 
| -const String _NONE = '\u001b[0m';
 | 
| -
 | 
| -const int MAX_LINE = 80;
 | 
| -
 | 
| -class CompactVMConfiguration extends VMConfiguration {
 | 
| -  // The VM won't shut down if a receive port is open. Use this to make sure
 | 
| -  // we correctly wait for asynchronous tests.
 | 
| -  ReceivePort _receivePort;
 | 
| -
 | 
| -  DateTime _start;
 | 
| -  Set<int> _passing = new Set();
 | 
| -  Set<int> _failing = new Set();
 | 
| -  int get _pass => _passing.length;
 | 
| -  int get _fail => _failing.length;
 | 
| -
 | 
| -  void onInit() {
 | 
| -    _receivePort = new ReceivePort();
 | 
| -    // Override and don't call the superclass onInit() to avoid printing the
 | 
| -    // "unittest-suite-..." boilerplate.
 | 
| -  }
 | 
| -
 | 
| -  void onStart() {
 | 
| -    _start = new DateTime.now();
 | 
| -  }
 | 
| -
 | 
| -  void onTestStart(TestCase test) {
 | 
| -    super.onTestStart(test);
 | 
| -    _progressLine(test.description);
 | 
| -  }
 | 
| -
 | 
| -  void onTestResult(TestCase test) {
 | 
| -    super.onTestResult(test);
 | 
| -    if (test.result == PASS) {
 | 
| -      _passing.add(test.id);
 | 
| -      _progressLine(test.description);
 | 
| -    } else {
 | 
| -      _failing.add(test.id);
 | 
| -      _progressLine(test.description);
 | 
| -      _print();
 | 
| -      if (test.message != '') {
 | 
| -        _print(indent(test.message));
 | 
| -      }
 | 
| -
 | 
| -      if (test.stackTrace != null) {
 | 
| -        _print(indent(test.stackTrace.toString()));
 | 
| -      }
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  void onTestResultChanged(TestCase test) {
 | 
| -    _passing.remove(test.id);
 | 
| -    _failing.add(test.id);
 | 
| -    _progressLine(test.description);
 | 
| -    _print();
 | 
| -    if (test.message != '') {
 | 
| -      _print(indent(test.message));
 | 
| -    }
 | 
| -
 | 
| -    if (test.stackTrace != null) {
 | 
| -      _print(indent(test.stackTrace.toString()));
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  void onDone(bool success) {
 | 
| -    // Override and don't call the superclass onDone() to avoid printing the
 | 
| -    // "unittest-suite-..." boilerplate.
 | 
| -    Future.wait([stdout.close(), stderr.close()]).then((_) {
 | 
| -      _receivePort.close();
 | 
| -      exit(success ? 0 : 1);
 | 
| -    });
 | 
| -  }
 | 
| -
 | 
| -  void onSummary(int passed, int failed, int errors, List<TestCase> results,
 | 
| -      String uncaughtError) {
 | 
| -    var success = false;
 | 
| -    if (passed == 0 && failed == 0 && errors == 0 && uncaughtError == null) {
 | 
| -      _print('\nNo tests ran.');
 | 
| -    } else if (failed == 0 && errors == 0 && uncaughtError == null) {
 | 
| -      _progressLine('All tests passed!', _NONE);
 | 
| -      _print();
 | 
| -      success = true;
 | 
| -    } else {
 | 
| -      _progressLine('Some tests failed.', _RED);
 | 
| -      _print();
 | 
| -      if (uncaughtError != null) {
 | 
| -        _print('Top-level uncaught error: $uncaughtError');
 | 
| -      }
 | 
| -      _print('$passed PASSED, $failed FAILED, $errors ERRORS');
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  int _lastLength = 0;
 | 
| -
 | 
| -  final int _nonVisiblePrefix = 1 + _GREEN.length + _NONE.length;
 | 
| -
 | 
| -  void _progressLine(String message, [String color = _NONE]) {
 | 
| -    var duration = (new DateTime.now()).difference(_start);
 | 
| -    var buffer = new StringBuffer();
 | 
| -    // \r moves back to the beginning of the current line.
 | 
| -    buffer.write('\r${_timeString(duration)} ');
 | 
| -    buffer.write(_GREEN);
 | 
| -    buffer.write('+');
 | 
| -    buffer.write(_pass);
 | 
| -    buffer.write(_NONE);
 | 
| -    if (_fail != 0) {
 | 
| -      buffer.write(_RED);
 | 
| -      buffer.write(' -');
 | 
| -      buffer.write(_fail);
 | 
| -      buffer.write(_NONE);
 | 
| -    }
 | 
| -    buffer.write(': ');
 | 
| -    buffer.write(color);
 | 
| -
 | 
| -    // Ensure the line fits under MAX_LINE. [buffer] includes the color escape
 | 
| -    // sequences too. Because these sequences are not visible characters, we
 | 
| -    // make sure they are not counted towards the limit.
 | 
| -    int nonVisible = _nonVisiblePrefix + color.length  +
 | 
| -        (_fail != 0 ? (_RED.length + _NONE.length) : 0);
 | 
| -    int len = buffer.length - nonVisible;
 | 
| -    var mx = MAX_LINE - len;
 | 
| -    buffer.write(_snippet(message, MAX_LINE - len));
 | 
| -    buffer.write(_NONE);
 | 
| -
 | 
| -    // Pad the rest of the line so that it looks erased.
 | 
| -    len = buffer.length - nonVisible - _NONE.length;
 | 
| -    if (len > _lastLength) {
 | 
| -      _lastLength = len;
 | 
| -    } else {
 | 
| -      while (len < _lastLength) {
 | 
| -        buffer.write(' ');
 | 
| -        _lastLength--;
 | 
| -      }
 | 
| -    }
 | 
| -    stdout.write(buffer.toString());
 | 
| -  }
 | 
| -
 | 
| -  String _padTime(int time) =>
 | 
| -    (time == 0) ? '00' : ((time < 10) ? '0$time' : '$time');
 | 
| -
 | 
| -  String _timeString(Duration duration) {
 | 
| -    var min = duration.inMinutes;
 | 
| -    var sec = duration.inSeconds % 60;
 | 
| -    return '${_padTime(min)}:${_padTime(sec)}';
 | 
| -  }
 | 
| -
 | 
| -  String _snippet(String text, int maxLength) {
 | 
| -    // Return the full message if it fits
 | 
| -    if (text.length <= maxLength) return text;
 | 
| -
 | 
| -    // If we can fit the first and last three words, do so.
 | 
| -    var words = text.split(' ');
 | 
| -    if (words.length > 1) {
 | 
| -      int i = words.length;
 | 
| -      var len = words.first.length + 4;
 | 
| -      do {
 | 
| -        len += 1 + words[--i].length;
 | 
| -      } while (len <= maxLength && i > 0);
 | 
| -      if (len > maxLength || i == 0) i++;
 | 
| -      if (i < words.length - 4) {
 | 
| -        // Require at least 3 words at the end.
 | 
| -        var buffer = new StringBuffer();
 | 
| -        buffer.write(words.first);
 | 
| -        buffer.write(' ...');
 | 
| -        for (; i < words.length; i++) {
 | 
| -          buffer.write(' ');
 | 
| -          buffer.write(words[i]);
 | 
| -        }
 | 
| -        return buffer.toString();
 | 
| -      }
 | 
| -    }
 | 
| -
 | 
| -    // Otherwise truncate to return the trailing text, but attempt to start at
 | 
| -    // the beginning of a word.
 | 
| -    var res = text.substring(text.length - maxLength + 4);
 | 
| -    var firstSpace = res.indexOf(' ');
 | 
| -    if (firstSpace > 0) {
 | 
| -      res = res.substring(firstSpace);
 | 
| -    }
 | 
| -    return '...$res';
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -// TODO(sigmund): delete when dartbug.com/17269 is fixed (use `print` instead).
 | 
| -_print([value = '']) => stdout.write('$value\n');
 | 
| -
 | 
| -void useCompactVMConfiguration() {
 | 
| -  // If the test is running on the Dart buildbots, we don't want to use this
 | 
| -  // config since it's output may not be what the bots expect.
 | 
| -  if (Platform.environment['LOGNAME'] == 'chrome-bot') {
 | 
| -    return;
 | 
| -  }
 | 
| -
 | 
| -  unittestConfiguration = _singleton;
 | 
| -}
 | 
| -
 | 
| -final _singleton = new CompactVMConfiguration();
 | 
| 
 |