-import json, platform, os, shutil, sys, subprocess, tempfile, threading, urllib, urllib2
+import json, platform, os, shutil, sys, subprocess, tempfile, threading, time, urllib, urllib2
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import SocketServer
from optparse import OptionParser
def __init__(self, browserRecord):
self.name = browserRecord["name"]
self.path = browserRecord["path"]
+ self.tempDir = None
if platform.system() == "Darwin" and (self.path.endswith(".app") or self.path.endswith(".app/")):
self._fixupMacPath()
def setup(self):
self.tempDir = tempfile.mkdtemp()
self.profileDir = os.path.join(self.tempDir, "profile")
- print self.profileDir
shutil.copytree(os.path.join(DOC_ROOT, "test", "resources", "firefox"),
self.profileDir)
def teardown(self):
- shutil.rmtree(self.tempDir)
+ if self.tempDir is not None and os.path.exists(self.tempDir):
+ shutil.rmtree(self.tempDir)
def start(self, url):
cmds = [self.path]
if platform.system() == "Darwin":
cmds.append("-foreground")
cmds.extend(["-no-remote", "-profile", self.profileDir, url])
- subprocess.call(cmds)
+ subprocess.Popen(cmds)
def makeBrowserCommands(browserManifestFile):
with open(browserManifestFile) as bmf:
State.remaining = len(testBrowsers) * len(manifestList)
- for b in testBrowsers:
+ return testBrowsers
+
+def startBrowsers(browsers, options):
+ for b in browsers:
+ b.setup()
+ print 'Launching', b.name
+ qs = 'browser='+ urllib.quote(b.name) +'&manifestFile='+ urllib.quote(options.manifestFile)
+ b.start('http://localhost:8080/test/test_slave.html?'+ qs)
+
+def teardownBrowsers(browsers):
+ for b in browsers:
try:
- b.setup()
- print 'Launching', b.name
- qs = 'browser='+ urllib.quote(b.name) +'&manifestFile='+ urllib.quote(options.manifestFile)
- b.start('http://localhost:8080/test/test_slave.html?'+ qs)
- finally:
b.teardown()
-
+ except:
+ print "Error cleaning up after browser at ", b.path
+
def check(task, results, browser):
failed = False
for r in xrange(len(results)):
httpd_thread.setDaemon(True)
httpd_thread.start()
- setUp(options)
- processResults()
+ browsers = setUp(options)
+ try:
+ startBrowsers(browsers, options)
+ while not State.done:
+ time.sleep(1)
+ processResults()
+ finally:
+ teardownBrowsers(browsers)
if __name__ == '__main__':
main()