blob: a0d62efcfde35945baefc12aa32e9fdc8d4e450d [file] [log] [blame]
Tarek Ziadé9df8ce32008-12-30 23:09:20 +00001"""Tests for distutils.msvc9compiler."""
2import sys
3import unittest
Tarek Ziadéb7e82bb2009-12-21 23:18:02 +00004import os
Tarek Ziadé9df8ce32008-12-30 23:09:20 +00005
6from distutils.errors import DistutilsPlatformError
Tarek Ziadéb7e82bb2009-12-21 23:18:02 +00007from distutils.tests import support
Éric Araujob344dd02011-02-02 21:38:37 +00008from test.support import run_unittest
Tarek Ziadé9df8ce32008-12-30 23:09:20 +00009
Tarek Ziadéb7e82bb2009-12-21 23:18:02 +000010_MANIFEST = """\
11<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
12<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
13 manifestVersion="1.0">
14 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
15 <security>
16 <requestedPrivileges>
17 <requestedExecutionLevel level="asInvoker" uiAccess="false">
18 </requestedExecutionLevel>
19 </requestedPrivileges>
20 </security>
21 </trustInfo>
22 <dependency>
23 <dependentAssembly>
24 <assemblyIdentity type="win32" name="Microsoft.VC90.CRT"
25 version="9.0.21022.8" processorArchitecture="x86"
26 publicKeyToken="XXXX">
27 </assemblyIdentity>
28 </dependentAssembly>
29 </dependency>
30 <dependency>
31 <dependentAssembly>
32 <assemblyIdentity type="win32" name="Microsoft.VC90.MFC"
33 version="9.0.21022.8" processorArchitecture="x86"
34 publicKeyToken="XXXX"></assemblyIdentity>
35 </dependentAssembly>
36 </dependency>
37</assembly>
38"""
39
40_CLEANED_MANIFEST = """\
41<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
42<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
43 manifestVersion="1.0">
44 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
45 <security>
46 <requestedPrivileges>
47 <requestedExecutionLevel level="asInvoker" uiAccess="false">
48 </requestedExecutionLevel>
49 </requestedPrivileges>
50 </security>
51 </trustInfo>
52 <dependency>
53
54 </dependency>
55 <dependency>
56 <dependentAssembly>
57 <assemblyIdentity type="win32" name="Microsoft.VC90.MFC"
58 version="9.0.21022.8" processorArchitecture="x86"
59 publicKeyToken="XXXX"></assemblyIdentity>
60 </dependentAssembly>
61 </dependency>
62</assembly>"""
63
Hirokazu Yamamoto10f4f762010-09-13 05:48:30 +000064if sys.platform=="win32":
65 from distutils.msvccompiler import get_build_version
Hirokazu Yamamoto67af7f42010-09-13 07:48:22 +000066 if get_build_version()>=8.0:
67 SKIP_MESSAGE = None
68 else:
69 SKIP_MESSAGE = "These tests are only for MSVC8.0 or above"
70else:
71 SKIP_MESSAGE = "These tests are only for win32"
Hirokazu Yamamoto10f4f762010-09-13 05:48:30 +000072
Hirokazu Yamamoto67af7f42010-09-13 07:48:22 +000073@unittest.skipUnless(SKIP_MESSAGE is None, SKIP_MESSAGE)
Tarek Ziadéb7e82bb2009-12-21 23:18:02 +000074class msvc9compilerTestCase(support.TempdirManager,
75 unittest.TestCase):
Tarek Ziadé9df8ce32008-12-30 23:09:20 +000076
77 def test_no_compiler(self):
78 # makes sure query_vcvarsall throws
79 # a DistutilsPlatformError if the compiler
80 # is not found
Tarek Ziadé9df8ce32008-12-30 23:09:20 +000081 from distutils.msvc9compiler import query_vcvarsall
82 def _find_vcvarsall(version):
83 return None
84
85 from distutils import msvc9compiler
86 old_find_vcvarsall = msvc9compiler.find_vcvarsall
87 msvc9compiler.find_vcvarsall = _find_vcvarsall
88 try:
89 self.assertRaises(DistutilsPlatformError, query_vcvarsall,
90 'wont find this version')
91 finally:
92 msvc9compiler.find_vcvarsall = old_find_vcvarsall
93
Tarek Ziadé63b64c02009-03-07 00:51:53 +000094 def test_reg_class(self):
Tarek Ziadé63b64c02009-03-07 00:51:53 +000095 from distutils.msvc9compiler import Reg
96 self.assertRaises(KeyError, Reg.get_value, 'xxx', 'xxx')
97
98 # looking for values that should exist on all
99 # windows registeries versions.
Tarek Ziadé2cc70482009-11-18 10:19:38 +0000100 path = r'Control Panel\Desktop'
101 v = Reg.get_value(path, 'dragfullwindows')
Tarek Ziadéfd9ac222009-11-19 05:41:34 +0000102 self.assertTrue(v in ('0', '1', '2'))
Tarek Ziadé63b64c02009-03-07 00:51:53 +0000103
Georg Brandl4ed72ac2009-04-01 04:28:33 +0000104 import winreg
105 HKCU = winreg.HKEY_CURRENT_USER
Tarek Ziadé63b64c02009-03-07 00:51:53 +0000106 keys = Reg.read_keys(HKCU, 'xxxx')
Ezio Melotti19f2aeb2010-11-21 01:30:29 +0000107 self.assertEqual(keys, None)
Tarek Ziadé63b64c02009-03-07 00:51:53 +0000108
Tarek Ziadé2cc70482009-11-18 10:19:38 +0000109 keys = Reg.read_keys(HKCU, r'Control Panel')
110 self.assertTrue('Desktop' in keys)
Tarek Ziadé63b64c02009-03-07 00:51:53 +0000111
Tarek Ziadéb7e82bb2009-12-21 23:18:02 +0000112 def test_remove_visual_c_ref(self):
113 from distutils.msvc9compiler import MSVCCompiler
114 tempdir = self.mkdtemp()
115 manifest = os.path.join(tempdir, 'manifest')
116 f = open(manifest, 'w')
Éric Araujoc6d7ead2010-11-06 02:58:56 +0000117 try:
118 f.write(_MANIFEST)
119 finally:
120 f.close()
Tarek Ziadéb7e82bb2009-12-21 23:18:02 +0000121
122 compiler = MSVCCompiler()
123 compiler._remove_visual_c_ref(manifest)
124
125 # see what we got
126 f = open(manifest)
Éric Araujoc6d7ead2010-11-06 02:58:56 +0000127 try:
128 # removing trailing spaces
129 content = '\n'.join([line.rstrip() for line in f.readlines()])
130 finally:
131 f.close()
Tarek Ziadéb7e82bb2009-12-21 23:18:02 +0000132
133 # makes sure the manifest was properly cleaned
Ezio Melotti19f2aeb2010-11-21 01:30:29 +0000134 self.assertEqual(content, _CLEANED_MANIFEST)
Tarek Ziadéb7e82bb2009-12-21 23:18:02 +0000135
136
Tarek Ziadé9df8ce32008-12-30 23:09:20 +0000137def test_suite():
138 return unittest.makeSuite(msvc9compilerTestCase)
139
140if __name__ == "__main__":
Éric Araujob344dd02011-02-02 21:38:37 +0000141 run_unittest(test_suite())