Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
# 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
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()