def test_jarrer(self): copier = Jarrer() copier.add('foo/bar', GeneratedFile('foobar')) copier.add('foo/qux', GeneratedFile('fooqux')) copier.add('foo/deep/nested/directory/file', GeneratedFile('fooz')) copier.add('bar', GeneratedFile('bar')) copier.add('qux/foo', GeneratedFile('quxfoo')) copier.add('qux/bar', GeneratedFile('')) dest = MockDest() copier.copy(dest) self.check_jar(dest, copier) copier.remove('foo') copier.add('test', GeneratedFile('test')) copier.copy(dest) self.check_jar(dest, copier) copier.remove('test') copier.add('test', GeneratedFile('replaced-content')) copier.copy(dest) self.check_jar(dest, copier) copier.copy(dest) self.check_jar(dest, copier) preloaded = ['qux/bar', 'bar'] copier.preload(preloaded) copier.copy(dest) dest.seek(0) jar = JarReader(fileobj=dest) self.assertEqual([f.filename for f in jar], preloaded + [p for p in copier.paths() if not p in preloaded]) self.assertEqual(jar.last_preloaded, preloaded[-1])
def test_rejar(self): s = MockDest() with JarWriter(fileobj=s) as jar: jar.add("foo", b"foo") jar.add("bar", b"aaaaaaaaaaaaanopqrstuvwxyz") jar.add("baz/qux", b"aaaaaaaaaaaaanopqrstuvwxyz", False) new = MockDest() with JarWriter(fileobj=new) as jar: for j in JarReader(fileobj=s): jar.add(j.filename, j) jar = JarReader(fileobj=new) files = [j for j in jar] self.assertEqual(files[0].filename, "foo") self.assertFalse(files[0].compressed) self.assertEqual(files[0].read(), b"foo") self.assertEqual(files[1].filename, "bar") self.assertTrue(files[1].compressed) self.assertEqual(files[1].read(), b"aaaaaaaaaaaaanopqrstuvwxyz") self.assertEqual(files[2].filename, "baz/qux") self.assertTrue(files[2].compressed) self.assertEqual(files[2].read(), b"aaaaaaaaaaaaanopqrstuvwxyz")
def test_unified_build_finder(self): self.create_both('chrome.manifest', 'a\nb\nc\n') self.create_one('a', 'chrome/chrome.manifest', 'a\nb\nc\n') self.create_one('b', 'chrome/chrome.manifest', 'b\nc\na\n') self.create_one('a', 'chrome/browser/foo/buildconfig.html', '\n'.join([ '<html>', '<body>', '<h1>about:buildconfig</h1>', '<div>foo</div>', '</body>', '</html>', ])) self.create_one('b', 'chrome/browser/foo/buildconfig.html', '\n'.join([ '<html>', '<body>', '<h1>about:buildconfig</h1>', '<div>bar</div>', '</body>', '</html>', ])) finder = UnifiedBuildFinder(FileFinder(self.tmppath('a')), FileFinder(self.tmppath('b'))) self.assertEqual(sorted([(f, c.open().read()) for f, c in finder.find('**/chrome.manifest')]), [('chrome.manifest', 'a\nb\nc\n'), ('chrome/chrome.manifest', 'a\nb\nc\n')]) self.assertEqual(sorted([(f, c.open().read()) for f, c in finder.find('**/buildconfig.html')]), [('chrome/browser/foo/buildconfig.html', '\n'.join([ '<html>', '<body>', '<h1>about:buildconfig</h1>', '<div>foo</div>', '<hr> </hr>', '<div>bar</div>', '</body>', '</html>', ]))]) xpi = MockDest() with JarWriter(fileobj=xpi, compress=True) as jar: jar.add('foo', 'foo') jar.add('bar', 'bar') foo_xpi = xpi.read() self.create_both('foo.xpi', foo_xpi) with JarWriter(fileobj=xpi, compress=True) as jar: jar.add('foo', 'bar') self.create_one('a', 'bar.xpi', foo_xpi) self.create_one('b', 'bar.xpi', xpi.read()) errors.out = StringIO() with self.assertRaises(AccumulatedErrors), errors.accumulate(): self.assertEqual([(f, c.open().read()) for f, c in finder.find('*.xpi')], [('foo.xpi', foo_xpi)]) errors.out = sys.stderr
def test_rejar(self): s = MockDest() with JarWriter(fileobj=s) as jar: jar.add('foo', 'foo') jar.add('bar', 'aaaaaaaaaaaaanopqrstuvwxyz') jar.add('baz/qux', 'aaaaaaaaaaaaanopqrstuvwxyz', False) new = MockDest() with JarWriter(fileobj=new) as jar: for j in JarReader(fileobj=s): jar.add(j.filename, j) jar = JarReader(fileobj=new) files = [j for j in jar] self.assertEqual(files[0].filename, 'foo') self.assertFalse(files[0].compressed) self.assertEqual(files[0].read(), 'foo') self.assertEqual(files[1].filename, 'bar') self.assertTrue(files[1].compressed) self.assertEqual(files[1].read(), 'aaaaaaaaaaaaanopqrstuvwxyz') self.assertEqual(files[2].filename, 'baz/qux') self.assertTrue(files[2].compressed) self.assertEqual(files[2].read(), 'aaaaaaaaaaaaanopqrstuvwxyz')
def test_jarrer(self): copier = Jarrer() copier.add("foo/bar", GeneratedFile("foobar")) copier.add("foo/qux", GeneratedFile("fooqux")) copier.add("foo/deep/nested/directory/file", GeneratedFile("fooz")) copier.add("bar", GeneratedFile("bar")) copier.add("qux/foo", GeneratedFile("quxfoo")) copier.add("qux/bar", GeneratedFile("")) dest = MockDest() copier.copy(dest) self.check_jar(dest, copier) copier.remove("foo") copier.add("test", GeneratedFile("test")) copier.copy(dest) self.check_jar(dest, copier) copier.remove("test") copier.add("test", GeneratedFile("replaced-content")) copier.copy(dest) self.check_jar(dest, copier) copier.copy(dest) self.check_jar(dest, copier) preloaded = ["qux/bar", "bar"] copier.preload(preloaded) copier.copy(dest) dest.seek(0) jar = JarReader(fileobj=dest) self.assertEqual([f.filename for f in jar], preloaded + [p for p in copier.paths() if not p in preloaded]) self.assertEqual(jar.last_preloaded, preloaded[-1])
def test_jarrer_compress(self): copier = Jarrer() copier.add('foo/bar', GeneratedFile('ffffff')) copier.add('foo/qux', GeneratedFile('ffffff'), compress=False) dest = MockDest() copier.copy(dest) self.check_jar(dest, copier) dest.seek(0) jar = JarReader(fileobj=dest) self.assertTrue(jar['foo/bar'].compressed) self.assertFalse(jar['foo/qux'].compressed)
def test_jarrer_compress(self): copier = Jarrer() copier.add("foo/bar", GeneratedFile(b"ffffff")) copier.add("foo/qux", GeneratedFile(b"ffffff"), compress=False) dest = MockDest() copier.copy(dest) self.check_jar(dest, copier) dest.seek(0) jar = JarReader(fileobj=dest) self.assertTrue(jar["foo/bar"].compressed) self.assertFalse(jar["foo/qux"].compressed)
def test_add_from_finder(self): s = MockDest() with JarWriter(fileobj=s) as jar: finder = FileFinder(test_data_path) for p, f in finder.find("test_data"): jar.add("test_data", f) jar = JarReader(fileobj=s) files = [j for j in jar] self.assertEqual(files[0].filename, "test_data") self.assertFalse(files[0].compressed) self.assertEqual(files[0].read(), b"test_data")
def get_contents(registry, read_all=False): result = {} for k, v in registry: if k.endswith('.xpt'): tmpfile = MockDest() registry[k].copy(tmpfile) result[k] = read_interfaces(tmpfile) elif isinstance(v, FileRegistry): result[k] = get_contents(v) elif isinstance(v, ManifestFile) or read_all: result[k] = v.open().read().splitlines() else: result[k] = v return result
def test_jarrer(self): copier = Jarrer() copier.add("foo/bar", GeneratedFile(b"foobar")) copier.add("foo/qux", GeneratedFile(b"fooqux")) copier.add("foo/deep/nested/directory/file", GeneratedFile(b"fooz")) copier.add("bar", GeneratedFile(b"bar")) copier.add("qux/foo", GeneratedFile(b"quxfoo")) copier.add("qux/bar", GeneratedFile(b"")) dest = MockDest() copier.copy(dest) self.check_jar(dest, copier) copier.remove("foo") copier.add("test", GeneratedFile(b"test")) copier.copy(dest) self.check_jar(dest, copier) copier.remove("test") copier.add("test", GeneratedFile(b"replaced-content")) copier.copy(dest) self.check_jar(dest, copier) copier.copy(dest) self.check_jar(dest, copier) preloaded = ["qux/bar", "bar"] copier.preload(preloaded) copier.copy(dest) dest.seek(0) jar = JarReader(fileobj=dest) self.assertEqual( [f.filename for f in jar], preloaded + [p for p in copier.paths() if p not in preloaded], ) self.assertEqual(jar.last_preloaded, preloaded[-1])
def test_preload(self): s = MockDest() with JarWriter(fileobj=s) as jar: jar.add("foo", b"foo") jar.add("bar", b"abcdefghijklmnopqrstuvwxyz") jar.add("baz/qux", b"aaaaaaaaaaaaanopqrstuvwxyz") jar = JarReader(fileobj=s) self.assertEqual(jar.last_preloaded, None) with JarWriter(fileobj=s) as jar: jar.add("foo", b"foo") jar.add("bar", b"abcdefghijklmnopqrstuvwxyz") jar.add("baz/qux", b"aaaaaaaaaaaaanopqrstuvwxyz") jar.preload(["baz/qux", "bar"]) jar = JarReader(fileobj=s) self.assertEqual(jar.last_preloaded, "bar") files = [j for j in jar] self.assertEqual(files[0].filename, "baz/qux") self.assertEqual(files[1].filename, "bar") self.assertEqual(files[2].filename, "foo")
def test_preload(self): s = MockDest() with JarWriter(fileobj=s) as jar: jar.add('foo', 'foo') jar.add('bar', 'abcdefghijklmnopqrstuvwxyz') jar.add('baz/qux', 'aaaaaaaaaaaaanopqrstuvwxyz') jar = JarReader(fileobj=s) self.assertEqual(jar.last_preloaded, None) with JarWriter(fileobj=s) as jar: jar.add('foo', 'foo') jar.add('bar', 'abcdefghijklmnopqrstuvwxyz') jar.add('baz/qux', 'aaaaaaaaaaaaanopqrstuvwxyz') jar.preload(['baz/qux', 'bar']) jar = JarReader(fileobj=s) self.assertEqual(jar.last_preloaded, 'bar') files = [j for j in jar] self.assertEqual(files[0].filename, 'baz/qux') self.assertEqual(files[1].filename, 'bar') self.assertEqual(files[2].filename, 'foo')
def test_jar(self): s = MockDest() with JarWriter(fileobj=s) as jar: jar.add("foo", b"foo") self.assertRaises(JarWriterError, jar.add, "foo", b"bar") jar.add("bar", b"aaaaaaaaaaaaanopqrstuvwxyz") jar.add("baz/qux", b"aaaaaaaaaaaaanopqrstuvwxyz", False) jar.add("baz\\backslash", b"aaaaaaaaaaaaaaa") files = [j for j in JarReader(fileobj=s)] self.assertEqual(files[0].filename, "foo") self.assertFalse(files[0].compressed) self.assertEqual(files[0].read(), b"foo") self.assertEqual(files[1].filename, "bar") self.assertTrue(files[1].compressed) self.assertEqual(files[1].read(), b"aaaaaaaaaaaaanopqrstuvwxyz") self.assertEqual(files[2].filename, "baz/qux") self.assertFalse(files[2].compressed) self.assertEqual(files[2].read(), b"aaaaaaaaaaaaanopqrstuvwxyz") if os.sep == "\\": self.assertEqual( files[3].filename, "baz/backslash", "backslashes in filenames on Windows should get normalized", ) else: self.assertEqual( files[3].filename, "baz\\backslash", "backslashes in filenames on POSIX platform are untouched", ) s = MockDest() with JarWriter(fileobj=s, compress=False) as jar: jar.add("bar", b"aaaaaaaaaaaaanopqrstuvwxyz") jar.add("foo", b"foo") jar.add("baz/qux", b"aaaaaaaaaaaaanopqrstuvwxyz", True) jar = JarReader(fileobj=s) files = [j for j in jar] self.assertEqual(files[0].filename, "bar") self.assertFalse(files[0].compressed) self.assertEqual(files[0].read(), b"aaaaaaaaaaaaanopqrstuvwxyz") self.assertEqual(files[1].filename, "foo") self.assertFalse(files[1].compressed) self.assertEqual(files[1].read(), b"foo") self.assertEqual(files[2].filename, "baz/qux") self.assertTrue(files[2].compressed) self.assertEqual(files[2].read(), b"aaaaaaaaaaaaanopqrstuvwxyz") self.assertTrue("bar" in jar) self.assertTrue("foo" in jar) self.assertFalse("baz" in jar) self.assertTrue("baz/qux" in jar) self.assertTrue(jar["bar"], files[1]) self.assertTrue(jar["foo"], files[0]) self.assertTrue(jar["baz/qux"], files[2]) s.seek(0) jar = JarReader(fileobj=s) self.assertTrue("bar" in jar) self.assertTrue("foo" in jar) self.assertFalse("baz" in jar) self.assertTrue("baz/qux" in jar) files[0].seek(0) self.assertEqual(jar["bar"].filename, files[0].filename) self.assertEqual(jar["bar"].compressed, files[0].compressed) self.assertEqual(jar["bar"].read(), files[0].read()) files[1].seek(0) self.assertEqual(jar["foo"].filename, files[1].filename) self.assertEqual(jar["foo"].compressed, files[1].compressed) self.assertEqual(jar["foo"].read(), files[1].read()) files[2].seek(0) self.assertEqual(jar["baz/qux"].filename, files[2].filename) self.assertEqual(jar["baz/qux"].compressed, files[2].compressed) self.assertEqual(jar["baz/qux"].read(), files[2].read())
def test_unified_build_finder(self): finder = UnifiedBuildFinder(FileFinder(self.tmppath('a')), FileFinder(self.tmppath('b'))) # Test chrome.manifest unification self.create_both('chrome.manifest', 'a\nb\nc\n') self.create_one('a', 'chrome/chrome.manifest', 'a\nb\nc\n') self.create_one('b', 'chrome/chrome.manifest', 'b\nc\na\n') self.assertEqual(sorted([(f, c.open().read()) for f, c in finder.find('**/chrome.manifest')]), [('chrome.manifest', 'a\nb\nc\n'), ('chrome/chrome.manifest', 'a\nb\nc\n')]) # Test buildconfig.html unification self.create_one('a', 'chrome/browser/foo/buildconfig.html', '\n'.join([ '<html>', '<body>', '<h1>about:buildconfig</h1>', '<div>foo</div>', '</body>', '</html>', ])) self.create_one('b', 'chrome/browser/foo/buildconfig.html', '\n'.join([ '<html>', '<body>', '<h1>about:buildconfig</h1>', '<div>bar</div>', '</body>', '</html>', ])) self.assertEqual(sorted([(f, c.open().read()) for f, c in finder.find('**/buildconfig.html')]), [('chrome/browser/foo/buildconfig.html', '\n'.join([ '<html>', '<body>', '<h1>about:buildconfig</h1>', '<div>foo</div>', '<hr> </hr>', '<div>bar</div>', '</body>', '</html>', ]))]) # Test xpi file unification xpi = MockDest() with JarWriter(fileobj=xpi, compress=True) as jar: jar.add('foo', 'foo') jar.add('bar', 'bar') foo_xpi = xpi.read() self.create_both('foo.xpi', foo_xpi) with JarWriter(fileobj=xpi, compress=True) as jar: jar.add('foo', 'bar') self.create_one('a', 'bar.xpi', foo_xpi) self.create_one('b', 'bar.xpi', xpi.read()) errors.out = StringIO() with self.assertRaises(AccumulatedErrors), errors.accumulate(): self.assertEqual([(f, c.open().read()) for f, c in finder.find('*.xpi')], [('foo.xpi', foo_xpi)]) errors.out = sys.stderr # Test install.rdf unification x86_64 = 'Darwin_x86_64-gcc3' x86 = 'Darwin_x86-gcc3' target_tag = '<{em}targetPlatform>{platform}</{em}targetPlatform>' target_attr = '{em}targetPlatform="{platform}" ' rdf_tag = ''.join([ '<{RDF}Description {em}bar="bar" {em}qux="qux">', '<{em}foo>foo</{em}foo>', '{targets}', '<{em}baz>baz</{em}baz>', '</{RDF}Description>' ]) rdf_attr = ''.join([ '<{RDF}Description {em}bar="bar" {attr}{em}qux="qux">', '{targets}', '<{em}foo>foo</{em}foo><{em}baz>baz</{em}baz>', '</{RDF}Description>' ]) for descr_ns, target_ns in (('RDF:', ''), ('', 'em:'), ('RDF:', 'em:')): # First we need to infuse the above strings with our namespaces and # platform values. ns = { 'RDF': descr_ns, 'em': target_ns } target_tag_x86_64 = target_tag.format(platform=x86_64, **ns) target_tag_x86 = target_tag.format(platform=x86, **ns) target_attr_x86_64 = target_attr.format(platform=x86_64, **ns) target_attr_x86 = target_attr.format(platform=x86, **ns) tag_x86_64 = rdf_tag.format(targets=target_tag_x86_64, **ns) tag_x86 = rdf_tag.format(targets=target_tag_x86, **ns) tag_merged = rdf_tag.format(targets=target_tag_x86_64 + target_tag_x86, **ns) tag_empty = rdf_tag.format(targets="", **ns) attr_x86_64 = rdf_attr.format(attr=target_attr_x86_64, targets="", **ns) attr_x86 = rdf_attr.format(attr=target_attr_x86, targets="", **ns) attr_merged = rdf_attr.format(attr="", targets=target_tag_x86_64 + target_tag_x86, **ns) # This table defines the test cases, columns "a" and "b" being the # contents of the install.rdf of the respective platform and # "result" the exepected merged content after unification. testcases = ( #_____a_____ _____b_____ ___result___# (tag_x86_64, tag_x86, tag_merged ), (tag_x86_64, tag_empty, tag_empty ), (tag_empty, tag_x86, tag_empty ), (tag_empty, tag_empty, tag_empty ), (attr_x86_64, attr_x86, attr_merged ), (tag_x86_64, attr_x86, tag_merged ), (attr_x86_64, tag_x86, attr_merged ), (attr_x86_64, tag_empty, tag_empty ), (tag_empty, attr_x86, tag_empty ) ) # Now create the files from the above table and compare results = [] for emid, (rdf_a, rdf_b, result) in enumerate(testcases): filename = 'ext/id{0}/install.rdf'.format(emid) self.create_one('a', filename, rdf_a) self.create_one('b', filename, rdf_b) results.append((filename, result)) self.assertEqual(sorted([(f, c.open().read()) for f, c in finder.find('**/install.rdf')]), results)
def test_jar(self): s = MockDest() with JarWriter(fileobj=s, optimize=self.optimize) as jar: jar.add('foo', 'foo') self.assertRaises(JarWriterError, jar.add, 'foo', 'bar') jar.add('bar', 'aaaaaaaaaaaaanopqrstuvwxyz') jar.add('baz/qux', 'aaaaaaaaaaaaanopqrstuvwxyz', False) jar.add('baz\\backslash', 'aaaaaaaaaaaaaaa') files = [j for j in JarReader(fileobj=s)] self.assertEqual(files[0].filename, 'foo') self.assertFalse(files[0].compressed) self.assertEqual(files[0].read(), 'foo') self.assertEqual(files[1].filename, 'bar') self.assertTrue(files[1].compressed) self.assertEqual(files[1].read(), 'aaaaaaaaaaaaanopqrstuvwxyz') self.assertEqual(files[2].filename, 'baz/qux') self.assertFalse(files[2].compressed) self.assertEqual(files[2].read(), 'aaaaaaaaaaaaanopqrstuvwxyz') if os.sep == '\\': self.assertEqual(files[3].filename, 'baz/backslash', 'backslashes in filenames on Windows should get normalized') else: self.assertEqual(files[3].filename, 'baz\\backslash', 'backslashes in filenames on POSIX platform are untouched') s = MockDest() with JarWriter(fileobj=s, compress=False, optimize=self.optimize) as jar: jar.add('bar', 'aaaaaaaaaaaaanopqrstuvwxyz') jar.add('foo', 'foo') jar.add('baz/qux', 'aaaaaaaaaaaaanopqrstuvwxyz', True) jar = JarReader(fileobj=s) files = [j for j in jar] self.assertEqual(files[0].filename, 'bar') self.assertFalse(files[0].compressed) self.assertEqual(files[0].read(), 'aaaaaaaaaaaaanopqrstuvwxyz') self.assertEqual(files[1].filename, 'foo') self.assertFalse(files[1].compressed) self.assertEqual(files[1].read(), 'foo') self.assertEqual(files[2].filename, 'baz/qux') self.assertTrue(files[2].compressed) self.assertEqual(files[2].read(), 'aaaaaaaaaaaaanopqrstuvwxyz') self.assertTrue('bar' in jar) self.assertTrue('foo' in jar) self.assertFalse('baz' in jar) self.assertTrue('baz/qux' in jar) self.assertTrue(jar['bar'], files[1]) self.assertTrue(jar['foo'], files[0]) self.assertTrue(jar['baz/qux'], files[2]) s.seek(0) jar = JarReader(fileobj=s) self.assertTrue('bar' in jar) self.assertTrue('foo' in jar) self.assertFalse('baz' in jar) self.assertTrue('baz/qux' in jar) files[0].seek(0) self.assertEqual(jar['bar'].filename, files[0].filename) self.assertEqual(jar['bar'].compressed, files[0].compressed) self.assertEqual(jar['bar'].read(), files[0].read()) files[1].seek(0) self.assertEqual(jar['foo'].filename, files[1].filename) self.assertEqual(jar['foo'].compressed, files[1].compressed) self.assertEqual(jar['foo'].read(), files[1].read()) files[2].seek(0) self.assertEqual(jar['baz/qux'].filename, files[2].filename) self.assertEqual(jar['baz/qux'].compressed, files[2].compressed) self.assertEqual(jar['baz/qux'].read(), files[2].read())
def test_jar(self): s = MockDest() with JarWriter(fileobj=s, optimize=self.optimize) as jar: jar.add('foo', 'foo') self.assertRaises(JarWriterError, jar.add, 'foo', 'bar') jar.add('bar', 'aaaaaaaaaaaaanopqrstuvwxyz') jar.add('baz/qux', 'aaaaaaaaaaaaanopqrstuvwxyz', False) files = [j for j in JarReader(fileobj=s)] self.assertEqual(files[0].filename, 'foo') self.assertFalse(files[0].compressed) self.assertEqual(files[0].read(), 'foo') self.assertEqual(files[1].filename, 'bar') self.assertTrue(files[1].compressed) self.assertEqual(files[1].read(), 'aaaaaaaaaaaaanopqrstuvwxyz') self.assertEqual(files[2].filename, 'baz/qux') self.assertFalse(files[2].compressed) self.assertEqual(files[2].read(), 'aaaaaaaaaaaaanopqrstuvwxyz') s = MockDest() with JarWriter(fileobj=s, compress=False, optimize=self.optimize) as jar: jar.add('bar', 'aaaaaaaaaaaaanopqrstuvwxyz') jar.add('foo', 'foo') jar.add('baz/qux', 'aaaaaaaaaaaaanopqrstuvwxyz', True) jar = JarReader(fileobj=s) files = [j for j in jar] self.assertEqual(files[0].filename, 'bar') self.assertFalse(files[0].compressed) self.assertEqual(files[0].read(), 'aaaaaaaaaaaaanopqrstuvwxyz') self.assertEqual(files[1].filename, 'foo') self.assertFalse(files[1].compressed) self.assertEqual(files[1].read(), 'foo') self.assertEqual(files[2].filename, 'baz/qux') self.assertTrue(files[2].compressed) self.assertEqual(files[2].read(), 'aaaaaaaaaaaaanopqrstuvwxyz') self.assertTrue('bar' in jar) self.assertTrue('foo' in jar) self.assertFalse('baz' in jar) self.assertTrue('baz/qux' in jar) self.assertTrue(jar['bar'], files[1]) self.assertTrue(jar['foo'], files[0]) self.assertTrue(jar['baz/qux'], files[2]) s.seek(0) jar = JarReader(fileobj=s) self.assertTrue('bar' in jar) self.assertTrue('foo' in jar) self.assertFalse('baz' in jar) self.assertTrue('baz/qux' in jar) files[0].seek(0) self.assertEqual(jar['bar'].filename, files[0].filename) self.assertEqual(jar['bar'].compressed, files[0].compressed) self.assertEqual(jar['bar'].read(), files[0].read()) files[1].seek(0) self.assertEqual(jar['foo'].filename, files[1].filename) self.assertEqual(jar['foo'].compressed, files[1].compressed) self.assertEqual(jar['foo'].read(), files[1].read()) files[2].seek(0) self.assertEqual(jar['baz/qux'].filename, files[2].filename) self.assertEqual(jar['baz/qux'].compressed, files[2].compressed) self.assertEqual(jar['baz/qux'].read(), files[2].read())
def test_unified_build_finder(self): finder = UnifiedBuildFinder(FileFinder(self.tmppath('a')), FileFinder(self.tmppath('b'))) # Test chrome.manifest unification self.create_both('chrome.manifest', 'a\nb\nc\n') self.create_one('a', 'chrome/chrome.manifest', 'a\nb\nc\n') self.create_one('b', 'chrome/chrome.manifest', 'b\nc\na\n') self.assertEqual( sorted([(f, c.open().read()) for f, c in finder.find('**/chrome.manifest')]), [('chrome.manifest', 'a\nb\nc\n'), ('chrome/chrome.manifest', 'a\nb\nc\n')]) # Test buildconfig.html unification self.create_one( 'a', 'chrome/browser/foo/buildconfig.html', '\n'.join([ '<html>', '<body>', '<h1>about:buildconfig</h1>', '<div>foo</div>', '</body>', '</html>', ])) self.create_one( 'b', 'chrome/browser/foo/buildconfig.html', '\n'.join([ '<html>', '<body>', '<h1>about:buildconfig</h1>', '<div>bar</div>', '</body>', '</html>', ])) self.assertEqual( sorted([(f, c.open().read()) for f, c in finder.find('**/buildconfig.html')]), [('chrome/browser/foo/buildconfig.html', '\n'.join([ '<html>', '<body>', '<h1>about:buildconfig</h1>', '<div>foo</div>', '<hr> </hr>', '<div>bar</div>', '</body>', '</html>', ]))]) # Test xpi file unification xpi = MockDest() with JarWriter(fileobj=xpi, compress=True) as jar: jar.add('foo', 'foo') jar.add('bar', 'bar') foo_xpi = xpi.read() self.create_both('foo.xpi', foo_xpi) with JarWriter(fileobj=xpi, compress=True) as jar: jar.add('foo', 'bar') self.create_one('a', 'bar.xpi', foo_xpi) self.create_one('b', 'bar.xpi', xpi.read()) errors.out = StringIO() with self.assertRaises(AccumulatedErrors), errors.accumulate(): self.assertEqual([(f, c.open().read()) for f, c in finder.find('*.xpi')], [('foo.xpi', foo_xpi)]) errors.out = sys.stderr # Test install.rdf unification x86_64 = 'Darwin_x86_64-gcc3' x86 = 'Darwin_x86-gcc3' target_tag = '<{em}targetPlatform>{platform}</{em}targetPlatform>' target_attr = '{em}targetPlatform="{platform}" ' rdf_tag = ''.join([ '<{RDF}Description {em}bar="bar" {em}qux="qux">', '<{em}foo>foo</{em}foo>', '{targets}', '<{em}baz>baz</{em}baz>', '</{RDF}Description>' ]) rdf_attr = ''.join([ '<{RDF}Description {em}bar="bar" {attr}{em}qux="qux">', '{targets}', '<{em}foo>foo</{em}foo><{em}baz>baz</{em}baz>', '</{RDF}Description>' ]) for descr_ns, target_ns in (('RDF:', ''), ('', 'em:'), ('RDF:', 'em:')): # First we need to infuse the above strings with our namespaces and # platform values. ns = {'RDF': descr_ns, 'em': target_ns} target_tag_x86_64 = target_tag.format(platform=x86_64, **ns) target_tag_x86 = target_tag.format(platform=x86, **ns) target_attr_x86_64 = target_attr.format(platform=x86_64, **ns) target_attr_x86 = target_attr.format(platform=x86, **ns) tag_x86_64 = rdf_tag.format(targets=target_tag_x86_64, **ns) tag_x86 = rdf_tag.format(targets=target_tag_x86, **ns) tag_merged = rdf_tag.format(targets=target_tag_x86_64 + target_tag_x86, **ns) tag_empty = rdf_tag.format(targets="", **ns) attr_x86_64 = rdf_attr.format(attr=target_attr_x86_64, targets="", **ns) attr_x86 = rdf_attr.format(attr=target_attr_x86, targets="", **ns) attr_merged = rdf_attr.format(attr="", targets=target_tag_x86_64 + target_tag_x86, **ns) # This table defines the test cases, columns "a" and "b" being the # contents of the install.rdf of the respective platform and # "result" the exepected merged content after unification. testcases = ( #_____a_____ _____b_____ ___result___# (tag_x86_64, tag_x86, tag_merged), (tag_x86_64, tag_empty, tag_empty), (tag_empty, tag_x86, tag_empty), (tag_empty, tag_empty, tag_empty), (attr_x86_64, attr_x86, attr_merged), (tag_x86_64, attr_x86, tag_merged), (attr_x86_64, tag_x86, attr_merged), (attr_x86_64, tag_empty, tag_empty), (tag_empty, attr_x86, tag_empty)) # Now create the files from the above table and compare results = [] for emid, (rdf_a, rdf_b, result) in enumerate(testcases): filename = 'ext/id{0}/install.rdf'.format(emid) self.create_one('a', filename, rdf_a) self.create_one('b', filename, rdf_b) results.append((filename, result)) self.assertEqual( sorted([(f, c.open().read()) for f, c in finder.find('**/install.rdf')]), results)
def test_unified_build_finder(self): finder = UnifiedBuildFinder(FileFinder(self.tmppath("a")), FileFinder(self.tmppath("b"))) # Test chrome.manifest unification self.create_both("chrome.manifest", "a\nb\nc\n") self.create_one("a", "chrome/chrome.manifest", "a\nb\nc\n") self.create_one("b", "chrome/chrome.manifest", "b\nc\na\n") self.assertEqual( sorted([(f, c.open().read().decode("utf-8")) for f, c in finder.find("**/chrome.manifest")]), [("chrome.manifest", "a\nb\nc\n"), ("chrome/chrome.manifest", "a\nb\nc\n")], ) # Test buildconfig.html unification self.create_one( "a", "chrome/browser/foo/buildconfig.html", "\n".join([ "<html>", " <body>", " <div>", " <h1>Build Configuration</h1>", " <div>foo</div>", " </div>", " </body>", "</html>", ]), ) self.create_one( "b", "chrome/browser/foo/buildconfig.html", "\n".join([ "<html>", " <body>", " <div>", " <h1>Build Configuration</h1>", " <div>bar</div>", " </div>", " </body>", "</html>", ]), ) self.assertEqual( sorted([(f, c.open().read().decode("utf-8")) for f, c in finder.find("**/buildconfig.html")]), [( "chrome/browser/foo/buildconfig.html", "\n".join([ "<html>", " <body>", " <div>", " <h1>Build Configuration</h1>", " <div>foo</div>", " <hr> </hr>", " <div>bar</div>", " </div>", " </body>", "</html>", ]), )], ) # Test xpi file unification xpi = MockDest() with JarWriter(fileobj=xpi, compress=True) as jar: jar.add("foo", "foo") jar.add("bar", "bar") foo_xpi = xpi.read() self.create_both("foo.xpi", foo_xpi) with JarWriter(fileobj=xpi, compress=True) as jar: jar.add("foo", "bar") self.create_one("a", "bar.xpi", foo_xpi) self.create_one("b", "bar.xpi", xpi.read()) errors.out = StringIO() with self.assertRaises(AccumulatedErrors), errors.accumulate(): self.assertEqual( [(f, c.open().read()) for f, c in finder.find("*.xpi")], [("foo.xpi", foo_xpi)], ) errors.out = sys.stderr # Test install.rdf unification x86_64 = "Darwin_x86_64-gcc3" x86 = "Darwin_x86-gcc3" target_tag = "<{em}targetPlatform>{platform}</{em}targetPlatform>" target_attr = '{em}targetPlatform="{platform}" ' rdf_tag = "".join([ '<{RDF}Description {em}bar="bar" {em}qux="qux">', "<{em}foo>foo</{em}foo>", "{targets}", "<{em}baz>baz</{em}baz>", "</{RDF}Description>", ]) rdf_attr = "".join([ '<{RDF}Description {em}bar="bar" {attr}{em}qux="qux">', "{targets}", "<{em}foo>foo</{em}foo><{em}baz>baz</{em}baz>", "</{RDF}Description>", ]) for descr_ns, target_ns in (("RDF:", ""), ("", "em:"), ("RDF:", "em:")): # First we need to infuse the above strings with our namespaces and # platform values. ns = {"RDF": descr_ns, "em": target_ns} target_tag_x86_64 = target_tag.format(platform=x86_64, **ns) target_tag_x86 = target_tag.format(platform=x86, **ns) target_attr_x86_64 = target_attr.format(platform=x86_64, **ns) target_attr_x86 = target_attr.format(platform=x86, **ns) tag_x86_64 = rdf_tag.format(targets=target_tag_x86_64, **ns) tag_x86 = rdf_tag.format(targets=target_tag_x86, **ns) tag_merged = rdf_tag.format(targets=target_tag_x86_64 + target_tag_x86, **ns) tag_empty = rdf_tag.format(targets="", **ns) attr_x86_64 = rdf_attr.format(attr=target_attr_x86_64, targets="", **ns) attr_x86 = rdf_attr.format(attr=target_attr_x86, targets="", **ns) attr_merged = rdf_attr.format(attr="", targets=target_tag_x86_64 + target_tag_x86, **ns) # This table defines the test cases, columns "a" and "b" being the # contents of the install.rdf of the respective platform and # "result" the exepected merged content after unification. testcases = ( # _____a_____ _____b_____ ___result___# (tag_x86_64, tag_x86, tag_merged), (tag_x86_64, tag_empty, tag_empty), (tag_empty, tag_x86, tag_empty), (tag_empty, tag_empty, tag_empty), (attr_x86_64, attr_x86, attr_merged), (tag_x86_64, attr_x86, tag_merged), (attr_x86_64, tag_x86, attr_merged), (attr_x86_64, tag_empty, tag_empty), (tag_empty, attr_x86, tag_empty), ) # Now create the files from the above table and compare results = [] for emid, (rdf_a, rdf_b, result) in enumerate(testcases): filename = "ext/id{0}/install.rdf".format(emid) self.create_one("a", filename, rdf_a) self.create_one("b", filename, rdf_b) results.append((filename, result)) self.assertEqual( sorted([(f, c.open().read().decode("utf-8")) for f, c in finder.find("**/install.rdf")]), results, )
def test_jar(self): s = MockDest() with JarWriter(fileobj=s) as jar: jar.add('foo', 'foo') self.assertRaises(JarWriterError, jar.add, 'foo', 'bar') jar.add('bar', 'aaaaaaaaaaaaanopqrstuvwxyz') jar.add('baz/qux', 'aaaaaaaaaaaaanopqrstuvwxyz', False) jar.add('baz\\backslash', 'aaaaaaaaaaaaaaa') files = [j for j in JarReader(fileobj=s)] self.assertEqual(files[0].filename, 'foo') self.assertFalse(files[0].compressed) self.assertEqual(files[0].read(), 'foo') self.assertEqual(files[1].filename, 'bar') self.assertTrue(files[1].compressed) self.assertEqual(files[1].read(), 'aaaaaaaaaaaaanopqrstuvwxyz') self.assertEqual(files[2].filename, 'baz/qux') self.assertFalse(files[2].compressed) self.assertEqual(files[2].read(), 'aaaaaaaaaaaaanopqrstuvwxyz') if os.sep == '\\': self.assertEqual(files[3].filename, 'baz/backslash', 'backslashes in filenames on Windows should get normalized') else: self.assertEqual(files[3].filename, 'baz\\backslash', 'backslashes in filenames on POSIX platform are untouched') s = MockDest() with JarWriter(fileobj=s, compress=False) as jar: jar.add('bar', 'aaaaaaaaaaaaanopqrstuvwxyz') jar.add('foo', 'foo') jar.add('baz/qux', 'aaaaaaaaaaaaanopqrstuvwxyz', True) jar = JarReader(fileobj=s) files = [j for j in jar] self.assertEqual(files[0].filename, 'bar') self.assertFalse(files[0].compressed) self.assertEqual(files[0].read(), 'aaaaaaaaaaaaanopqrstuvwxyz') self.assertEqual(files[1].filename, 'foo') self.assertFalse(files[1].compressed) self.assertEqual(files[1].read(), 'foo') self.assertEqual(files[2].filename, 'baz/qux') self.assertTrue(files[2].compressed) self.assertEqual(files[2].read(), 'aaaaaaaaaaaaanopqrstuvwxyz') self.assertTrue('bar' in jar) self.assertTrue('foo' in jar) self.assertFalse('baz' in jar) self.assertTrue('baz/qux' in jar) self.assertTrue(jar['bar'], files[1]) self.assertTrue(jar['foo'], files[0]) self.assertTrue(jar['baz/qux'], files[2]) s.seek(0) jar = JarReader(fileobj=s) self.assertTrue('bar' in jar) self.assertTrue('foo' in jar) self.assertFalse('baz' in jar) self.assertTrue('baz/qux' in jar) files[0].seek(0) self.assertEqual(jar['bar'].filename, files[0].filename) self.assertEqual(jar['bar'].compressed, files[0].compressed) self.assertEqual(jar['bar'].read(), files[0].read()) files[1].seek(0) self.assertEqual(jar['foo'].filename, files[1].filename) self.assertEqual(jar['foo'].compressed, files[1].compressed) self.assertEqual(jar['foo'].read(), files[1].read()) files[2].seek(0) self.assertEqual(jar['baz/qux'].filename, files[2].filename) self.assertEqual(jar['baz/qux'].compressed, files[2].compressed) self.assertEqual(jar['baz/qux'].read(), files[2].read())
def test_unified_build_finder(self): self.create_both('chrome.manifest', 'a\nb\nc\n') self.create_one('a', 'chrome/chrome.manifest', 'a\nb\nc\n') self.create_one('b', 'chrome/chrome.manifest', 'b\nc\na\n') self.create_one( 'a', 'chrome/browser/foo/buildconfig.html', '\n'.join([ '<html>', '<body>', '<h1>about:buildconfig</h1>', '<div>foo</div>', '</body>', '</html>', ])) self.create_one( 'b', 'chrome/browser/foo/buildconfig.html', '\n'.join([ '<html>', '<body>', '<h1>about:buildconfig</h1>', '<div>bar</div>', '</body>', '</html>', ])) finder = UnifiedBuildFinder(FileFinder(self.tmppath('a')), FileFinder(self.tmppath('b'))) self.assertEqual( sorted([(f, c.open().read()) for f, c in finder.find('**/chrome.manifest')]), [('chrome.manifest', 'a\nb\nc\n'), ('chrome/chrome.manifest', 'a\nb\nc\n')]) self.assertEqual( sorted([(f, c.open().read()) for f, c in finder.find('**/buildconfig.html')]), [('chrome/browser/foo/buildconfig.html', '\n'.join([ '<html>', '<body>', '<h1>about:buildconfig</h1>', '<div>foo</div>', '<hr> </hr>', '<div>bar</div>', '</body>', '</html>', ]))]) xpi = MockDest() with JarWriter(fileobj=xpi, compress=True) as jar: jar.add('foo', 'foo') jar.add('bar', 'bar') foo_xpi = xpi.read() self.create_both('foo.xpi', foo_xpi) with JarWriter(fileobj=xpi, compress=True) as jar: jar.add('foo', 'bar') self.create_one('a', 'bar.xpi', foo_xpi) self.create_one('b', 'bar.xpi', xpi.read()) errors.out = StringIO() with self.assertRaises(AccumulatedErrors), errors.accumulate(): self.assertEqual([(f, c.open().read()) for f, c in finder.find('*.xpi')], [('foo.xpi', foo_xpi)]) errors.out = sys.stderr