Bug 1249389 - part 6 - provide UniquePtr overload for nsIStartupCache::GetBuffer; r=erahm
The lone remaining startup cache-related uses of nsAutoArrayPtr are both
in TestStartupCache.cpp, for use with nsIStartupCache::GetBuffer. The
uses can't use StartupCache::GetBuffer because StartupCache::GetBuffer
isn't visible outside of libxul, and TestStartupCache is a normal C++
unit test.
The Right Thing is to convert TestStartupCache to a gtest so we can see
libxul internal symbols and then delete nsIStartupCache entirely.
That's a bit complicated, as TestStartupCache doesn't fit nicely into
gtest's framework. The simpler solution is to add a UniquePtr overload
in the interface that hides the XPCOM outparam management details.
# 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 json
import optparse
import os
import re
import sys
from threading import RLock
from tps import TPSTestRunner
def main():
parser = optparse.OptionParser()
parser.add_option('--binary',
action='store',
type='string',
dest='binary',
default=None,
help='path to the Firefox binary, specified either as '
'a local file or a url; if omitted, the PATH '
'will be searched;')
parser.add_option('--configfile',
action='store',
type='string',
dest='configfile',
default=None,
help='path to the config file to use default: %default]')
parser.add_option('--debug',
action='store_true',
dest='debug',
default=False,
help='run in debug mode')
parser.add_option('--ignore-unused-engines',
default=False,
action='store_true',
dest='ignore_unused_engines',
help='If defined, do not load unused engines in individual tests.'
' Has no effect for pulse monitor.')
parser.add_option('--logfile',
action='store',
type='string',
dest='logfile',
default='tps.log',
help='path to the log file [default: %default]')
parser.add_option('--mobile',
action='store_true',
dest='mobile',
default=False,
help='run with mobile settings')
parser.add_option('--pulsefile',
action='store',
type='string',
dest='pulsefile',
default=None,
help='path to file containing a pulse message in '
'json format that you want to inject into the monitor')
parser.add_option('--resultfile',
action='store',
type='string',
dest='resultfile',
default='tps_result.json',
help='path to the result file [default: %default]')
parser.add_option('--testfile',
action='store',
type='string',
dest='testfile',
default='all_tests.json',
help='path to the test file to run [default: %default]')
parser.add_option('--stop-on-error',
action='store_true',
dest='stop_on_error',
help='stop running tests after the first failure')
(options, args) = parser.parse_args()
configfile = options.configfile
if configfile is None:
virtual_env = os.environ.get('VIRTUAL_ENV')
if virtual_env:
configfile = os.path.join(virtual_env, 'config.json')
if configfile is None or not os.access(configfile, os.F_OK):
raise Exception('Unable to find config.json in a VIRTUAL_ENV; you must '
'specify a config file using the --configfile option')
# load the config file
f = open(configfile, 'r')
configcontent = f.read()
f.close()
config = json.loads(configcontent)
testfile = os.path.join(config.get('testdir', ''), options.testfile)
rlock = RLock()
print 'using result file', options.resultfile
extensionDir = config.get('extensiondir')
if not extensionDir or extensionDir == '__EXTENSIONDIR__':
extensionDir = os.path.join(os.getcwd(), '..', '..',
'services', 'sync', 'tps', 'extensions')
else:
if sys.platform == 'win32':
# replace msys-style paths with proper Windows paths
m = re.match('^\/\w\/', extensionDir)
if m:
extensionDir = '%s:/%s' % (m.group(0)[1:2], extensionDir[3:])
extensionDir = extensionDir.replace('/', '\\')
TPS = TPSTestRunner(extensionDir,
binary=options.binary,
config=config,
debug=options.debug,
ignore_unused_engines=options.ignore_unused_engines,
logfile=options.logfile,
mobile=options.mobile,
resultfile=options.resultfile,
rlock=rlock,
testfile=testfile,
stop_on_error=options.stop_on_error,
)
TPS.run_tests()
if TPS.numfailed > 0 or TPS.numpassed == 0:
sys.exit(1)
if __name__ == '__main__':
main()