Index: utils/testrunner/html_wrap_task.dart |
=================================================================== |
--- utils/testrunner/html_wrap_task.dart (revision 0) |
+++ utils/testrunner/html_wrap_task.dart (revision 0) |
@@ -0,0 +1,143 @@ |
+// 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. |
+ |
+/** |
+ * A pipeline task to create a HTML/CSS wrapper for a test so it can run in DRT. |
+ */ |
+class HtmlWrapTask extends PipelineTask { |
+ final String _testFileTemplate; |
+ final String _htmlSourceFileTemplate; |
+ final String _htmlDestFileTemplate; |
+ final String _cssSourceFileTemplate; |
+ final String _cssDestFileTemplate; |
+ |
+ HtmlWrapTask(testFileTemplate, htmlSourceFileTemplate, |
+ htmlDestFileTemplate, cssSourceFileTemplate, cssDestFileTemplate) : |
+ _testFileTemplate = testFileTemplate, |
+ _htmlSourceFileTemplate = htmlSourceFileTemplate, |
+ _htmlDestFileTemplate = htmlDestFileTemplate, |
+ _cssSourceFileTemplate = cssSourceFileTemplate, |
+ _cssDestFileTemplate = cssDestFileTemplate; |
+ |
+ void execute(Path testfile, List stdout, List stderr, bool logging, |
+ Function exitHandler) { |
+ // If the test already has a corresponding HTML file we copy that, |
+ // else we create a new wrapper. |
+ var testname = expandMacros(_testFileTemplate, testfile); |
+ var htmlSourceName = expandMacros(_htmlSourceFileTemplate, testfile); |
+ var htmlDestName = expandMacros(_htmlDestFileTemplate, testfile); |
+ var cssSourceName = expandMacros(_cssSourceFileTemplate, testfile); |
+ var cssDestName = expandMacros(_cssDestFileTemplate, testfile); |
+ |
+ var htmlMaster = new File(htmlSourceName); |
+ if (htmlMaster.existsSync()) { |
+ if (logging) { |
+ stdout.add('Copying $htmlSourceName to $htmlDestName'); |
+ } |
+ copyFile(htmlSourceName, htmlDestName); |
+ } else { |
+ if (logging) { |
+ stdout.add('Creating wrapper $htmlDestName'); |
+ } |
+ var p = new Path(testname); |
+ var runtime = config.runtime; |
+ StringBuffer sbuf = new StringBuffer(); |
+ sbuf.add(""" |
+<!DOCTYPE html> |
+ |
+<html> |
+<head> |
+ <meta charset="utf-8"> |
+ <title>$testname</title> |
+ <link rel="stylesheet" href="${p.filenameWithoutExtension}.css"> |
+ <script type='text/javascript'> |
+function handleMessage(m) { |
+ if (m.data == 'done') { |
+ window.testRunner.notifyDone(); |
+ } |
+} |
+ |
+ if (window.testRunner) { |
+ window.testRunner.waitUntilDone(); |
+ window.testRunner.dumpAsText(); |
+ window.addEventListener("message", handleMessage, false); |
+ } |
+"""); |
+ if (runtime == 'drt-dart') { |
+ sbuf.add("if (navigator.webkitStartDart) navigator.webkitStartDart();"); |
+ } |
+ sbuf.add(""" |
+ </script> |
+</head> |
+<body> |
+ <h1>$testname</h1> |
+ <div id="container"></div> |
+ <pre id="console"></pre> |
+ <script type='"""); |
+ var prefix = flattenPath(p.directoryPath.toString()); |
+ if (runtime == 'drt-dart') { |
+ sbuf.add("application/dart' src='${prefix}_${p.filename}'>"); |
+ } else { |
+ sbuf.add("text/javascript' " |
+ "src='${prefix}_${p.filenameWithoutExtension}.js'>"); |
+ } |
+ sbuf.add(""" |
+ </script> |
+ <script |
+src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"> |
+ </script> |
+</body> |
+</html> |
+"""); |
+ createFile(htmlDestName, sbuf.toString()); |
+ } |
+ var cssMaster = new File(cssSourceName); |
+ if (cssMaster.existsSync()) { |
+ if (logging) { |
+ stdout.add('Copying $cssSourceName to $cssDestName'); |
+ } |
+ copyFile(cssSourceName, cssDestName); |
+ } else { |
+ if (logging) { |
+ stdout.add('Creating $cssDestName'); |
+ } |
+ createFile(cssDestName, """ |
+body { |
+background-color: #F8F8F8; |
+font-family: 'Open Sans', sans-serif; |
+font-size: 14px; |
+font-weight: normal; |
+line-height: 1.2em; |
+margin: 15px; |
+} |
+ |
+p { |
+color: #333; |
+} |
+ |
+#container { |
+width: 100%; |
+height: 400px; |
+position: relative; |
+border: 1px solid #ccc; |
+background-color: #fff; |
+} |
+ |
+#text { |
+font-size: 24pt; |
+text-align: center; |
+margin-top: 140px; |
+} |
+ |
+"""); |
+ } |
+ exitHandler(0); |
+ } |
+ |
+ void cleanup(Path testfile, List stdout, List stderr, |
+ bool logging, bool keepFiles) { |
+ deleteFiles([_htmlDestFileTemplate, _cssDestFileTemplate], testfile, |
+ logging, keepFiles, stdout); |
+ } |
+} |