mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-02 05:48:38 +09:00
101 lines
3.4 KiB
Python
101 lines
3.4 KiB
Python
# 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 sys
|
|
|
|
import mozfile
|
|
import mozinstall
|
|
|
|
from firefox_ui_harness.runners import FirefoxUITestRunner
|
|
from firefox_ui_harness.testcases import UpdateTestCase
|
|
|
|
|
|
DEFAULT_PREFS = {
|
|
# Bug 1355026: Re-enable when support for the new simplified UI update is available
|
|
'app.update.doorhanger': False,
|
|
'app.update.log': True,
|
|
'startup.homepage_override_url': 'about:blank',
|
|
}
|
|
|
|
|
|
class UpdateTestRunner(FirefoxUITestRunner):
|
|
|
|
def __init__(self, **kwargs):
|
|
super(UpdateTestRunner, self).__init__(**kwargs)
|
|
|
|
self.original_bin = self.bin
|
|
|
|
self.prefs.update(DEFAULT_PREFS)
|
|
|
|
# In case of overriding the update URL, set the appropriate preference
|
|
override_url = kwargs.pop('update_override_url', None)
|
|
if override_url:
|
|
self.prefs.update({'app.update.url.override': override_url})
|
|
|
|
self.run_direct_update = not kwargs.pop('update_fallback_only', False)
|
|
self.run_fallback_update = not kwargs.pop('update_direct_only', False)
|
|
|
|
self.test_handlers = [UpdateTestCase]
|
|
|
|
def run_tests(self, tests):
|
|
# Used to store the last occurred exception because we execute
|
|
# run_tests() multiple times
|
|
self.exc_info = None
|
|
|
|
failed = 0
|
|
source_folder = self.get_application_folder(self.original_bin)
|
|
|
|
results = {}
|
|
|
|
def _run_tests(tags):
|
|
application_folder = None
|
|
|
|
try:
|
|
# Backup current tags
|
|
test_tags = self.test_tags
|
|
|
|
application_folder = self.duplicate_application(source_folder)
|
|
self.bin = mozinstall.get_binary(application_folder, 'Firefox')
|
|
|
|
self.test_tags = tags
|
|
super(UpdateTestRunner, self).run_tests(tests)
|
|
|
|
except Exception:
|
|
self.exc_info = sys.exc_info()
|
|
self.logger.error('Failure during execution of the update test.',
|
|
exc_info=self.exc_info)
|
|
|
|
finally:
|
|
self.test_tags = test_tags
|
|
|
|
self.logger.info('Removing copy of the application at "%s"' % application_folder)
|
|
try:
|
|
mozfile.remove(application_folder)
|
|
except IOError as e:
|
|
self.logger.error('Cannot remove copy of application: "%s"' % str(e))
|
|
|
|
# Run direct update tests if wanted
|
|
if self.run_direct_update:
|
|
_run_tests(tags=['direct'])
|
|
failed += self.failed
|
|
results['Direct'] = False if self.failed else True
|
|
|
|
# Run fallback update tests if wanted
|
|
if self.run_fallback_update:
|
|
_run_tests(tags=['fallback'])
|
|
failed += self.failed
|
|
results['Fallback'] = False if self.failed else True
|
|
|
|
self.logger.info("Summary of update tests:")
|
|
for test_type, result in results.iteritems():
|
|
self.logger.info("\t%s update test ran and %s" %
|
|
(test_type, 'PASSED' if result else 'FAILED'))
|
|
|
|
# Combine failed tests for all run_test() executions
|
|
self.failed = failed
|
|
|
|
# If exceptions happened, re-throw the last one
|
|
if self.exc_info:
|
|
ex_type, exception, tb = self.exc_info
|
|
raise ex_type, exception, tb
|