| Index: utils/testrunner/run_pipeline.dart
|
| ===================================================================
|
| --- utils/testrunner/run_pipeline.dart (revision 21957)
|
| +++ utils/testrunner/run_pipeline.dart (working copy)
|
| @@ -4,8 +4,10 @@
|
|
|
| /** The default pipeline code for running a test file. */
|
| library pipeline;
|
| +import 'dart:async';
|
| +import 'dart:io';
|
| import 'dart:isolate';
|
| -import 'dart:io';
|
| +import 'dart:math';
|
| part 'pipeline_utils.dart';
|
|
|
| /**
|
| @@ -49,16 +51,26 @@
|
| /** Number of attempts we will make to start the HTTP server. */
|
| const int MAX_SERVER_TRIES = 10;
|
|
|
| +/** Pipeline output. */
|
| +List stdout;
|
| +
|
| +/** Pipeline errors. */
|
| +List stderr;
|
| +
|
| +/** Directory where test wrappers are created. */
|
| +String tmpDir;
|
| +
|
| void main() {
|
| port.receive((cfg, replyPort) {
|
| config = cfg;
|
| + stdout = new List();
|
| + stderr = new List();
|
| initPipeline(replyPort);
|
| startHTTPServerStage();
|
| });
|
| }
|
|
|
| /** Initial pipeline stage - starts the HTTP server, if appropriate. */
|
| -
|
| startHTTPServerStage() {
|
| if (config["server"]) {
|
| serverPath = config["testfile"];
|
| @@ -86,7 +98,8 @@
|
| serverPort = int.parse(config["port"]);
|
| // Start the HTTP server.
|
| serverId = startProcess(config["dart"],
|
| - [ serverPath, '--port=$serverPort', '--root=$serverRoot']);
|
| + [ serverPath, '--port=$serverPort', '--root=$serverRoot'],
|
| + stdout, stderr);
|
| }
|
| }
|
| }
|
| @@ -100,6 +113,7 @@
|
| '--root=$serverRoot');
|
| serverId = startProcess(config["dart"],
|
| [ serverPath, '--port=$serverPort', '--root=$serverRoot'],
|
| + stdout, stderr,
|
| (line) {
|
| if (line.startsWith('Server listening')) {
|
| wrapStage();
|
| @@ -115,15 +129,9 @@
|
|
|
| /** Initial pipeline stage - generates Dart and HTML wrapper files. */
|
| wrapStage() {
|
| - var tmpDir = config["tempdir"];
|
| + tmpDir = config["targetDir"];
|
| var testFile = config["testfile"];
|
|
|
| - // Make sure the temp dir exists.
|
| - var d = new Directory(tmpDir);
|
| - if (!d.existsSync()) {
|
| - d.createSync();
|
| - }
|
| -
|
| // Generate names for the generated wrapper files.
|
| tempDartFile = createTempName(tmpDir, testFile, '.dart');
|
| if (config["runtime"] != 'vm') {
|
| @@ -146,50 +154,52 @@
|
|
|
| if (config["layout"]) {
|
| directives = '''
|
| - import 'dart:uri';
|
| - import 'dart:io';
|
| - import 'dart:math';
|
| - part '${config["runnerDir"]}/layout_test_controller.dart';
|
| +import 'dart:async';
|
| +import 'dart:io';
|
| +import 'dart:math';
|
| +import 'dart:uri';
|
| +part '${normalizePath('${config["runnerDir"]}/layout_test_controller.dart')}';
|
| ''';
|
| extras = '''
|
| - sourceDir = '${config["expectedDirectory"]}';
|
| - baseUrl = 'file://$tempHtmlFile';
|
| - tprint = (msg) => print('###\$msg');
|
| - notifyDone = (e) => exit(e);
|
| + baseUrl = 'file://${normalizePath('$tempHtmlFile')}';
|
| + tprint = (msg) => print('###\$msg');
|
| + notifyDone = (e) => exit(e);
|
| ''';
|
| } else if (config["runtime"] == "vm") {
|
| directives = '''
|
| - import 'dart:io';
|
| - import 'dart:isolate';
|
| - import '${config["unittest"]}' as unittest;
|
| - import '${config["testfile"]}' as test;
|
| - part '${config["runnerDir"]}/standard_test_runner.dart';
|
| +import 'dart:async';
|
| +import 'dart:io';
|
| +import 'dart:isolate';
|
| +import 'package:unittest/unittest.dart';
|
| +import '${normalizePath('${config["testfile"]}')}' as test;
|
| +part '${normalizePath('${config["runnerDir"]}/standard_test_runner.dart')}';
|
| ''';
|
| extras = '''
|
| - includeFilters = ${config["include"]};
|
| - excludeFilters = ${config["exclude"]};
|
| - tprint = (msg) => print('###\$msg');
|
| - notifyDone = (e) {};
|
| - unittest.testState["port"] = $serverPort;
|
| + includeFilters = ${config["include"]};
|
| + excludeFilters = ${config["exclude"]};
|
| + tprint = (msg) => print('###\$msg');
|
| + notifyDone = (e) { exit(e); };
|
| + testState["port"] = $serverPort;
|
| ''';
|
| } else {
|
| directives = '''
|
| - import 'dart:html';
|
| - import 'dart:isolate';
|
| - import '${config["unittest"]}' as unittest;
|
| - import '${config["testfile"]}' as test;
|
| - part '${config["runnerDir"]}/standard_test_runner.dart';
|
| +import 'dart:async';
|
| +import 'dart:html';
|
| +import 'dart:isolate';
|
| +import 'package:unittest/unittest.dart';
|
| +import '${normalizePath('${config["testfile"]}')}' as test;
|
| +part '${normalizePath('${config["runnerDir"]}/standard_test_runner.dart')}';
|
| ''';
|
| extras = '''
|
| - includeFilters = ${config["include"]};
|
| - excludeFilters = ${config["exclude"]};
|
| - tprint = (msg) => query('#console').addText('###\$msg\\n');
|
| - notifyDone = (e) => window.postMessage('done', '*');
|
| - unittest.testState["port"] = $serverPort;
|
| + includeFilters = ${config["include"]};
|
| + excludeFilters = ${config["exclude"]};
|
| + tprint = (msg) => query('#console').appendText('###\$msg\\n');
|
| + notifyDone = (e) => window.postMessage('done', '*');
|
| + testState["port"] = $serverPort;
|
| ''';
|
| }
|
|
|
| - var action = 'process(test.main, unittest.runTests)';
|
| + var action = 'process(test.main, runTests)';
|
| if (config["layout-text"]) {
|
| action = 'runTextLayoutTests()';
|
| } else if (config["layout-pixel"]) {
|
| @@ -204,44 +214,44 @@
|
|
|
| logMessage('Creating $tempDartFile');
|
| writeFile(tempDartFile, '''
|
| - library test_controller;
|
| - $directives
|
| +library test_controller;
|
| +$directives
|
|
|
| - main() {
|
| - immediate = ${config["immediate"]};
|
| - includeTime = ${config["time"]};
|
| - passFormat = '${config["pass-format"]}';
|
| - failFormat = '${config["fail-format"]}';
|
| - errorFormat = '${config["error-format"]}';
|
| - listFormat = '${config["list-format"]}';
|
| - regenerate = ${config["regenerate"]};
|
| - summarize = ${config["summary"]};
|
| - testfile = '$testFile';
|
| - drt = '${config["drt"]}';
|
| - $extras
|
| - $action;
|
| - }
|
| +main() {
|
| + immediate = ${config["immediate"]};
|
| + includeTime = ${config["time"]};
|
| + passFormat = '${config["pass-format"]}';
|
| + failFormat = '${config["fail-format"]}';
|
| + errorFormat = '${config["error-format"]}';
|
| + listFormat = '${config["list-format"]}';
|
| + regenerate = ${config["regenerate"]};
|
| + summarize = ${config["summary"]};
|
| + testfile = '${testFile.replaceAll("\\","\\\\")}';
|
| + drt = '${config["drt"].replaceAll("\\","\\\\")}';
|
| +$extras
|
| + $action;
|
| +}
|
| ''');
|
|
|
| // Create the child wrapper for layout tests.
|
| if (config["layout"]) {
|
| logMessage('Creating $tempChildDartFile');
|
| writeFile(tempChildDartFile, '''
|
| - library layout_test;
|
| - import 'dart:math';
|
| - import 'dart:isolate';
|
| - import 'dart:html';
|
| - import 'dart:uri';
|
| - import '${config["unittest"]}' as 'unittest' ;
|
| - import '$testFile', prefix: 'test' ;
|
| - part '${config["runnerDir"]}/layout_test_runner.dart';
|
| +library layout_test;
|
| +import 'dart:math';
|
| +import 'dart:isolate';
|
| +import 'dart:html';
|
| +import 'dart:uri';
|
| +import 'package:unittest/unittest.dart' as unittest;
|
| +import '${normalizePath('$testFile')}' as test;
|
| +part '${normalizePath('${config["runnerDir"]}/layout_test_runner.dart')}';
|
|
|
| - main() {
|
| - includeFilters = ${config["include"]};
|
| - excludeFilters = ${config["exclude"]};
|
| - unittest.testState["port"] = $serverPort;
|
| - runTests(test.main);
|
| - }
|
| +main() {
|
| + includeFilters = ${config["include"]};
|
| + excludeFilters = ${config["exclude"]};
|
| + unittest.testState["port"] = $serverPort;
|
| + runTests(test.main);
|
| +}
|
| ''');
|
| }
|
|
|
| @@ -258,7 +268,7 @@
|
| sourceFile = tempDartFile;
|
| scriptFile = isJavascript ? tempJsFile : tempDartFile;
|
| bodyElements = '<div id="container"></div><pre id="console"></pre>';
|
| - runAsText = "window.testRunner.dumpAsText();";
|
| + runAsText = "testRunner.dumpAsText();";
|
| }
|
| scriptType = isJavascript ? 'text/javascript' : 'application/dart';
|
|
|
| @@ -272,13 +282,14 @@
|
| <title>$testFile</title>
|
| <link rel="stylesheet" href="${config["runnerDir"]}/testrunner.css">
|
| <script type='text/javascript'>
|
| - if (window.testRunner) {
|
| + var testRunner = window.testRunner || window.layoutTestController;
|
| + if (testRunner) {
|
| function handleMessage(m) {
|
| if (m.data == 'done') {
|
| - window.testRunner.notifyDone();
|
| + testRunner.notifyDone();
|
| }
|
| }
|
| - window.testRunner.waitUntilDone();
|
| + testRunner.waitUntilDone();
|
| $runAsText
|
| window.addEventListener("message", handleMessage, false);
|
| }
|
| @@ -291,9 +302,6 @@
|
| $bodyElements
|
| <script type='$scriptType' src='$scriptFile'></script>
|
| </script>
|
| - <script
|
| -src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js">
|
| - </script>
|
| </body>
|
| </html>
|
| ''');
|
| @@ -305,14 +313,15 @@
|
| /** Second stage of pipeline - compiles Dart to Javascript if needed. */
|
| compileStage(isJavascript) {
|
| if (isJavascript) { // Compile the Dart file.
|
| + var cmd = config["dart2js"];
|
| + var input = sourceFile.replaceAll('/', Platform.pathSeparator);
|
| + var output = scriptFile.replaceAll('/', Platform.pathSeparator);
|
| if (config["checked"]) {
|
| - runCommand(config["dart2js"],
|
| - [ '--enable_checked_mode', '--out=$scriptFile', '$sourceFile' ]).
|
| - then(runTestStage);
|
| + runCommand(cmd, [ '-c', '-o$output', '$input' ], stdout, stderr)
|
| + .then(runTestStage);
|
| } else {
|
| - runCommand(config["dart2js"],
|
| - [ '--out=$scriptFile', '$sourceFile' ]).
|
| - then(runTestStage);
|
| + runCommand(cmd, [ '-o$output', '$input' ], stdout, stderr)
|
| + .then(runTestStage);
|
| }
|
| } else {
|
| runTestStage(0);
|
| @@ -334,7 +343,7 @@
|
| cmd = config["drt"];
|
| args = [ '--no-timeout', tempHtmlFile ];
|
| }
|
| - runCommand(cmd, args, config["timeout"]).then(cleanupStage);
|
| + runCommand(cmd, args, stdout, stderr, config["timeout"]).then(cleanupStage);
|
| }
|
|
|
| /**
|
| @@ -346,12 +355,15 @@
|
| stopProcess(serverId);
|
| }
|
|
|
| - if (!config["keep-files"]) { // Remove the temporary files.
|
| + if (config["clean-files"]) { // Remove the temporary files.
|
| cleanup(tempDartFile);
|
| cleanup(tempHtmlFile);
|
| cleanup(tempJsFile);
|
| cleanup(tempChildDartFile);
|
| cleanup(tempChildJsFile);
|
| + cleanup(createTempName(tmpDir, "pubspec", "yaml"));
|
| + cleanup(createTempName(tmpDir, "pubspec", "lock"));
|
| + cleanupDir(createTempName(tmpDir, "packages"));
|
| }
|
| - completePipeline(exitcode);
|
| + completePipeline(stdout, stderr, exitcode);
|
| }
|
|
|