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

Unified Diff: bin/unittest.dart

Issue 933083002: Add a test runner executable. (Closed) Base URL: git@github.com:dart-lang/unittest@master
Patch Set: Code review changes Created 5 years, 10 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 | « .status ('k') | lib/src/console_reporter.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bin/unittest.dart
diff --git a/bin/unittest.dart b/bin/unittest.dart
new file mode 100644
index 0000000000000000000000000000000000000000..32379360ede09b5aed01667ce2a31f0a29586d20
--- /dev/null
+++ b/bin/unittest.dart
@@ -0,0 +1,110 @@
+// 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.
+
+library unittest.unittest;
+
+import 'dart:async';
+import 'dart:io';
+import 'dart:isolate';
+
+import 'package:args/args.dart';
+import 'package:stack_trace/stack_trace.dart';
+
+import 'package:unittest/src/console_reporter.dart';
+import 'package:unittest/src/exit_codes.dart' as exit_codes;
+import 'package:unittest/src/load_exception.dart';
+import 'package:unittest/src/loader.dart';
+import 'package:unittest/src/utils.dart';
+
+/// The argument parser used to parse the executable arguments.
+final _parser = new ArgParser();
+
+void main(List<String> args) {
+ _parser.addFlag("help", abbr: "h", negatable: false,
+ help: "Shows this usage information.");
+ _parser.addOption("package-root", hide: true);
+
+ var options;
+ try {
+ options = _parser.parse(args);
+ } on FormatException catch (error) {
+ _printUsage(error.message);
+ exitCode = exit_codes.usage;
+ return;
+ }
+
+ if (options["help"]) {
+ _printUsage();
+ return;
+ }
+
+ var loader = new Loader(packageRoot: options["package-root"]);
+ new Future.sync(() {
+ var paths = options.rest;
+ if (paths.isEmpty) {
+ if (!new Directory("test").existsSync()) {
+ throw new LoadException("test",
+ "No test files were passed and the default directory doesn't "
+ "exist.");
+ }
+ paths = ["test"];
+ }
+
+ return Future.wait(paths.map((path) {
+ if (new Directory(path).existsSync()) return loader.loadDir(path);
+ if (new File(path).existsSync()) return loader.loadFile(path);
+ throw new LoadException(path, 'Does not exist.');
+ }));
+ }).then((suites) {
+ var reporter = new ConsoleReporter(flatten(suites));
+ return reporter.run().then((success) {
+ exitCode = success ? 0 : 1;
+ }).whenComplete(() => reporter.close());
+ }).catchError((error, stackTrace) {
+ if (error is LoadException) {
+ // TODO(nweiz): color this message?
+ stderr.writeln(getErrorMessage(error));
+
+ // Only print stack traces for load errors that come from the user's
+ if (error.innerError is! IOException &&
+ error.innerError is! IsolateSpawnException &&
+ error.innerError is! String) {
+ stderr.write(terseChain(stackTrace));
+ }
+
+ exitCode = error.innerError is IOException
+ ? exit_codes.io
+ : exit_codes.data;
+ } else {
+ stderr.writeln(getErrorMessage(error));
+ stderr.writeln(new Trace.from(stackTrace).terse);
+ stderr.writeln(
+ "This is an unexpected error. Please file an issue at "
+ "http://github.com/dart-lang/unittest\n"
+ "with the stack trace and instructions for reproducing the error.");
+ exitCode = exit_codes.software;
+ }
+ }).whenComplete(() => loader.close());
+}
+
+/// Print usage information for this command.
+///
+/// If [error] is passed, it's used in place of the usage message and the whole
+/// thing is printed to stderr instead of stdout.
+void _printUsage([String error]) {
+ var output = stdout;
+
+ var message = "Runs tests in this package.";
+ if (error != null) {
+ message = error;
+ output = stderr;
+ }
+
+ output.write("""$message
+
+Usage: pub run unittest:unittest [files or directories...]
+
+${_parser.usage}
+""");
+}
« no previous file with comments | « .status ('k') | lib/src/console_reporter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698