# 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 mozunit from mozpack.packager.formats import ( FlatFormatter, JarFormatter, OmniJarFormatter, ) from mozpack.packager.unpack import unpack_to_registry from mozpack.copier import ( FileCopier, FileRegistry, ) from mozpack.test.test_packager_formats import ( CONTENTS, fill_formatter, get_contents, ) from mozpack.test.test_files import TestWithTmpDir class TestUnpack(TestWithTmpDir): maxDiff = None @staticmethod def _get_copier(cls): copier = FileCopier() formatter = cls(copier) fill_formatter(formatter, CONTENTS) return copier @classmethod def setUpClass(cls): cls.contents = get_contents(cls._get_copier(FlatFormatter), read_all=True) def _unpack_test(self, cls): # Format a package with the given formatter class copier = self._get_copier(cls) copier.copy(self.tmpdir) # Unpack that package. Its content is expected to match that of a Flat # formatted package. registry = FileRegistry() unpack_to_registry(self.tmpdir, registry) self.assertEqual(get_contents(registry, read_all=True), self.contents) def test_flat_unpack(self): self._unpack_test(FlatFormatter) def test_jar_unpack(self): self._unpack_test(JarFormatter) def test_omnijar_unpack(self): class OmniFooFormatter(OmniJarFormatter): def __init__(self, registry): super(OmniFooFormatter, self).__init__(registry, 'omni.foo') self._unpack_test(OmniFooFormatter) if __name__ == '__main__': mozunit.main()