Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 #!/usr/bin/env python
3 # This Source Code Form is subject to the terms of the Mozilla Public
4 # License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 # You can obtain one at http://mozilla.org/MPL/2.0/.
7 import os
8 import shutil
9 import tempfile
10 import unittest
11 from manifestparser import convert
12 from manifestparser import ManifestParser
13 from StringIO import StringIO
15 here = os.path.dirname(os.path.abspath(__file__))
17 class TestManifestParser(unittest.TestCase):
18 """
19 Test the manifest parser
21 You must have ManifestDestiny installed before running these tests.
22 Run ``python manifestparser.py setup develop`` with setuptools installed.
23 """
25 def test_sanity(self):
26 """Ensure basic parser is sane"""
28 parser = ManifestParser()
29 mozmill_example = os.path.join(here, 'mozmill-example.ini')
30 parser.read(mozmill_example)
31 tests = parser.tests
32 self.assertEqual(len(tests), len(file(mozmill_example).read().strip().splitlines()))
34 # Ensure that capitalization and order aren't an issue:
35 lines = ['[%s]' % test['name'] for test in tests]
36 self.assertEqual(lines, file(mozmill_example).read().strip().splitlines())
38 # Show how you select subsets of tests:
39 mozmill_restart_example = os.path.join(here, 'mozmill-restart-example.ini')
40 parser.read(mozmill_restart_example)
41 restart_tests = parser.get(type='restart')
42 self.assertTrue(len(restart_tests) < len(parser.tests))
43 self.assertEqual(len(restart_tests), len(parser.get(manifest=mozmill_restart_example)))
44 self.assertFalse([test for test in restart_tests
45 if test['manifest'] != os.path.join(here, 'mozmill-restart-example.ini')])
46 self.assertEqual(parser.get('name', tags=['foo']),
47 ['restartTests/testExtensionInstallUninstall/test2.js',
48 'restartTests/testExtensionInstallUninstall/test1.js'])
49 self.assertEqual(parser.get('name', foo='bar'),
50 ['restartTests/testExtensionInstallUninstall/test2.js'])
52 def test_include(self):
53 """Illustrate how include works"""
55 include_example = os.path.join(here, 'include-example.ini')
56 parser = ManifestParser(manifests=(include_example,))
58 # All of the tests should be included, in order:
59 self.assertEqual(parser.get('name'),
60 ['crash-handling', 'fleem', 'flowers'])
61 self.assertEqual([(test['name'], os.path.basename(test['manifest'])) for test in parser.tests],
62 [('crash-handling', 'bar.ini'), ('fleem', 'include-example.ini'), ('flowers', 'foo.ini')])
65 # The manifests should be there too:
66 self.assertEqual(len(parser.manifests()), 3)
68 # We already have the root directory:
69 self.assertEqual(here, parser.rootdir)
72 # DEFAULT values should persist across includes, unless they're
73 # overwritten. In this example, include-example.ini sets foo=bar, but
74 # it's overridden to fleem in bar.ini
75 self.assertEqual(parser.get('name', foo='bar'),
76 ['fleem', 'flowers'])
77 self.assertEqual(parser.get('name', foo='fleem'),
78 ['crash-handling'])
80 # Passing parameters in the include section allows defining variables in
81 #the submodule scope:
82 self.assertEqual(parser.get('name', tags=['red']),
83 ['flowers'])
85 # However, this should be overridable from the DEFAULT section in the
86 # included file and that overridable via the key directly connected to
87 # the test:
88 self.assertEqual(parser.get(name='flowers')[0]['blue'],
89 'ocean')
90 self.assertEqual(parser.get(name='flowers')[0]['yellow'],
91 'submarine')
93 # You can query multiple times if you need to:
94 flowers = parser.get(foo='bar')
95 self.assertEqual(len(flowers), 2)
97 # Using the inverse flag should invert the set of tests returned:
98 self.assertEqual(parser.get('name', inverse=True, tags=['red']),
99 ['crash-handling', 'fleem'])
101 # All of the included tests actually exist:
102 self.assertEqual([i['name'] for i in parser.missing()], [])
104 # Write the output to a manifest:
105 buffer = StringIO()
106 parser.write(fp=buffer, global_kwargs={'foo': 'bar'})
107 self.assertEqual(buffer.getvalue().strip(),
108 '[DEFAULT]\nfoo = bar\n\n[fleem]\nsubsuite = \n\n[include/flowers]\nblue = ocean\nred = roses\nsubsuite = \nyellow = submarine')
110 def test_copy(self):
111 """Test our ability to copy a set of manifests"""
113 tempdir = tempfile.mkdtemp()
114 include_example = os.path.join(here, 'include-example.ini')
115 manifest = ManifestParser(manifests=(include_example,))
116 manifest.copy(tempdir)
117 self.assertEqual(sorted(os.listdir(tempdir)),
118 ['fleem', 'include', 'include-example.ini'])
119 self.assertEqual(sorted(os.listdir(os.path.join(tempdir, 'include'))),
120 ['bar.ini', 'crash-handling', 'flowers', 'foo.ini'])
121 from_manifest = ManifestParser(manifests=(include_example,))
122 to_manifest = os.path.join(tempdir, 'include-example.ini')
123 to_manifest = ManifestParser(manifests=(to_manifest,))
124 self.assertEqual(to_manifest.get('name'), from_manifest.get('name'))
125 shutil.rmtree(tempdir)
127 def test_path_override(self):
128 """You can override the path in the section too.
129 This shows that you can use a relative path"""
130 path_example = os.path.join(here, 'path-example.ini')
131 manifest = ManifestParser(manifests=(path_example,))
132 self.assertEqual(manifest.tests[0]['path'],
133 os.path.join(here, 'fleem'))
135 def test_relative_path(self):
136 """
137 Relative test paths are correctly calculated.
138 """
139 relative_path = os.path.join(here, 'relative-path.ini')
140 manifest = ManifestParser(manifests=(relative_path,))
141 self.assertEqual(manifest.tests[0]['path'],
142 os.path.join(os.path.dirname(here), 'fleem'))
143 self.assertEqual(manifest.tests[0]['relpath'],
144 os.path.join('..', 'fleem'))
145 self.assertEqual(manifest.tests[1]['relpath'],
146 os.path.join('..', 'testsSIBLING', 'example'))
148 def test_path_from_fd(self):
149 """
150 Test paths are left untouched when manifest is a file-like object.
151 """
152 fp = StringIO("[section]\npath=fleem")
153 manifest = ManifestParser(manifests=(fp,))
154 self.assertEqual(manifest.tests[0]['path'], 'fleem')
155 self.assertEqual(manifest.tests[0]['relpath'], 'fleem')
156 self.assertEqual(manifest.tests[0]['manifest'], None)
158 def test_comments(self):
159 """
160 ensure comments work, see
161 https://bugzilla.mozilla.org/show_bug.cgi?id=813674
162 """
163 comment_example = os.path.join(here, 'comment-example.ini')
164 manifest = ManifestParser(manifests=(comment_example,))
165 self.assertEqual(len(manifest.tests), 8)
166 names = [i['name'] for i in manifest.tests]
167 self.assertFalse('test_0202_app_launch_apply_update_dirlocked.js' in names)
169 def test_verifyDirectory(self):
171 directory = os.path.join(here, 'verifyDirectory')
173 # correct manifest
174 manifest_path = os.path.join(directory, 'verifyDirectory.ini')
175 manifest = ManifestParser(manifests=(manifest_path,))
176 missing = manifest.verifyDirectory(directory, extensions=('.js',))
177 self.assertEqual(missing, (set(), set()))
179 # manifest is missing test_1.js
180 test_1 = os.path.join(directory, 'test_1.js')
181 manifest_path = os.path.join(directory, 'verifyDirectory_incomplete.ini')
182 manifest = ManifestParser(manifests=(manifest_path,))
183 missing = manifest.verifyDirectory(directory, extensions=('.js',))
184 self.assertEqual(missing, (set(), set([test_1])))
186 # filesystem is missing test_notappearinginthisfilm.js
187 missing_test = os.path.join(directory, 'test_notappearinginthisfilm.js')
188 manifest_path = os.path.join(directory, 'verifyDirectory_toocomplete.ini')
189 manifest = ManifestParser(manifests=(manifest_path,))
190 missing = manifest.verifyDirectory(directory, extensions=('.js',))
191 self.assertEqual(missing, (set([missing_test]), set()))
193 def test_just_defaults(self):
194 """Ensure a manifest with just a DEFAULT section exposes that data."""
196 parser = ManifestParser()
197 manifest = os.path.join(here, 'just-defaults.ini')
198 parser.read(manifest)
199 self.assertEqual(len(parser.tests), 0)
200 self.assertTrue(manifest in parser.manifest_defaults)
201 self.assertEquals(parser.manifest_defaults[manifest]['foo'], 'bar')
203 def test_manifest_list(self):
204 """
205 Ensure a manifest with just a DEFAULT section still returns
206 itself from the manifests() method.
207 """
209 parser = ManifestParser()
210 manifest = os.path.join(here, 'no-tests.ini')
211 parser.read(manifest)
212 self.assertEqual(len(parser.tests), 0)
213 self.assertTrue(len(parser.manifests()) == 1)
215 if __name__ == '__main__':
216 unittest.main()