Index: third_party/manifestdestiny/tests/test_manifestparser.py |
=================================================================== |
--- third_party/manifestdestiny/tests/test_manifestparser.py (revision 0) |
+++ third_party/manifestdestiny/tests/test_manifestparser.py (revision 0) |
@@ -0,0 +1,219 @@ |
+#!/usr/bin/env python |
+ |
+import os |
+import shutil |
+import tempfile |
+import unittest |
+from manifestparser import convert |
+from manifestparser import ManifestParser |
+from StringIO import StringIO |
+ |
+here = os.path.dirname(os.path.abspath(__file__)) |
+ |
+class TestManifestparser(unittest.TestCase): |
+ """ |
+ Test the manifest parser |
+ |
+ You must have ManifestDestiny installed before running these tests. |
+ Run ``python manifestparser.py setup develop`` with setuptools installed. |
+ """ |
+ |
+ def test_sanity(self): |
+ """Ensure basic parser is sane""" |
+ |
+ parser = ManifestParser() |
+ mozmill_example = os.path.join(here, 'mozmill-example.ini') |
+ parser.read(mozmill_example) |
+ tests = parser.tests |
+ self.assertEqual(len(tests), len(file(mozmill_example).read().strip().splitlines())) |
+ |
+ # Ensure that capitalization and order aren't an issue: |
+ lines = ['[%s]' % test['name'] for test in tests] |
+ self.assertEqual(lines, file(mozmill_example).read().strip().splitlines()) |
+ |
+ # Show how you select subsets of tests: |
+ mozmill_restart_example = os.path.join(here, 'mozmill-restart-example.ini') |
+ parser.read(mozmill_restart_example) |
+ restart_tests = parser.get(type='restart') |
+ self.assertTrue(len(restart_tests) < len(parser.tests)) |
+ self.assertEqual(len(restart_tests), len(parser.get(manifest=mozmill_restart_example))) |
+ self.assertFalse([test for test in restart_tests |
+ if test['manifest'] != os.path.join(here, 'mozmill-restart-example.ini')]) |
+ self.assertEqual(parser.get('name', tags=['foo']), |
+ ['restartTests/testExtensionInstallUninstall/test2.js', |
+ 'restartTests/testExtensionInstallUninstall/test1.js']) |
+ self.assertEqual(parser.get('name', foo='bar'), |
+ ['restartTests/testExtensionInstallUninstall/test2.js']) |
+ |
+ def test_include(self): |
+ """Illustrate how include works""" |
+ |
+ include_example = os.path.join(here, 'include-example.ini') |
+ parser = ManifestParser(manifests=(include_example,)) |
+ |
+ # All of the tests should be included, in order: |
+ self.assertEqual(parser.get('name'), |
+ ['crash-handling', 'fleem', 'flowers']) |
+ self.assertEqual([(test['name'], os.path.basename(test['manifest'])) for test in parser.tests], |
+ [('crash-handling', 'bar.ini'), ('fleem', 'include-example.ini'), ('flowers', 'foo.ini')]) |
+ |
+ |
+ # The manifests should be there too: |
+ self.assertEqual(len(parser.manifests()), 3) |
+ |
+ # We already have the root directory: |
+ self.assertEqual(here, parser.rootdir) |
+ |
+ |
+ # DEFAULT values should persist across includes, unless they're |
+ # overwritten. In this example, include-example.ini sets foo=bar, but |
+ # it's overridden to fleem in bar.ini |
+ self.assertEqual(parser.get('name', foo='bar'), |
+ ['fleem', 'flowers']) |
+ self.assertEqual(parser.get('name', foo='fleem'), |
+ ['crash-handling']) |
+ |
+ # Passing parameters in the include section allows defining variables in |
+ #the submodule scope: |
+ self.assertEqual(parser.get('name', tags=['red']), |
+ ['flowers']) |
+ |
+ # However, this should be overridable from the DEFAULT section in the |
+ # included file and that overridable via the key directly connected to |
+ # the test: |
+ self.assertEqual(parser.get(name='flowers')[0]['blue'], |
+ 'ocean') |
+ self.assertEqual(parser.get(name='flowers')[0]['yellow'], |
+ 'submarine') |
+ |
+ # You can query multiple times if you need to:: |
+ flowers = parser.get(foo='bar') |
+ self.assertEqual(len(flowers), 2) |
+ |
+ # Using the inverse flag should invert the set of tests returned: |
+ self.assertEqual(parser.get('name', inverse=True, tags=['red']), |
+ ['crash-handling', 'fleem']) |
+ |
+ # All of the included tests actually exist:: |
+ self.assertEqual([i['name'] for i in parser.missing()], []) |
+ |
+ # Write the output to a manifest: |
+ buffer = StringIO() |
+ parser.write(fp=buffer, global_kwargs={'foo': 'bar'}) |
+ self.assertEqual(buffer.getvalue().strip(), |
+ '[DEFAULT]\nfoo = bar\n\n[fleem]\n\n[include/flowers]\nblue = ocean\nred = roses\nyellow = submarine') |
+ |
+ |
+ def test_directory_to_manifest(self): |
+ """ |
+ Test our ability to convert a static directory structure to a |
+ manifest. |
+ """ |
+ |
+ # First, stub out a directory with files in it:: |
+ def create_stub(): |
+ directory = tempfile.mkdtemp() |
+ for i in 'foo', 'bar', 'fleem': |
+ file(os.path.join(directory, i), 'w').write(i) |
+ subdir = os.path.join(directory, 'subdir') |
+ os.mkdir(subdir) |
+ file(os.path.join(subdir, 'subfile'), 'w').write('baz') |
+ return directory |
+ stub = create_stub() |
+ self.assertTrue(os.path.exists(stub) and os.path.isdir(stub)) |
+ |
+ # Make a manifest for it: |
+ self.assertEqual(convert([stub]), |
+ """[bar] |
+[fleem] |
+[foo] |
+[subdir/subfile]""") |
+ shutil.rmtree(stub) # cleanup |
+ |
+ # Now do the same thing but keep the manifests in place: |
+ stub = create_stub() |
+ convert([stub], write='manifest.ini') |
+ self.assertEqual(sorted(os.listdir(stub)), |
+ ['bar', 'fleem', 'foo', 'manifest.ini', 'subdir']) |
+ parser = ManifestParser() |
+ parser.read(os.path.join(stub, 'manifest.ini')) |
+ self.assertEqual([i['name'] for i in parser.tests], |
+ ['subfile', 'bar', 'fleem', 'foo']) |
+ parser = ManifestParser() |
+ parser.read(os.path.join(stub, 'subdir', 'manifest.ini')) |
+ self.assertEqual(len(parser.tests), 1) |
+ self.assertEqual(parser.tests[0]['name'], 'subfile') |
+ shutil.rmtree(stub) |
+ |
+ |
+ def test_copy(self): |
+ """Test our ability to copy a set of manifests""" |
+ |
+ tempdir = tempfile.mkdtemp() |
+ include_example = os.path.join(here, 'include-example.ini') |
+ manifest = ManifestParser(manifests=(include_example,)) |
+ manifest.copy(tempdir) |
+ self.assertEqual(sorted(os.listdir(tempdir)), |
+ ['fleem', 'include', 'include-example.ini']) |
+ self.assertEqual(sorted(os.listdir(os.path.join(tempdir, 'include'))), |
+ ['bar.ini', 'crash-handling', 'flowers', 'foo.ini']) |
+ from_manifest = ManifestParser(manifests=(include_example,)) |
+ to_manifest = os.path.join(tempdir, 'include-example.ini') |
+ to_manifest = ManifestParser(manifests=(to_manifest,)) |
+ self.assertEqual(to_manifest.get('name'), from_manifest.get('name')) |
+ shutil.rmtree(tempdir) |
+ |
+ |
+ def test_update(self): |
+ """ |
+ Test our ability to update tests from a manifest and a directory of |
+ files |
+ """ |
+ |
+ # boilerplate |
+ tempdir = tempfile.mkdtemp() |
+ for i in range(10): |
+ file(os.path.join(tempdir, str(i)), 'w').write(str(i)) |
+ |
+ # First, make a manifest: |
+ manifest = convert([tempdir]) |
+ newtempdir = tempfile.mkdtemp() |
+ manifest_file = os.path.join(newtempdir, 'manifest.ini') |
+ file(manifest_file,'w').write(manifest) |
+ manifest = ManifestParser(manifests=(manifest_file,)) |
+ self.assertEqual(manifest.get('name'), |
+ [str(i) for i in range(10)]) |
+ |
+ # All of the tests are initially missing: |
+ self.assertEqual([i['name'] for i in manifest.missing()], |
+ [str(i) for i in range(10)]) |
+ |
+ # But then we copy one over: |
+ self.assertEqual(manifest.get('name', name='1'), ['1']) |
+ manifest.update(tempdir, name='1') |
+ self.assertEqual(sorted(os.listdir(newtempdir)), |
+ ['1', 'manifest.ini']) |
+ |
+ # Update that one file and copy all the "tests": |
+ file(os.path.join(tempdir, '1'), 'w').write('secret door') |
+ manifest.update(tempdir) |
+ self.assertEqual(sorted(os.listdir(newtempdir)), |
+ ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'manifest.ini']) |
+ self.assertEqual(file(os.path.join(newtempdir, '1')).read().strip(), |
+ 'secret door') |
+ |
+ # clean up: |
+ shutil.rmtree(tempdir) |
+ shutil.rmtree(newtempdir) |
+ |
+ def test_path_override(self): |
+ """You can override the path in the section too. |
+ This shows that you can use a relative path""" |
+ path_example = os.path.join(here, 'path-example.ini') |
+ manifest = ManifestParser(manifests=(path_example,)) |
+ self.assertEqual(manifest.tests[0]['path'], |
+ os.path.join(here, 'fleem')) |
+ |
+ |
+if __name__ == '__main__': |
+ unittest.main() |
Property changes on: third_party/manifestdestiny/tests/test_manifestparser.py |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |
Added: svn:executable |
+ * |