| OLD | NEW |
| 1 # This Source Code Form is subject to the terms of the Mozilla Public | 1 # This Source Code Form is subject to the terms of the Mozilla Public |
| 2 # License, v. 2.0. If a copy of the MPL was not distributed with this | 2 # License, v. 2.0. If a copy of the MPL was not distributed with this |
| 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| 4 | 4 |
| 5 import difflib | 5 import difflib |
| 6 import json | 6 import json |
| 7 import os | 7 import os |
| 8 import re | 8 import re |
| 9 import shutil | 9 import shutil |
| 10 import zipfile | 10 import zipfile |
| 11 from xml.etree import ElementTree | 11 from xml.etree import ElementTree |
| 12 from struct import unpack | 12 from struct import unpack |
| 13 | 13 |
| 14 import pytest | 14 import pytest |
| 15 from Crypto.Signature import PKCS1_v1_5 | 15 from Crypto.Signature import PKCS1_v1_5 |
| 16 from Crypto.PublicKey import RSA | 16 from Crypto.PublicKey import RSA |
| 17 from Crypto.Hash import SHA | 17 from Crypto.Hash import SHA |
| 18 | 18 |
| 19 from buildtools import packager | 19 from buildtools import packager |
| 20 from buildtools.packagerChrome import defaultLocale | 20 from buildtools.packagerChrome import defaultLocale |
| 21 from buildtools.build import process_args | 21 from buildtools.build import process_args |
| 22 | 22 |
| 23 LOCALES_MODULE = { | 23 LOCALES_MODULE = { |
| 24 'test.Foobar': { | 24 'test.Foobar': { |
| 25 'message': 'Ensuring dict-copy from modules for $domain$', | 25 'message': 'Ensuring dict-copy from modules for $domain$', |
| 26 'description': 'test description', | 26 'description': 'test description', |
| 27 'placeholders': {'content': '$1', 'example': 'www.adblockplus.org'} | 27 'placeholders': {'content': '$1', 'example': 'www.adblockplus.org'}, |
| 28 } | 28 }, |
| 29 } | 29 } |
| 30 | 30 |
| 31 ALL_LANGUAGES = ['en_US', 'de', 'it'] | 31 ALL_LANGUAGES = ['en_US', 'de', 'it'] |
| 32 | 32 |
| 33 MESSAGES_EN_US = json.dumps({ | 33 MESSAGES_EN_US = json.dumps({ |
| 34 'name': {'message': 'Adblock Plus'}, | 34 'name': {'message': 'Adblock Plus'}, |
| 35 'name_devbuild': {'message': 'devbuild-marker'}, | 35 'name_devbuild': {'message': 'devbuild-marker'}, |
| 36 'description': { | 36 'description': { |
| 37 'message': 'Adblock Plus is the most popular ad blocker ever, ' | 37 'message': 'Adblock Plus is the most popular ad blocker ever, ' |
| 38 'and also supports websites by not blocking ' | 38 'and also supports websites by not blocking ' |
| 39 'unobstrusive ads by default (configurable).' | 39 'unobstrusive ads by default (configurable).', |
| 40 }, | 40 }, |
| 41 }) | 41 }) |
| 42 | 42 |
| 43 | 43 |
| 44 class Content(object): | 44 class Content(object): |
| 45 """Base class for a unified ZipFile / Directory interface. | 45 """Base class for a unified ZipFile / Directory interface. |
| 46 | 46 |
| 47 Base class for providing a unified context manager interface for | 47 Base class for providing a unified context manager interface for |
| 48 accessing files. This class is subclassed by ZipContent and DirContent, | 48 accessing files. This class is subclassed by ZipContent and DirContent, |
| 49 which provide the additional methods "namelist()" and "read(path)". | 49 which provide the additional methods "namelist()" and "read(path)". |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 files['qunit/tests/some_test.js'] = 'var passed = true;' | 235 files['qunit/tests/some_test.js'] = 'var passed = true;' |
| 236 | 236 |
| 237 tmpdir.mkdir('lib').join('b.js').write(files['lib/b.js']) | 237 tmpdir.mkdir('lib').join('b.js').write(files['lib/b.js']) |
| 238 ext_dir = tmpdir.mkdir('ext') | 238 ext_dir = tmpdir.mkdir('ext') |
| 239 ext_dir.join('a.js').write(files['ext/a.js']) | 239 ext_dir.join('a.js').write(files['ext/a.js']) |
| 240 ext_dir.join('c.js').write(files['ext/c.js']) | 240 ext_dir.join('c.js').write(files['ext/c.js']) |
| 241 qunit_dir = tmpdir.mkdir('qunit') | 241 qunit_dir = tmpdir.mkdir('qunit') |
| 242 qunit_dir.join('common.js').write(files['qunit/common.js']) | 242 qunit_dir.join('common.js').write(files['qunit/common.js']) |
| 243 qunit_tests_dir = qunit_dir.mkdir('tests') | 243 qunit_tests_dir = qunit_dir.mkdir('tests') |
| 244 qunit_tests_dir.join('some_test.js').write( | 244 qunit_tests_dir.join('some_test.js').write( |
| 245 files['qunit/tests/some_test.js'] | 245 files['qunit/tests/some_test.js'], |
| 246 ) | 246 ) |
| 247 return files | 247 return files |
| 248 | 248 |
| 249 | 249 |
| 250 def comparable_json(json_data): | 250 def comparable_json(json_data): |
| 251 """Create a nonambiguous representation of the given JSON data.""" | 251 """Create a nonambiguous representation of the given JSON data.""" |
| 252 if isinstance(json_data, basestring): | 252 if isinstance(json_data, basestring): |
| 253 json_data = json.loads(json_data) | 253 json_data = json.loads(json_data) |
| 254 return json.dumps( | 254 return json.dumps( |
| 255 json_data, sort_keys=True, indent=0 | 255 json_data, sort_keys=True, indent=0, |
| 256 ).split('\n') | 256 ).split('\n') |
| 257 | 257 |
| 258 | 258 |
| 259 def comparable_xml(xml): | 259 def comparable_xml(xml): |
| 260 """Create a nonambiguous representation of a given XML tree.""" | 260 """Create a nonambiguous representation of a given XML tree.""" |
| 261 def strip(s): | 261 def strip(s): |
| 262 if s is None: | 262 if s is None: |
| 263 return '' | 263 return '' |
| 264 return s.strip() | 264 return s.strip() |
| 265 | 265 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 assert (os.path.join(prefix, 'devenvVersion__') in filenames) == devenv | 317 assert (os.path.join(prefix, 'devenvVersion__') in filenames) == devenv |
| 318 assert (os.path.join(prefix, 'qunit/tests.js') in filenames) == devenv | 318 assert (os.path.join(prefix, 'qunit/tests.js') in filenames) == devenv |
| 319 assert (os.path.join(prefix, 'qunit/tests.js.map') in filenames) == devenv | 319 assert (os.path.join(prefix, 'qunit/tests.js.map') in filenames) == devenv |
| 320 | 320 |
| 321 if devenv: | 321 if devenv: |
| 322 quint_index = package.read(os.path.join(prefix, 'qunit/index.html')) | 322 quint_index = package.read(os.path.join(prefix, 'qunit/index.html')) |
| 323 assert '../ext/common.js' in quint_index | 323 assert '../ext/common.js' in quint_index |
| 324 assert '../ext/background.js' in quint_index | 324 assert '../ext/background.js' in quint_index |
| 325 | 325 |
| 326 assert set(manifest['background']['scripts']) == set( | 326 assert set(manifest['background']['scripts']) == set( |
| 327 scripts + ['devenvPoller__.js'] | 327 scripts + ['devenvPoller__.js'], |
| 328 ) | 328 ) |
| 329 else: | 329 else: |
| 330 assert set(manifest['background']['scripts']) == set(scripts) | 330 assert set(manifest['background']['scripts']) == set(scripts) |
| 331 | 331 |
| 332 | 332 |
| 333 def assert_base_files(package, platform, prefix): | 333 def assert_base_files(package, platform, prefix): |
| 334 filenames = set(package.namelist()) | 334 filenames = set(package.namelist()) |
| 335 | 335 |
| 336 if platform == 'edge': | 336 if platform == 'edge': |
| 337 assert 'AppxManifest.xml' in filenames | 337 assert 'AppxManifest.xml' in filenames |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 manifests = { | 414 manifests = { |
| 415 'gecko': [('', 'manifest', 'json')], | 415 'gecko': [('', 'manifest', 'json')], |
| 416 'chrome': [('', 'manifest', 'json')], | 416 'chrome': [('', 'manifest', 'json')], |
| 417 'edge': [('', 'AppxManifest', 'xml'), | 417 'edge': [('', 'AppxManifest', 'xml'), |
| 418 ('Extension', 'manifest', 'json')], | 418 ('Extension', 'manifest', 'json')], |
| 419 } | 419 } |
| 420 | 420 |
| 421 filenames = { | 421 filenames = { |
| 422 'gecko': 'adblockplusfirefox-1.2.3{}.xpi', | 422 'gecko': 'adblockplusfirefox-1.2.3{}.xpi', |
| 423 'chrome': 'adblockpluschrome-1.2.3{{}}.{}'.format( | 423 'chrome': 'adblockpluschrome-1.2.3{{}}.{}'.format( |
| 424 {True: 'crx', False: 'zip'}[release] | 424 {True: 'crx', False: 'zip'}[release], |
| 425 ), | 425 ), |
| 426 'edge': 'adblockplusedge-1.2.3{}.appx', | 426 'edge': 'adblockplusedge-1.2.3{}.appx', |
| 427 } | 427 } |
| 428 | 428 |
| 429 if platform == 'edge': | 429 if platform == 'edge': |
| 430 prefix = 'Extension' | 430 prefix = 'Extension' |
| 431 else: | 431 else: |
| 432 prefix = '' | 432 prefix = '' |
| 433 | 433 |
| 434 run_webext_build(platform, command, srcdir, keyfile=key) | 434 run_webext_build(platform, command, srcdir, keyfile=key) |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 474 expected = os.path.join( | 474 expected = os.path.join( |
| 475 os.path.dirname(__file__), | 475 os.path.dirname(__file__), |
| 476 'expecteddata', | 476 'expecteddata', |
| 477 filename.format(name, ext), | 477 filename.format(name, ext), |
| 478 ) | 478 ) |
| 479 | 479 |
| 480 assert_manifest_content( | 480 assert_manifest_content( |
| 481 package.read(os.path.join(folder, '{}.{}'.format(name, ext))), | 481 package.read(os.path.join(folder, '{}.{}'.format(name, ext))), |
| 482 expected, | 482 expected, |
| 483 ) | 483 ) |
| OLD | NEW |