| Index: recipe_engine/third_party/setuptools/tests/test_sandbox.py
|
| diff --git a/recipe_engine/third_party/setuptools/tests/test_sandbox.py b/recipe_engine/third_party/setuptools/tests/test_sandbox.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6a890ebc975677c4394d60ca6ba5b07275ec2871
|
| --- /dev/null
|
| +++ b/recipe_engine/third_party/setuptools/tests/test_sandbox.py
|
| @@ -0,0 +1,83 @@
|
| +"""develop tests
|
| +"""
|
| +import sys
|
| +import os
|
| +import shutil
|
| +import unittest
|
| +import tempfile
|
| +import types
|
| +
|
| +import pkg_resources
|
| +import setuptools.sandbox
|
| +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:
|
| + __import__('win32com')
|
| + except ImportError:
|
| + return False
|
| + return True
|
| +
|
| +class TestSandbox(unittest.TestCase):
|
| +
|
| + def setUp(self):
|
| + self.dir = tempfile.mkdtemp()
|
| +
|
| + def tearDown(self):
|
| + shutil.rmtree(self.dir)
|
| +
|
| + def test_devnull(self):
|
| + sandbox = DirectorySandbox(self.dir)
|
| + sandbox.run(self._file_writer(os.devnull))
|
| +
|
| + def _file_writer(path):
|
| + def do_write():
|
| + f = open(path, 'w')
|
| + f.write('xxx')
|
| + f.close()
|
| + return do_write
|
| +
|
| + _file_writer = staticmethod(_file_writer)
|
| +
|
| + 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:
|
| + 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)
|
| +
|
| + def test_setup_py_with_BOM(self):
|
| + """
|
| + It should be possible to execute a setup.py with a Byte Order Mark
|
| + """
|
| + target = pkg_resources.resource_filename(__name__,
|
| + 'script-with-bom.py')
|
| + namespace = types.ModuleType('namespace')
|
| + setuptools.sandbox._execfile(target, vars(namespace))
|
| + assert namespace.result == 'passed'
|
| +
|
| + def test_setup_py_with_CRLF(self):
|
| + setup_py = os.path.join(self.dir, 'setup.py')
|
| + with open(setup_py, 'wb') as stream:
|
| + stream.write(b'"degenerate script"\r\n')
|
| + setuptools.sandbox._execfile(setup_py, globals())
|
| +
|
| +if __name__ == '__main__':
|
| + unittest.main()
|
|
|