summaryrefslogtreecommitdiffstats
path: root/python/mozbuild/mozbuild/test/backend/test_visualstudio.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozbuild/mozbuild/test/backend/test_visualstudio.py')
-rw-r--r--python/mozbuild/mozbuild/test/backend/test_visualstudio.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/python/mozbuild/mozbuild/test/backend/test_visualstudio.py b/python/mozbuild/mozbuild/test/backend/test_visualstudio.py
new file mode 100644
index 0000000000..14cccb484b
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/backend/test_visualstudio.py
@@ -0,0 +1,63 @@
+# 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 os
+import unittest
+from xml.dom.minidom import parse
+
+from mozunit import main
+
+from mozbuild.backend.visualstudio import VisualStudioBackend
+from mozbuild.test.backend.common import BackendTester
+
+
+class TestVisualStudioBackend(BackendTester):
+ @unittest.skip("Failing inconsistently in automation.")
+ def test_basic(self):
+ """Ensure we can consume our stub project."""
+
+ env = self._consume("visual-studio", VisualStudioBackend)
+
+ msvc = os.path.join(env.topobjdir, "msvc")
+ self.assertTrue(os.path.isdir(msvc))
+
+ self.assertTrue(os.path.isfile(os.path.join(msvc, "mozilla.sln")))
+ self.assertTrue(os.path.isfile(os.path.join(msvc, "mozilla.props")))
+ self.assertTrue(os.path.isfile(os.path.join(msvc, "mach.bat")))
+ self.assertTrue(os.path.isfile(os.path.join(msvc, "binary_my_app.vcxproj")))
+ self.assertTrue(os.path.isfile(os.path.join(msvc, "target_full.vcxproj")))
+ self.assertTrue(os.path.isfile(os.path.join(msvc, "library_dir1.vcxproj")))
+ self.assertTrue(os.path.isfile(os.path.join(msvc, "library_dir1.vcxproj.user")))
+
+ d = parse(os.path.join(msvc, "library_dir1.vcxproj"))
+ self.assertEqual(d.documentElement.tagName, "Project")
+ els = d.getElementsByTagName("ClCompile")
+ self.assertEqual(len(els), 2)
+
+ # mozilla-config.h should be explicitly listed as an include.
+ els = d.getElementsByTagName("NMakeForcedIncludes")
+ self.assertEqual(len(els), 1)
+ self.assertEqual(
+ els[0].firstChild.nodeValue, "$(TopObjDir)\\dist\\include\\mozilla-config.h"
+ )
+
+ # LOCAL_INCLUDES get added to the include search path.
+ els = d.getElementsByTagName("NMakeIncludeSearchPath")
+ self.assertEqual(len(els), 1)
+ includes = els[0].firstChild.nodeValue.split(";")
+ self.assertIn(os.path.normpath("$(TopSrcDir)/includeA/foo"), includes)
+ self.assertIn(os.path.normpath("$(TopSrcDir)/dir1"), includes)
+ self.assertIn(os.path.normpath("$(TopObjDir)/dir1"), includes)
+ self.assertIn(os.path.normpath("$(TopObjDir)\\dist\\include"), includes)
+
+ # DEFINES get added to the project.
+ els = d.getElementsByTagName("NMakePreprocessorDefinitions")
+ self.assertEqual(len(els), 1)
+ defines = els[0].firstChild.nodeValue.split(";")
+ self.assertIn("DEFINEFOO", defines)
+ self.assertIn("DEFINEBAR=bar", defines)
+
+
+if __name__ == "__main__":
+ main()