Bug 1341502: Fix automatic regeneration of backend when an included test manifest changes. r?ahal draft
authorKris Maglione <maglione.k@gmail.com>
Tue, 21 Feb 2017 17:31:21 -0800
changeset 487723 4188ae2c8c0ced71fd13dbd78a1bdf46fefa2b9c
parent 487721 840b45ee95f505e841acca33fc6dd479a030f898
child 546534 8ee2f139454175f449ce9404ca46ae12e027f7b1
push id46313
push usermaglione.k@gmail.com
push dateWed, 22 Feb 2017 01:35:32 +0000
reviewersahal
bugs1341502
milestone54.0a1
Bug 1341502: Fix automatic regeneration of backend when an included test manifest changes. r?ahal MozReview-Commit-ID: 1ZQNQpqboz9
python/mozbuild/mozbuild/backend/test_manifest.py
python/mozbuild/mozbuild/test/backend/data/test-manifests-backend-sources/mochitest-common.ini
python/mozbuild/mozbuild/test/backend/data/test-manifests-backend-sources/mochitest.ini
python/mozbuild/mozbuild/test/backend/data/test-manifests-backend-sources/moz.build
python/mozbuild/mozbuild/test/backend/data/test-manifests-backend-sources/test_bar.js
python/mozbuild/mozbuild/test/backend/data/test-manifests-backend-sources/test_foo.js
python/mozbuild/mozbuild/test/backend/test_test_manifest.py
--- a/python/mozbuild/mozbuild/backend/test_manifest.py
+++ b/python/mozbuild/mozbuild/backend/test_manifest.py
@@ -27,16 +27,19 @@ class TestManifestBackend(PartialBackend
             self.environment.topobjdir, 'config.status'))
 
     def consume_object(self, obj):
         if not isinstance(obj, TestManifest):
             return
 
         self.backend_input_files.add(obj.path)
         self.backend_input_files |= obj.context_all_paths
+        for source in obj.source_relpaths:
+            self.backend_input_files.add(mozpath.join(obj.topsrcdir,
+                                                      source))
         try:
             from reftest import ReftestManifest
 
             if isinstance(obj.manifest, ReftestManifest):
                 # Mark included files as part of the build backend so changes
                 # result in re-config.
                 self.backend_input_files |= obj.manifest.manifests
         except ImportError:
new file mode 100644
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/backend/data/test-manifests-backend-sources/mochitest-common.ini
@@ -0,0 +1,1 @@
+[test_bar.js]
new file mode 100644
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/backend/data/test-manifests-backend-sources/mochitest.ini
@@ -0,0 +1,2 @@
+[test_foo.js]
+[include:mochitest-common.ini]
new file mode 100644
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/backend/data/test-manifests-backend-sources/moz.build
@@ -0,0 +1,6 @@
+# Any copyright is dedicated to the Public Domain.
+# http://creativecommons.org/publicdomain/zero/1.0/
+
+MOCHITEST_MANIFESTS += [
+    'mochitest.ini',
+]
new file mode 100644
new file mode 100644
--- a/python/mozbuild/mozbuild/test/backend/test_test_manifest.py
+++ b/python/mozbuild/mozbuild/test/backend/test_test_manifest.py
@@ -63,11 +63,30 @@ class TestTestManifestBackend(BackendTes
                           set(['dir1/xpcshell.ini',
                                'xpcshell.ini',
                                'mochitest.ini']))
 
         manifest_path = mozpath.join(env.topsrcdir, 'xpcshell.ini')
         self.assertIn('here', o[manifest_path])
         self.assertIn('support-files', o[manifest_path])
 
+    def test_test_manifest_sources(self):
+        """Ensure that backend sources are generated correctly."""
+        env = self._consume('test-manifests-backend-sources', TestManifestBackend)
+
+        backend_path = mozpath.join(env.topobjdir, 'backend.TestManifestBackend.in')
+        self.assertTrue(os.path.exists(backend_path))
+
+        status_path = mozpath.join(env.topobjdir, 'config.status')
+
+        with open(backend_path, 'r') as fh:
+            sources = set(mozpath.relpath(source.strip(), env.topsrcdir)
+                          for source in fh)
+
+        self.assertEquals(sources,
+                          set(['mochitest.ini',
+                               'mochitest-common.ini',
+                               'moz.build',
+                               mozpath.relpath(status_path, env.topsrcdir)]))
+
 
 if __name__ == '__main__':
     main()