// Copyright (c) 2011, 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. package com.google.dart.runner; import com.google.dart.compiler.CommandLineOptions; import com.google.dart.compiler.CommandLineOptions.TestRunnerOptions; import com.google.dart.compiler.DartCompiler; import com.google.dart.compiler.LibrarySource; import com.google.dart.compiler.UnitTestBatchRunner; import com.google.dart.compiler.UnitTestBatchRunner.Invocation; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.io.PrintStream; import java.util.ArrayList; import java.util.List; /** * Runs dart programs.
* The command-line interface is similar to the VM's command line interface. *
*/ public class TestRunner { public static void main(String[] args) { try { boolean runBatch = false; TestRunnerOptions options = processCommandLineOptions(args); if (options.shouldBatch()) { runBatch = true; if (args.length > 1) { System.err.println("(Extra arguments specified with -batch ignored.)"); } } if (runBatch) { UnitTestBatchRunner.runAsBatch(args, new Invocation() { @Override public boolean invoke(String[] args) throws Throwable { try { throwingMain(args, System.out, System.err); } catch (RunnerError e) { System.out.println(e.getLocalizedMessage()); return false; } return true; } }); } else { throwingMain(args, System.out, System.err); } } catch (RunnerError e) { System.err.println(e.getLocalizedMessage()); System.exit(1); } catch (Throwable e) { e.printStackTrace(); DartCompiler.crash(); } } private static void printUsageAndThrow(CmdLineParser cmdLineParser, String reason) throws RunnerError { StringBuilder usage = new StringBuilder(); usage.append(reason); usage.append("\n"); usage.append("Usage: "); usage.append(System.getProperty("com.google.dart.runner.progname", TestRunner.class.getSimpleName())); usage.append(" [] []\n"); usage.append("\n"); OutputStream s = new ByteArrayOutputStream(); if (cmdLineParser == null) { cmdLineParser = new CmdLineParser(new TestRunnerOptions()); } cmdLineParser.printUsage(s); usage.append(s); throw new RunnerError(usage.toString()); } private static TestRunnerOptions processCommandLineOptions(String[] args) throws RunnerError { CmdLineParser cmdLineParser = null; TestRunnerOptions parsedOptions = null; try { parsedOptions = new TestRunnerOptions(); cmdLineParser = CommandLineOptions.parse(args, parsedOptions); if (args.length == 0 || parsedOptions.showHelp()) { printUsageAndThrow(cmdLineParser, ""); System.exit(1); } } catch (CmdLineException e) { printUsageAndThrow(cmdLineParser, e.getLocalizedMessage()); System.exit(1); } assert parsedOptions != null; return parsedOptions; } public static void throwingMain(String[] args, PrintStream stdout, PrintStream stderr) throws RunnerError { TestRunnerOptions options = processCommandLineOptions(args); List imports = new ArrayList(); DartRunner.throwingMain(options, args, imports, stdout, stderr); } }