Commits

Jason R. Coombs  committed 903b483

Added test to capture issue #118

  • Participants
  • Parent commits 68af628
  • Branches 0.6-maintenance

Comments (0)

Files changed (1)

File setuptools/tests/test_sandbox.py

 import unittest
 import tempfile
 
-from setuptools.sandbox import DirectorySandbox
+from setuptools.sandbox import DirectorySandbox, SandboxViolation
+
+def has_win32com():
+    """
+    Run this to determine if the local machine has win32com, and if it
+    does, include additional tests.
+    """
+    if not sys.platform.startswith('win32'):
+        return False
+    try:
+        mod = __import__('win32com')
+    except ImportError:
+        return False
+    return True
 
 class TestSandbox(unittest.TestCase):
 
 
     def test_devnull(self):
         sandbox = DirectorySandbox(self.dir)
+        sandbox.run(self._file_writer(os.devnull))
 
-        def _write():
-            f = open(os.devnull, 'w')
+    @staticmethod
+    def _file_writer(path):
+        def do_write():
+            f = open(path, 'w')
             f.write('xxx')
             f.close()
+        return do_write
 
-        sandbox.run(_write)
 
+    if has_win32com():
+        def test_win32com(self):
+            """
+            win32com should not be prevented from caching COM interfaces
+            in gen_py.
+            """
+            import win32com
+            gen_py = win32com.__gen_path__
+            target = os.path.join(gen_py, 'test_write')
+            sandbox = DirectorySandbox(self.dir)
+            try:
+                sandbox.run(self._file_writer(target))
+            except SandboxViolation:
+                self.fail("Could not create gen_py file due to SandboxViolation")
+            finally:
+                if os.path.exists(target): os.remove(target)
+
+if __name__ == '__main__':
+    unittest.main()