# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
import os.path
import re
class TPSTestPhase(object):
lineRe = re.compile(
r
"^(.*?)test phase (?P[^\s]+): (?P.*)$"
)
def __init__(
self,
phase,
profile,
testname,
testpath,
logfile,
env,
firefoxRunner,
logfn,
ignore_unused_engines=
False,
):
self.phase = phase
self.profile = profile
self.testname = str(testname)
# this might be passed in as unicode
self.testpath = testpath
self.logfile = logfile
self.env = env
self.firefoxRunner = firefoxRunner
self.log = logfn
self.ignore_unused_engines = ignore_unused_engines
self._status =
None
self.errline =
""
@property
def status(self):
return self._status
if self._status
else "unknown"
def run(self):
# launch Firefox
prefs = {
"testing.tps.testFile": os.path.abspath(self.testpath),
"testing.tps.testPhase": self.phase,
"testing.tps.logFile": self.logfile,
"testing.tps.ignoreUnusedEngines": self.ignore_unused_engines,
}
self.profile.set_preferences(prefs)
self.log(
"\nLaunching Firefox for phase %s with prefs %s\n"
% (self.phase, str(prefs))
)
self.firefoxRunner.run(env=self.env, args=[], profile=self.profile)
# parse the logfile and look for results from the current test phase
found_test =
False
f = open(self.logfile,
"r")
for line
in f:
# skip to the part of the log file that deals with the test we're running
if not found_test:
if line.find(
"Running test %s" % self.testname) > -1:
found_test =
True
else:
continue
# look for the status of the current phase
match = self.lineRe.match(line)
if match:
if match.group(
"matchphase") == self.phase:
self._status = match.group(
"matchstatus")
break
# set the status to FAIL if there is TPS error
if line.find(
"CROSSWEAVE ERROR: ") > -1
and not self._status:
self._status =
"FAIL"
self.errline = line[
line.find(
"CROSSWEAVE ERROR: ") + len(
"CROSSWEAVE ERROR: ") :
]
f.close()