| Index: client/tools/htmlconverter_test.py
|
| ===================================================================
|
| --- client/tools/htmlconverter_test.py (revision 6168)
|
| +++ client/tools/htmlconverter_test.py (working copy)
|
| @@ -1,415 +0,0 @@
|
| -# 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.
|
| -
|
| -#!/usr/bin/env python
|
| -#
|
| -
|
| -"""A test for htmlconverter.py
|
| -"""
|
| -
|
| -from os.path import abspath, basename, dirname, exists, join, split
|
| -import optparse
|
| -import os
|
| -import sys
|
| -import subprocess
|
| -
|
| -# The inputs to our test
|
| -TEST1_HTML = """
|
| -<html>
|
| - <head></head>
|
| - <body>
|
| - <script type="application/javascript">
|
| - if (window.layoutTestController) {
|
| - window.layoutTestController.dumpAsText();
|
| - }
|
| - </script>
|
| -
|
| - <!-- embed source code -->
|
| - <script type="application/dart">
|
| - #import('dart:dom');
|
| - main() {
|
| - window.alert('hi');
|
| - }
|
| - </script>
|
| - </body>
|
| -</html>
|
| -"""
|
| -
|
| -TEST1_OUTPUT = """
|
| -ALERT: hi
|
| -Content-Type: text/plain
|
| -
|
| -#EOF
|
| -"""
|
| -
|
| -TEST2_HTML = """
|
| -<html>
|
| - <head></head>
|
| - <body>
|
| - <script type="application/javascript">
|
| - if (window.layoutTestController) {
|
| - window.layoutTestController.dumpAsText();
|
| - }
|
| - </script>
|
| -
|
| - <!-- embed source code -->
|
| - <script type="application/dart" src="test_2.dart"></script>
|
| - </body>
|
| -</html>
|
| -"""
|
| -
|
| -TEST2_DART = """
|
| -#library('test2');
|
| -#import('dart:dom');
|
| -main() {
|
| - window.alert('test2!');
|
| -}
|
| -"""
|
| -
|
| -TEST2_OUTPUT = """
|
| -ALERT: test2!
|
| -Content-Type: text/plain
|
| -
|
| -#EOF
|
| -"""
|
| -
|
| -TEST3_HTML = """
|
| -<html>
|
| - <head></head>
|
| - <body>
|
| - <script type="application/javascript">
|
| - if (window.layoutTestController) {
|
| - window.layoutTestController.dumpAsText();
|
| - }
|
| - </script>
|
| -
|
| - <!-- embed source code -->
|
| - <script type="application/dart" src="test_3.dart"></script>
|
| - </body>
|
| -</html>
|
| -"""
|
| -
|
| -TEST3_DART = """
|
| -#import('dart:dom');
|
| -#source('test_3a.dart');
|
| -#source('test_3b.dart');
|
| -"""
|
| -
|
| -TEST3_DART_A = """
|
| -class MyClass {
|
| - static myprint() {
|
| - window.alert('test3!');
|
| - }
|
| -}
|
| -"""
|
| -
|
| -TEST3_DART_B = """
|
| -main() {
|
| - MyClass.myprint();
|
| -}
|
| -"""
|
| -
|
| -TEST3_OUTPUT = """
|
| -ALERT: test3!
|
| -Content-Type: text/plain
|
| -
|
| -#EOF
|
| -"""
|
| -
|
| -TEST4_HTML = """
|
| -<html>
|
| - <head></head>
|
| - <body>
|
| - <script type="application/javascript">
|
| - if (window.layoutTestController) {
|
| - window.layoutTestController.dumpAsText();
|
| - }
|
| - </script>
|
| -
|
| - <script type="application/dart" src="test_4.dart"></script>
|
| - </body>
|
| -</html>
|
| -"""
|
| -
|
| -TEST4_DART = """
|
| -#import('dart:dom');
|
| -#import('../samples/ui_lib/observable/observable.dart');
|
| -
|
| -main() {
|
| - // use imported code
|
| - var arr = new ObservableList();
|
| - arr.addChangeListener((EventSummary events) {
|
| - var t = ['update', 'add ',
|
| - 'remove', 'global'][events.events[0].type];
|
| - var o = events.events[0].oldValue;
|
| - o = (o != null ? o : '_');
|
| - var n = events.events[0].newValue;
|
| - n = (n != null ? n : '_');
|
| - window.alert(" " + t + " " + o + " -> " + n);
|
| - });
|
| - EventBatch.wrap((e) { arr.add(3); })(null);
|
| - EventBatch.wrap((e) { arr.add(2); })(null);
|
| - EventBatch.wrap((e) { arr.add(1); })(null);
|
| - EventBatch.wrap((e) { arr[0] = 5; })(null);
|
| - EventBatch.wrap((e) { arr[2] = 0; })(null);
|
| - EventBatch.wrap((e) { arr.removeAt(1); })(null);
|
| - EventBatch.wrap((e) { arr.clear(); })(null);
|
| -}
|
| -"""
|
| -
|
| -# Expected output when run in DumpRenderTree
|
| -TEST4_OUTPUT = """
|
| -ALERT: add _ -> 3
|
| -ALERT: add _ -> 2
|
| -ALERT: add _ -> 1
|
| -ALERT: update 3 -> 5
|
| -ALERT: update 1 -> 0
|
| -ALERT: remove 2 -> _
|
| -ALERT: global _ -> _
|
| -Content-Type: text/plain
|
| -
|
| -#EOF
|
| -"""
|
| -
|
| -TEST5_HTML = """
|
| -<html>
|
| - <head></head>
|
| - <body>
|
| - <script type="application/javascript">
|
| - if (window.layoutTestController) {
|
| - window.layoutTestController.dumpAsText();
|
| - }
|
| - </script>
|
| -
|
| - <!-- embed source code -->
|
| - <script type="application/dart">
|
| - #import('dart:dom');
|
| - main() {
|
| - var element = document.getElementById("test5div");
|
| - if (element == null) {
|
| - window.alert("this script shoulnd't be run synchronously");
|
| - } else {
|
| - window.alert(element.innerHTML);
|
| - }
|
| - }
|
| - </script>
|
| - <div id="test5div">this is visible on DOMContentLoaded</div>
|
| - </body>
|
| -</html>
|
| -"""
|
| -
|
| -TEST5_OUTPUT = """
|
| -ALERT: this is visible on DOMContentLoaded
|
| -Content-Type: text/plain
|
| -this is visible on DOMContentLoaded
|
| -#EOF
|
| -"""
|
| -
|
| -TEST6_HTML = """
|
| -<html>
|
| - <head></head>
|
| - <body>
|
| - <script type="application/javascript">
|
| - if (window.layoutTestController) {
|
| - window.layoutTestController.dumpAsText();
|
| - }
|
| - </script>
|
| -
|
| - <!-- embed source code -->
|
| - <script type="application/dart">
|
| - #import('dart:html', prefix: 'html');
|
| - main() {
|
| - html.window.alert('hi');
|
| - }
|
| - </script>
|
| - </body>
|
| -</html>
|
| -"""
|
| -
|
| -TEST6_OUTPUT = """
|
| -ALERT: hi
|
| -Content-Type: text/plain
|
| -
|
| -#EOF
|
| -"""
|
| -
|
| -
|
| -FILES = {
|
| - 'test_1.html': TEST1_HTML,
|
| -
|
| - 'test_2.html': TEST2_HTML,
|
| - 'test_2.dart': TEST2_DART,
|
| -
|
| - 'test_3.html': TEST3_HTML,
|
| - 'test_3.dart': TEST3_DART,
|
| - 'test_3a.dart': TEST3_DART_A,
|
| - 'test_3b.dart': TEST3_DART_B,
|
| -
|
| - 'test_4.html': TEST4_HTML,
|
| - 'test_4.dart': TEST4_DART,
|
| -
|
| - 'test_5.html': TEST5_HTML,
|
| - 'test_6.html': TEST6_HTML,
|
| - }
|
| -
|
| -INPUTS = [
|
| - 'test_1.html',
|
| - 'test_2.html',
|
| - 'test_3.html',
|
| - 'test_4.html',
|
| - 'test_5.html',
|
| - 'test_6.html'
|
| - ]
|
| -
|
| -OUTPUTS = [
|
| - TEST1_OUTPUT,
|
| - TEST2_OUTPUT,
|
| - TEST3_OUTPUT,
|
| - TEST4_OUTPUT,
|
| - TEST5_OUTPUT,
|
| - TEST6_OUTPUT
|
| - ]
|
| -
|
| -CLIENT_PATH = dirname(dirname(abspath(__file__)))
|
| -RED_COLOR = "\033[31m"
|
| -GREEN_COLOR = "\033[32m"
|
| -YELLOW_COLOR = "\033[33m"
|
| -NO_COLOR = "\033[0m"
|
| -
|
| -last_line_length = 0
|
| -def printLine(s):
|
| - """ Prints a line in place (erasing the previous line). """
|
| - global last_line_length
|
| - s = " Testing htmlconverter.py: " + s
|
| - if last_line_length > 0:
|
| - print "\r" + (" " * last_line_length) + "\r",
|
| - last_line_length = len(s)
|
| - print s,
|
| - sys.stdout.flush()
|
| -
|
| -def execute(cmd, verbose=False):
|
| - """Execute a command in a subprocess. """
|
| - if verbose: print 'Executing: ' + ' '.join(cmd)
|
| - pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
| - output, err = pipe.communicate()
|
| - if pipe.returncode != 0:
|
| - print 'Execution failed: ' + output + '\n' + err
|
| - if verbose or pipe.returncode != 0:
|
| - print output
|
| - print err
|
| - return pipe.returncode, output, err
|
| -
|
| -def browserRun(message, htmlfile, test, verbose):
|
| - # run the generated code
|
| - printLine(message + ' [%d]' % (test + 1))
|
| - status, out, err = execute([
|
| - 'tests/drt/DumpRenderTree',
|
| - htmlfile],
|
| - verbose)
|
| - if status != 0:
|
| - printLine("%sERROR%s test output [%d]" % (RED_COLOR, NO_COLOR, test + 1))
|
| - return status
|
| -
|
| - # check that the output is equivalent and cleanup
|
| - out = '\n' + out
|
| - if out == OUTPUTS[test]:
|
| - printLine("%sPASS%s [%d]" % (GREEN_COLOR, NO_COLOR, test + 1))
|
| - else:
|
| - printLine("%sFAIL%s [%d]" % (RED_COLOR, NO_COLOR, test + 1))
|
| - print out
|
| - print err
|
| - return 1
|
| -
|
| - return 0
|
| -
|
| -def createInputFiles():
|
| - printLine("... creating input files")
|
| - for filename in FILES:
|
| - with open(filename, 'w') as f:
|
| - f.write(FILES[filename])
|
| -
|
| -def deleteInputFiles():
|
| - for filename in FILES:
|
| - os.remove(filename)
|
| -
|
| -def runTest(test, target, verbose, keep_temporary_files):
|
| - inputfile = INPUTS[test]
|
| - suffix = '-js.html' if target == 'chromium' else '-dart.html'
|
| - outfile = abspath(join('out', inputfile.replace(".html", suffix)))
|
| -
|
| - # TODO(sigmund): tests should also run in dartium before converting them
|
| -
|
| - # run the htmlconverter.py script on it
|
| - printLine("... converting input html [%d]" % (test + 1))
|
| - cmd = [sys.executable, 'tools/htmlconverter.py', inputfile,
|
| - '-o', 'out/', '-t', target]
|
| - if verbose: cmd.append('--verbose')
|
| - status, out, err = execute(cmd, verbose)
|
| - if status != 0:
|
| - printLine("%sERROR%s converting [%d]" % (RED_COLOR, NO_COLOR, test + 1))
|
| - print out
|
| - print err
|
| - return status
|
| -
|
| - status = browserRun(
|
| - "... running compiled html in %s" % target, outfile, test, verbose)
|
| - if not keep_temporary_files:
|
| - os.remove(outfile)
|
| - return status
|
| -
|
| -def Flags():
|
| - """ Consturcts a parser for extracting flags from the command line. """
|
| - result = optparse.OptionParser()
|
| - result.add_option("--keep_temporary_files",
|
| - help="Keep temporary files created for each test",
|
| - default=False,
|
| - action="store_true")
|
| - result.add_option("-v", "--verbose",
|
| - help="Print verbose output",
|
| - default=False,
|
| - action="store_true")
|
| - result.add_option("-t", "--target",
|
| - help="The target html to generate",
|
| - metavar="[chromium,dartium]",
|
| - default='chromium,dartium')
|
| - result.set_usage("htmlconverter_test.py [--verbose -t chromium,dartium]")
|
| - return result
|
| -
|
| -def shouldRunTest(test, prefixes):
|
| - if len(prefixes) == 0:
|
| - return True
|
| - for a in prefixes:
|
| - if INPUTS[test].startswith(a):
|
| - return True
|
| - return False
|
| -
|
| -
|
| -def main():
|
| - os.chdir(CLIENT_PATH)
|
| - parser = Flags()
|
| - options, args = parser.parse_args()
|
| - verbose = options.verbose
|
| - keep_temporary_files = options.keep_temporary_files
|
| -
|
| - createInputFiles()
|
| - for test in range(len(INPUTS)):
|
| - if shouldRunTest(test, args):
|
| - if 'chromium' in options.target:
|
| - if runTest(test, 'chromium', verbose, keep_temporary_files) != 0:
|
| - if not keep_temporary_files:
|
| - deleteInputFiles()
|
| - return 1
|
| - if 'dartium' in options.target:
|
| - if runTest(test, 'dartium', verbose, keep_temporary_files) != 0:
|
| - if not keep_temporary_files:
|
| - deleteInputFiles()
|
| - return 1
|
| -
|
| - if not keep_temporary_files:
|
| - deleteInputFiles()
|
| - return 0
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - sys.exit(main())
|
|
|