diff --git a/test/test.py b/test/test.py index f64ffbe27..51c93be26 100644 --- a/test/test.py +++ b/test/test.py @@ -2,7 +2,7 @@ import json, platform, os, shutil, sys, subprocess, tempfile, threading, time, u from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer import SocketServer from optparse import OptionParser -from urlparse import urlparse +from urlparse import urlparse, parse_qs USAGE_EXAMPLE = "%prog" @@ -125,13 +125,18 @@ class PDFTestHandler(BaseHTTPRequestHandler): self.sendFile(path, ext) - def do_POST(self): + def do_POST(self): numBytes = int(self.headers['Content-Length']) self.send_response(200) self.send_header('Content-Type', 'text/plain') self.end_headers() + url = urlparse(self.path) + if url.path == "/tellMeToQuit": + tellAppToQuit(url.path, url.query) + return + result = json.loads(self.rfile.read(numBytes)) browser, id, failure, round, page, snapshot = result['browser'], result['id'], result['failure'], result['round'], result['page'], result['snapshot'] taskResults = State.taskResults[browser][id] @@ -156,6 +161,19 @@ class PDFTestHandler(BaseHTTPRequestHandler): State.done = (0 == State.remaining) +# Applescript hack to quit Chrome on Mac +def tellAppToQuit(path, query): + if platform.system() != "Darwin": + return + d = parse_qs(query) + path = d['path'][0] + cmd = """osascript<<END +tell application "%s" +quit +end tell +END""" % path + os.system(cmd) + class BaseBrowserCommand(object): def __init__(self, browserRecord): self.name = browserRecord["name"] @@ -293,6 +311,7 @@ def startBrowsers(browsers, options): b.setup() print 'Launching', b.name qs = 'browser='+ urllib.quote(b.name) +'&manifestFile='+ urllib.quote(options.manifestFile) + qs += '&path=' + b.path b.start('http://localhost:8080/test/test_slave.html?'+ qs) def teardownBrowsers(browsers): diff --git a/test/test_slave.html b/test/test_slave.html index c64c6a390..d70e362af 100644 --- a/test/test_slave.html +++ b/test/test_slave.html @@ -6,7 +6,7 @@ <script type="text/javascript" src="/fonts.js"></script> <script type="text/javascript" src="/glyphlist.js"></script> <script type="application/javascript"> -var browser, canvas, currentTask, currentTaskIdx, failure, manifest, numPages, pdfDoc, stdout; +var appPath, browser, canvas, currentTask, currentTaskIdx, failure, manifest, numPages, pdfDoc, stdout; function queryParams() { var qs = window.location.search.substring(1); @@ -23,12 +23,13 @@ function load() { var params = queryParams(); browser = params.browser; manifestFile = params.manifestFile; + appPath = params.path; canvas = document.createElement("canvas"); canvas.mozOpaque = true; stdout = document.getElementById("stdout"); - log("Harness thinks this browser is '"+ browser +"'\n"); + log("Harness thinks this browser is '"+ browser + "' with path " + appPath + "\n"); log("Fetching manifest "+ manifestFile +"..."); var r = new XMLHttpRequest(); @@ -157,13 +158,21 @@ function snapshotCurrentPage(gfx) { ); } +function sendQuitRequest() { + var r = new XMLHttpRequest(); + r.open("POST", "/tellMeToQuit?path=" + escape(appPath), false); + r.send(""); +} + function quitApp() { log("Done!"); document.body.innerHTML = "Tests are finished. <h1>CLOSE ME!</h1>"; - if (window.SpecialPowers) + if (window.SpecialPowers) { SpecialPowers.quitApplication(); - else + } else { + sendQuitRequest(); window.close(); + } } function done() {