| 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);
|
| + }
|
| +}
|
|
|