Index: utils/testrunner/run_pipeline.dart |
diff --git a/utils/testrunner/run_pipeline.dart b/utils/testrunner/run_pipeline.dart |
deleted file mode 100644 |
index 2e98bf57a63acdd8bda1f69c901b128e7cb3d6c3..0000000000000000000000000000000000000000 |
--- a/utils/testrunner/run_pipeline.dart |
+++ /dev/null |
@@ -1,364 +0,0 @@ |
-// Copyright (c) 2012, 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. |
- |
-/** The default pipeline code for running a test file. */ |
-library pipeline; |
-import 'dart:async'; |
-import 'dart:io'; |
-import 'dart:isolate'; |
-import 'dart:math'; |
-part 'pipeline_utils.dart'; |
- |
-/** |
- * The configuration passed in to the pipeline runner; this essentially |
- * contains all the command line arguments passded to testrunner plus some |
- * synthesized ones. |
- */ |
-Map config; |
- |
-/** Paths to the various generated temporary files. */ |
-String tempDartFile = null; |
-String tempHtmlFile = null; |
-String tempChildDartFile = null; |
-String tempJsFile = null; |
-String tempChildJsFile = null; |
- |
-/** |
- * Path to the Dart script file referenced from the HTML wrapper (or |
- * that is compiled to a Javascript file referenced from the HTML wrapper). |
- */ |
-String sourceFile = null; |
- |
-/** Path to the script file referenced from the HTML wrapper (Dart or JS). */ |
-String scriptFile = null; |
- |
-/** MIME type of the script. */ |
-String scriptType; |
- |
-/** Process id for the HTTP server. */ |
-int serverId; |
- |
-/** Port used by HTTP server. */ |
-int serverPort; |
- |
-/** Root directory for static files used by HTTP server. */ |
-String serverRoot; |
- |
-/** Path of the HTTP server script. */ |
-String serverPath; |
- |
-/** 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(List<String> args, SendPort replyTo) { |
- var port = new ReceivePort(); |
- replyTo.send(port); |
- port.first.then((message) { |
- config = message[0]; |
- var replyPort = message[1]; |
- 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"]; |
- // Replace .dart with _server.dart to get test's server file, if any. |
- var truncLen = serverPath.length - '.dart'.length; |
- serverPath = '${serverPath.substring(0, truncLen)}_server.dart'; |
- var serverFile = new File(serverPath); |
- if (!serverFile.existsSync()) { |
- // No custom server; run the default server. |
- serverPath = '${config["runnerDir"]}/http_server_runner.dart'; |
- } |
- if (serverPath != null) { |
- serverRoot = config["root"]; |
- if (serverRoot == null) { |
- // Set the root to be the directory containing the test file. |
- serverRoot = getDirectory(config["testfile"]); |
- } |
- |
- if (config["port"] == null) { |
- // In this case we have to choose a random port and we need |
- // to see if the server starts successfully on that port. |
- var r = new Random(); |
- tryStartHTTPServer(r, MAX_SERVER_TRIES); |
- } else { |
- serverPort = int.parse(config["port"]); |
- // Start the HTTP server. |
- serverId = startProcess(config["dart"], |
- [ serverPath, '--port=$serverPort', '--root=$serverRoot'], |
- stdout, stderr); |
- } |
- } |
- } |
- wrapStage(); |
-} |
- |
-void tryStartHTTPServer(Random r, int remainingAttempts) { |
- // Pick a port from 1024 to 32767. |
- serverPort = 1024 + r.nextInt(32768 - 1024); |
- logMessage('Trying ${config["dart"]} $serverPath --port=$serverPort ' |
- '--root=$serverRoot'); |
- serverId = startProcess(config["dart"], |
- [ serverPath, '--port=$serverPort', '--root=$serverRoot'], |
- stdout, stderr, |
- (line) { |
- if (line.startsWith('Server listening')) { |
- wrapStage(); |
- } else if (remainingAttempts == 0) { |
- print('Failed to start HTTP server after $MAX_SERVER_TRIES' |
- ' attempts; aborting.'); |
- exit(1); |
- } else { |
- tryStartHTTPServer(r, remainingAttempts - 1); |
- } |
- }); |
-} |
- |
-/** Initial pipeline stage - generates Dart and HTML wrapper files. */ |
-wrapStage() { |
- tmpDir = config["targetDir"]; |
- var testFile = config["testfile"]; |
- |
- // Generate names for the generated wrapper files. |
- tempDartFile = createTempName(tmpDir, testFile, '.dart'); |
- if (config["runtime"] != 'vm') { |
- tempHtmlFile = createTempName(tmpDir, testFile, '.html'); |
- if (config["layout"]) { |
- tempChildDartFile = |
- createTempName(tmpDir, testFile, '-child.dart'); |
- } |
- if (config["runtime"] == 'drt-js') { |
- tempJsFile = createTempName(tmpDir, testFile, '.js'); |
- if (config["layout"]) { |
- tempChildJsFile = |
- createTempName(tmpDir, testFile, '-child.js'); |
- } |
- } |
- } |
- |
- // Create the test controller Dart wrapper. |
- var directives, extras; |
- |
- if (config["layout"]) { |
- directives = ''' |
-import 'dart:async'; |
-import 'dart:io'; |
-import 'dart:math'; |
-part '${normalizePath('${config["runnerDir"]}/layout_test_controller.dart')}'; |
- '''; |
- extras = ''' |
- baseUrl = 'file://${normalizePath('$tempHtmlFile')}'; |
- tprint = (msg) => print('###\$msg'); |
- notifyDone = (e) => exit(e); |
- '''; |
- } else if (config["runtime"] == "vm") { |
- directives = ''' |
-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) { exit(e); }; |
- '''; |
- } else { |
- directives = ''' |
-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').appendText('###\$msg\\n'); |
- notifyDone = (e) => window.postMessage('done', '*'); |
- '''; |
- } |
- |
- var action = 'process(test.main, runTests)'; |
- if (config["layout-text"]) { |
- action = 'runTextLayoutTests()'; |
- } else if (config["layout-pixel"]) { |
- action = 'runPixelLayoutTests()'; |
- } else if (config["list-tests"]) { |
- action = 'process(test.main, listTests)'; |
- } else if (config["list-groups"]) { |
- action = 'process(test.main, listGroups)'; |
- } else if (config["isolate"]) { |
- action = 'process(test.main, runIsolateTests)'; |
- } |
- |
- logMessage('Creating $tempDartFile'); |
- writeFile(tempDartFile, ''' |
-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.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 '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"]}; |
- runTests(test.main); |
-} |
- '''); |
- } |
- |
- // Create the HTML wrapper and compile to Javascript if necessary. |
- var isJavascript = config["runtime"] == 'drt-js'; |
- if (config["runtime"] == 'drt-dart' || isJavascript) { |
- var bodyElements, runAsText; |
- |
- if (config["layout"]) { |
- sourceFile = tempChildDartFile; |
- scriptFile = isJavascript ? tempChildJsFile : tempChildDartFile; |
- bodyElements = ''; |
- } else { |
- sourceFile = tempDartFile; |
- scriptFile = isJavascript ? tempJsFile : tempDartFile; |
- bodyElements = '<div id="container"></div><pre id="console"></pre>'; |
- runAsText = "testRunner.dumpAsText();"; |
- } |
- scriptType = isJavascript ? 'text/javascript' : 'application/dart'; |
- |
- if (config["runtime"] == 'drt-dart' || isJavascript) { |
- logMessage('Creating $tempHtmlFile'); |
- writeFile(tempHtmlFile, ''' |
-<!DOCTYPE html> |
-<html> |
- <head> |
- <meta charset="utf-8"> |
- <title>$testFile</title> |
- <link rel="stylesheet" href="${config["runnerDir"]}/testrunner.css"> |
- <script type='text/javascript'> |
- var testRunner = window.testRunner || window.layoutTestController; |
- if (testRunner) { |
- function handleMessage(m) { |
- if (m.data == 'done') { |
- testRunner.notifyDone(); |
- } |
- } |
- testRunner.waitUntilDone(); |
- $runAsText |
- window.addEventListener("message", handleMessage, false); |
- } |
- </script> |
- </head> |
-<body> |
- $bodyElements |
- <script type='$scriptType' src='$scriptFile'></script> |
- </script> |
-</body> |
-</html> |
-'''); |
- } |
- } |
- compileStage(isJavascript); |
-} |
- |
-/** 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(cmd, [ '-c', '-o$output', '$input' ], stdout, stderr) |
- .then(runTestStage); |
- } else { |
- runCommand(cmd, [ '-o$output', '$input' ], stdout, stderr) |
- .then(runTestStage); |
- } |
- } else { |
- runTestStage(0); |
- } |
-} |
- |
-/** Third stage of pipeline - runs the tests. */ |
-runTestStage(_) { |
- var cmd, args; |
- if (config["runtime"] == 'vm' || config["layout"]) { // Run the tests. |
- if (config["checked"]) { |
- cmd = config["dart"]; |
- args = [ '--enable_asserts', '--enable_type_checks', tempDartFile ]; |
- } else { |
- cmd = config["dart"]; |
- args = [ tempDartFile ]; |
- } |
- } else { |
- cmd = config["drt"]; |
- args = [ '--no-timeout', tempHtmlFile ]; |
- } |
- runCommand(cmd, args, stdout, stderr, config["timeout"]).then(cleanupStage); |
-} |
- |
-/** |
- * Final stage of the pipeline - clean up generated files and notify |
- * the originator that started the isolate. |
- */ |
-cleanupStage(exitcode) { |
- if (config["server"]) { // Stop the HTTP server. |
- stopProcess(serverId); |
- } |
- |
- 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(stdout, stderr, exitcode); |
-} |