summaryrefslogtreecommitdiffstats
path: root/python/mozbuild/mozbuild/test/backend/test_database.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozbuild/mozbuild/test/backend/test_database.py')
-rw-r--r--python/mozbuild/mozbuild/test/backend/test_database.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/python/mozbuild/mozbuild/test/backend/test_database.py b/python/mozbuild/mozbuild/test/backend/test_database.py
new file mode 100644
index 0000000000..3bc0dfefb1
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/backend/test_database.py
@@ -0,0 +1,91 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import json
+import os
+
+import six
+from mozunit import main
+
+from mozbuild.backend.clangd import ClangdBackend
+from mozbuild.backend.static_analysis import StaticAnalysisBackend
+from mozbuild.compilation.database import CompileDBBackend
+from mozbuild.test.backend.common import BackendTester
+
+
+class TestCompileDBBackends(BackendTester):
+ def perform_check(self, compile_commands_path, topsrcdir, topobjdir):
+ self.assertTrue(os.path.exists(compile_commands_path))
+ compile_db = json.loads(open(compile_commands_path, "r").read())
+
+ # Verify that we have the same number of items
+ self.assertEqual(len(compile_db), 4)
+
+ expected_db = [
+ {
+ "directory": topobjdir,
+ "command": "clang -o /dev/null -c -ferror-limit=0 {}/bar.c".format(
+ topsrcdir
+ ),
+ "file": "{}/bar.c".format(topsrcdir),
+ },
+ {
+ "directory": topobjdir,
+ "command": "clang -o /dev/null -c -ferror-limit=0 {}/foo.c".format(
+ topsrcdir
+ ),
+ "file": "{}/foo.c".format(topsrcdir),
+ },
+ {
+ "directory": topobjdir,
+ "command": "clang++ -o /dev/null -c -ferror-limit=0 {}/baz.cpp".format(
+ topsrcdir
+ ),
+ "file": "{}/baz.cpp".format(topsrcdir),
+ },
+ {
+ "directory": topobjdir,
+ "command": "clang++ -o /dev/null -c -ferror-limit=0 {}/qux.cpp".format(
+ topsrcdir
+ ),
+ "file": "{}/qux.cpp".format(topsrcdir),
+ },
+ ]
+
+ # Verify item consistency against `expected_db`
+ six.assertCountEqual(self, compile_db, expected_db)
+
+ def test_database(self):
+ """Ensure we can generate a `compile_commands.json` and that is correct."""
+
+ env = self._consume("database", CompileDBBackend)
+ compile_commands_path = os.path.join(env.topobjdir, "compile_commands.json")
+
+ self.perform_check(compile_commands_path, env.topsrcdir, env.topobjdir)
+
+ def test_clangd(self):
+ """Ensure we can generate a `compile_commands.json` and that is correct.
+ in order to be used by ClandBackend"""
+
+ env = self._consume("database", ClangdBackend)
+ compile_commands_path = os.path.join(
+ env.topobjdir, "clangd", "compile_commands.json"
+ )
+
+ self.perform_check(compile_commands_path, env.topsrcdir, env.topobjdir)
+
+ def test_static_analysis(self):
+ """Ensure we can generate a `compile_commands.json` and that is correct.
+ in order to be used by StaticAnalysisBackend"""
+
+ env = self._consume("database", StaticAnalysisBackend)
+ compile_commands_path = os.path.join(
+ env.topobjdir, "static-analysis", "compile_commands.json"
+ )
+
+ self.perform_check(compile_commands_path, env.topsrcdir, env.topobjdir)
+
+
+if __name__ == "__main__":
+ main()