python/mozbuild/mozpack/test/test_unify.py

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 # This Source Code Form is subject to the terms of the Mozilla Public
michael@0 2 # License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
michael@0 4
michael@0 5 from mozbuild.util import ensureParentDir
michael@0 6
michael@0 7 from mozpack.unify import (
michael@0 8 UnifiedFinder,
michael@0 9 UnifiedBuildFinder,
michael@0 10 )
michael@0 11 import mozunit
michael@0 12 from mozpack.test.test_files import TestWithTmpDir
michael@0 13 from mozpack.files import FileFinder
michael@0 14 from mozpack.mozjar import JarWriter
michael@0 15 from mozpack.test.test_files import MockDest
michael@0 16 from cStringIO import StringIO
michael@0 17 import os
michael@0 18 import sys
michael@0 19 from mozpack.errors import (
michael@0 20 ErrorMessage,
michael@0 21 AccumulatedErrors,
michael@0 22 errors,
michael@0 23 )
michael@0 24
michael@0 25
michael@0 26 class TestUnified(TestWithTmpDir):
michael@0 27 def create_one(self, which, path, content):
michael@0 28 file = self.tmppath(os.path.join(which, path))
michael@0 29 ensureParentDir(file)
michael@0 30 open(file, 'wb').write(content)
michael@0 31
michael@0 32 def create_both(self, path, content):
michael@0 33 for p in ['a', 'b']:
michael@0 34 self.create_one(p, path, content)
michael@0 35
michael@0 36
michael@0 37 class TestUnifiedFinder(TestUnified):
michael@0 38 def test_unified_finder(self):
michael@0 39 self.create_both('foo/bar', 'foobar')
michael@0 40 self.create_both('foo/baz', 'foobaz')
michael@0 41 self.create_one('a', 'bar', 'bar')
michael@0 42 self.create_one('b', 'baz', 'baz')
michael@0 43 self.create_one('a', 'qux', 'foobar')
michael@0 44 self.create_one('b', 'qux', 'baz')
michael@0 45 self.create_one('a', 'test/foo', 'a\nb\nc\n')
michael@0 46 self.create_one('b', 'test/foo', 'b\nc\na\n')
michael@0 47 self.create_both('test/bar', 'a\nb\nc\n')
michael@0 48
michael@0 49 finder = UnifiedFinder(FileFinder(self.tmppath('a')),
michael@0 50 FileFinder(self.tmppath('b')),
michael@0 51 sorted=['test'])
michael@0 52 self.assertEqual(sorted([(f, c.open().read())
michael@0 53 for f, c in finder.find('foo')]),
michael@0 54 [('foo/bar', 'foobar'), ('foo/baz', 'foobaz')])
michael@0 55 self.assertRaises(ErrorMessage, any, finder.find('bar'))
michael@0 56 self.assertRaises(ErrorMessage, any, finder.find('baz'))
michael@0 57 self.assertRaises(ErrorMessage, any, finder.find('qux'))
michael@0 58 self.assertEqual(sorted([(f, c.open().read())
michael@0 59 for f, c in finder.find('test')]),
michael@0 60 [('test/bar', 'a\nb\nc\n'),
michael@0 61 ('test/foo', 'a\nb\nc\n')])
michael@0 62
michael@0 63
michael@0 64 class TestUnifiedBuildFinder(TestUnified):
michael@0 65 def test_unified_build_finder(self):
michael@0 66 self.create_both('chrome.manifest', 'a\nb\nc\n')
michael@0 67 self.create_one('a', 'chrome/chrome.manifest', 'a\nb\nc\n')
michael@0 68 self.create_one('b', 'chrome/chrome.manifest', 'b\nc\na\n')
michael@0 69 self.create_one('a', 'chrome/browser/foo/buildconfig.html',
michael@0 70 '\n'.join([
michael@0 71 '<html>',
michael@0 72 '<body>',
michael@0 73 '<h1>about:buildconfig</h1>',
michael@0 74 '<div>foo</div>',
michael@0 75 '</body>',
michael@0 76 '</html>',
michael@0 77 ]))
michael@0 78 self.create_one('b', 'chrome/browser/foo/buildconfig.html',
michael@0 79 '\n'.join([
michael@0 80 '<html>',
michael@0 81 '<body>',
michael@0 82 '<h1>about:buildconfig</h1>',
michael@0 83 '<div>bar</div>',
michael@0 84 '</body>',
michael@0 85 '</html>',
michael@0 86 ]))
michael@0 87 finder = UnifiedBuildFinder(FileFinder(self.tmppath('a')),
michael@0 88 FileFinder(self.tmppath('b')))
michael@0 89 self.assertEqual(sorted([(f, c.open().read()) for f, c in
michael@0 90 finder.find('**/chrome.manifest')]),
michael@0 91 [('chrome.manifest', 'a\nb\nc\n'),
michael@0 92 ('chrome/chrome.manifest', 'a\nb\nc\n')])
michael@0 93
michael@0 94 self.assertEqual(sorted([(f, c.open().read()) for f, c in
michael@0 95 finder.find('**/buildconfig.html')]),
michael@0 96 [('chrome/browser/foo/buildconfig.html', '\n'.join([
michael@0 97 '<html>',
michael@0 98 '<body>',
michael@0 99 '<h1>about:buildconfig</h1>',
michael@0 100 '<div>foo</div>',
michael@0 101 '<hr> </hr>',
michael@0 102 '<div>bar</div>',
michael@0 103 '</body>',
michael@0 104 '</html>',
michael@0 105 ]))])
michael@0 106
michael@0 107 xpi = MockDest()
michael@0 108 with JarWriter(fileobj=xpi, compress=True) as jar:
michael@0 109 jar.add('foo', 'foo')
michael@0 110 jar.add('bar', 'bar')
michael@0 111 foo_xpi = xpi.read()
michael@0 112 self.create_both('foo.xpi', foo_xpi)
michael@0 113
michael@0 114 with JarWriter(fileobj=xpi, compress=True) as jar:
michael@0 115 jar.add('foo', 'bar')
michael@0 116 self.create_one('a', 'bar.xpi', foo_xpi)
michael@0 117 self.create_one('b', 'bar.xpi', xpi.read())
michael@0 118
michael@0 119 errors.out = StringIO()
michael@0 120 with self.assertRaises(AccumulatedErrors), errors.accumulate():
michael@0 121 self.assertEqual([(f, c.open().read()) for f, c in
michael@0 122 finder.find('*.xpi')],
michael@0 123 [('foo.xpi', foo_xpi)])
michael@0 124 errors.out = sys.stderr
michael@0 125
michael@0 126
michael@0 127 if __name__ == '__main__':
michael@0 128 mozunit.main()

mercurial