diff -r 000000000000 -r 6474c204b198 addon-sdk/source/python-lib/cuddlefish/tests/test_xpi.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/addon-sdk/source/python-lib/cuddlefish/tests/test_xpi.py Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,516 @@ +# 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 +import unittest +import zipfile +import pprint +import shutil + +import simplejson as json +from cuddlefish import xpi, packaging, manifest, buildJID +from cuddlefish.tests import test_packaging +from test_linker import up + +import xml.etree.ElementTree as ElementTree + +xpi_template_path = os.path.join(test_packaging.static_files_path, + 'xpi-template') + +fake_manifest = '' + +class PrefsTests(unittest.TestCase): + def makexpi(self, pkg_name): + self.xpiname = "%s.xpi" % pkg_name + create_xpi(self.xpiname, pkg_name, 'preferences-files') + self.xpi = zipfile.ZipFile(self.xpiname, 'r') + options = self.xpi.read('harness-options.json') + self.xpi_harness_options = json.loads(options) + + def setUp(self): + self.xpiname = None + self.xpi = None + + def tearDown(self): + if self.xpi: + self.xpi.close() + if self.xpiname and os.path.exists(self.xpiname): + os.remove(self.xpiname) + + def testPackageWithSimplePrefs(self): + self.makexpi('simple-prefs') + packageName = 'jid1-fZHqN9JfrDBa8A@jetpack' + self.failUnless('options.xul' in self.xpi.namelist()) + optsxul = self.xpi.read('options.xul').decode("utf-8") + self.failUnlessEqual(self.xpi_harness_options["jetpackID"], packageName) + self.failUnlessEqual(self.xpi_harness_options["preferencesBranch"], packageName) + + root = ElementTree.XML(optsxul.encode('utf-8')) + + xulNamespacePrefix = \ + "{http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul}" + + settings = root.findall(xulNamespacePrefix + 'setting') + + def assertPref(setting, name, prefType, title): + self.failUnlessEqual(setting.get('data-jetpack-id'), packageName) + self.failUnlessEqual(setting.get('pref'), + 'extensions.' + packageName + '.' + name) + self.failUnlessEqual(setting.get('pref-name'), name) + self.failUnlessEqual(setting.get('type'), prefType) + self.failUnlessEqual(setting.get('title'), title) + + assertPref(settings[0], 'test', 'bool', u't\u00EBst') + assertPref(settings[1], 'test2', 'string', u't\u00EBst') + assertPref(settings[2], 'test3', 'menulist', '"> 75: + # Ideally we would json-decode this, but it results + # in an annoying 'u' before every string literal, + # since json decoding makes all strings unicode. + contents = eval(contents) + contents = pprint.pformat(contents) + lines = contents.splitlines() + contents = "\n ".join(lines) + print "%s:\n %s" % (normpath(name), contents) + zip.close() + +def document_dir_files(path): + filename_contents_tuples = [] + for dirpath, dirnames, filenames in os.walk(path): + relpath = dirpath[len(path)+1:] + for filename in filenames: + abspath = os.path.join(dirpath, filename) + contents = open(abspath, 'r').read() + contents = "\n ".join(contents.splitlines()) + relfilename = os.path.join(relpath, filename) + filename_contents_tuples.append((normpath(relfilename), contents)) + filename_contents_tuples.sort() + for filename, contents in filename_contents_tuples: + print "%s:" % filename + print " %s" % contents + +def create_xpi(xpiname, pkg_name='aardvark', dirname='static-files', + extra_harness_options={}): + configs = test_packaging.get_configs(pkg_name, dirname) + options = {'main': configs.target_cfg.main, + 'jetpackID': buildJID(configs.target_cfg), } + options.update(configs.build) + xpi.build_xpi(template_root_dir=xpi_template_path, + manifest=fake_manifest, + xpi_path=xpiname, + harness_options=options, + extra_harness_options=extra_harness_options) + +if __name__ == '__main__': + unittest.main()