Index: recipe_engine/third_party/setuptools/tests/__init__.py |
diff --git a/recipe_engine/third_party/setuptools/tests/__init__.py b/recipe_engine/third_party/setuptools/tests/__init__.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d6a4542eca49d3dd3705fca13c5e17d13550dc9a |
--- /dev/null |
+++ b/recipe_engine/third_party/setuptools/tests/__init__.py |
@@ -0,0 +1,351 @@ |
+"""Tests for the 'setuptools' package""" |
+import sys |
+import os |
+import unittest |
+import doctest |
+import distutils.core |
+import distutils.cmd |
+from distutils.errors import DistutilsOptionError, DistutilsPlatformError |
+from distutils.errors import DistutilsSetupError |
+from distutils.core import Extension |
+from distutils.version import LooseVersion |
+from setuptools.compat import func_code |
+ |
+from setuptools.compat import func_code |
+import setuptools.dist |
+import setuptools.depends as dep |
+from setuptools import Feature |
+from setuptools.depends import Require |
+ |
+def additional_tests(): |
+ suite = unittest.TestSuite(( |
+ doctest.DocFileSuite( |
+ os.path.join('tests', 'api_tests.txt'), |
+ optionflags=doctest.ELLIPSIS, package='pkg_resources', |
+ ), |
+ )) |
+ if sys.platform == 'win32': |
+ suite.addTest(doctest.DocFileSuite('win_script_wrapper.txt')) |
+ return suite |
+ |
+def makeSetup(**args): |
+ """Return distribution from 'setup(**args)', without executing commands""" |
+ |
+ distutils.core._setup_stop_after = "commandline" |
+ |
+ # Don't let system command line leak into tests! |
+ args.setdefault('script_args',['install']) |
+ |
+ try: |
+ return setuptools.setup(**args) |
+ finally: |
+ distutils.core._setup_stop_after = None |
+ |
+ |
+class DependsTests(unittest.TestCase): |
+ |
+ def testExtractConst(self): |
+ if not hasattr(dep, 'extract_constant'): |
+ # skip on non-bytecode platforms |
+ return |
+ |
+ def f1(): |
+ global x, y, z |
+ x = "test" |
+ y = z |
+ |
+ fc = func_code(f1) |
+ # unrecognized name |
+ self.assertEqual(dep.extract_constant(fc,'q', -1), None) |
+ |
+ # constant assigned |
+ self.assertEqual(dep.extract_constant(fc,'x', -1), "test") |
+ |
+ # expression assigned |
+ self.assertEqual(dep.extract_constant(fc,'y', -1), -1) |
+ |
+ # recognized name, not assigned |
+ self.assertEqual(dep.extract_constant(fc,'z', -1), None) |
+ |
+ def testFindModule(self): |
+ self.assertRaises(ImportError, dep.find_module, 'no-such.-thing') |
+ self.assertRaises(ImportError, dep.find_module, 'setuptools.non-existent') |
+ f,p,i = dep.find_module('setuptools.tests') |
+ f.close() |
+ |
+ def testModuleExtract(self): |
+ if not hasattr(dep, 'get_module_constant'): |
+ # skip on non-bytecode platforms |
+ return |
+ |
+ from email import __version__ |
+ self.assertEqual( |
+ dep.get_module_constant('email','__version__'), __version__ |
+ ) |
+ self.assertEqual( |
+ dep.get_module_constant('sys','version'), sys.version |
+ ) |
+ self.assertEqual( |
+ dep.get_module_constant('setuptools.tests','__doc__'),__doc__ |
+ ) |
+ |
+ def testRequire(self): |
+ if not hasattr(dep, 'extract_constant'): |
+ # skip on non-bytecode platformsh |
+ return |
+ |
+ req = Require('Email','1.0.3','email') |
+ |
+ self.assertEqual(req.name, 'Email') |
+ self.assertEqual(req.module, 'email') |
+ self.assertEqual(req.requested_version, '1.0.3') |
+ self.assertEqual(req.attribute, '__version__') |
+ self.assertEqual(req.full_name(), 'Email-1.0.3') |
+ |
+ from email import __version__ |
+ self.assertEqual(req.get_version(), __version__) |
+ self.assertTrue(req.version_ok('1.0.9')) |
+ self.assertTrue(not req.version_ok('0.9.1')) |
+ self.assertTrue(not req.version_ok('unknown')) |
+ |
+ self.assertTrue(req.is_present()) |
+ self.assertTrue(req.is_current()) |
+ |
+ req = Require('Email 3000','03000','email',format=LooseVersion) |
+ self.assertTrue(req.is_present()) |
+ self.assertTrue(not req.is_current()) |
+ self.assertTrue(not req.version_ok('unknown')) |
+ |
+ req = Require('Do-what-I-mean','1.0','d-w-i-m') |
+ self.assertTrue(not req.is_present()) |
+ self.assertTrue(not req.is_current()) |
+ |
+ req = Require('Tests', None, 'tests', homepage="http://example.com") |
+ self.assertEqual(req.format, None) |
+ self.assertEqual(req.attribute, None) |
+ self.assertEqual(req.requested_version, None) |
+ self.assertEqual(req.full_name(), 'Tests') |
+ self.assertEqual(req.homepage, 'http://example.com') |
+ |
+ paths = [os.path.dirname(p) for p in __path__] |
+ self.assertTrue(req.is_present(paths)) |
+ self.assertTrue(req.is_current(paths)) |
+ |
+ |
+class DistroTests(unittest.TestCase): |
+ |
+ def setUp(self): |
+ self.e1 = Extension('bar.ext',['bar.c']) |
+ self.e2 = Extension('c.y', ['y.c']) |
+ |
+ self.dist = makeSetup( |
+ packages=['a', 'a.b', 'a.b.c', 'b', 'c'], |
+ py_modules=['b.d','x'], |
+ ext_modules = (self.e1, self.e2), |
+ package_dir = {}, |
+ ) |
+ |
+ def testDistroType(self): |
+ self.assertTrue(isinstance(self.dist,setuptools.dist.Distribution)) |
+ |
+ def testExcludePackage(self): |
+ self.dist.exclude_package('a') |
+ self.assertEqual(self.dist.packages, ['b','c']) |
+ |
+ self.dist.exclude_package('b') |
+ self.assertEqual(self.dist.packages, ['c']) |
+ self.assertEqual(self.dist.py_modules, ['x']) |
+ self.assertEqual(self.dist.ext_modules, [self.e1, self.e2]) |
+ |
+ self.dist.exclude_package('c') |
+ self.assertEqual(self.dist.packages, []) |
+ self.assertEqual(self.dist.py_modules, ['x']) |
+ self.assertEqual(self.dist.ext_modules, [self.e1]) |
+ |
+ # test removals from unspecified options |
+ makeSetup().exclude_package('x') |
+ |
+ def testIncludeExclude(self): |
+ # remove an extension |
+ self.dist.exclude(ext_modules=[self.e1]) |
+ self.assertEqual(self.dist.ext_modules, [self.e2]) |
+ |
+ # add it back in |
+ self.dist.include(ext_modules=[self.e1]) |
+ self.assertEqual(self.dist.ext_modules, [self.e2, self.e1]) |
+ |
+ # should not add duplicate |
+ self.dist.include(ext_modules=[self.e1]) |
+ self.assertEqual(self.dist.ext_modules, [self.e2, self.e1]) |
+ |
+ def testExcludePackages(self): |
+ self.dist.exclude(packages=['c','b','a']) |
+ self.assertEqual(self.dist.packages, []) |
+ self.assertEqual(self.dist.py_modules, ['x']) |
+ self.assertEqual(self.dist.ext_modules, [self.e1]) |
+ |
+ def testEmpty(self): |
+ dist = makeSetup() |
+ dist.include(packages=['a'], py_modules=['b'], ext_modules=[self.e2]) |
+ dist = makeSetup() |
+ dist.exclude(packages=['a'], py_modules=['b'], ext_modules=[self.e2]) |
+ |
+ def testContents(self): |
+ self.assertTrue(self.dist.has_contents_for('a')) |
+ self.dist.exclude_package('a') |
+ self.assertTrue(not self.dist.has_contents_for('a')) |
+ |
+ self.assertTrue(self.dist.has_contents_for('b')) |
+ self.dist.exclude_package('b') |
+ self.assertTrue(not self.dist.has_contents_for('b')) |
+ |
+ self.assertTrue(self.dist.has_contents_for('c')) |
+ self.dist.exclude_package('c') |
+ self.assertTrue(not self.dist.has_contents_for('c')) |
+ |
+ def testInvalidIncludeExclude(self): |
+ self.assertRaises(DistutilsSetupError, |
+ self.dist.include, nonexistent_option='x' |
+ ) |
+ self.assertRaises(DistutilsSetupError, |
+ self.dist.exclude, nonexistent_option='x' |
+ ) |
+ self.assertRaises(DistutilsSetupError, |
+ self.dist.include, packages={'x':'y'} |
+ ) |
+ self.assertRaises(DistutilsSetupError, |
+ self.dist.exclude, packages={'x':'y'} |
+ ) |
+ self.assertRaises(DistutilsSetupError, |
+ self.dist.include, ext_modules={'x':'y'} |
+ ) |
+ self.assertRaises(DistutilsSetupError, |
+ self.dist.exclude, ext_modules={'x':'y'} |
+ ) |
+ |
+ self.assertRaises(DistutilsSetupError, |
+ self.dist.include, package_dir=['q'] |
+ ) |
+ self.assertRaises(DistutilsSetupError, |
+ self.dist.exclude, package_dir=['q'] |
+ ) |
+ |
+ |
+class FeatureTests(unittest.TestCase): |
+ |
+ def setUp(self): |
+ self.req = Require('Distutils','1.0.3','distutils') |
+ self.dist = makeSetup( |
+ features={ |
+ 'foo': Feature("foo",standard=True,require_features=['baz',self.req]), |
+ 'bar': Feature("bar", standard=True, packages=['pkg.bar'], |
+ py_modules=['bar_et'], remove=['bar.ext'], |
+ ), |
+ 'baz': Feature( |
+ "baz", optional=False, packages=['pkg.baz'], |
+ scripts = ['scripts/baz_it'], |
+ libraries=[('libfoo','foo/foofoo.c')] |
+ ), |
+ 'dwim': Feature("DWIM", available=False, remove='bazish'), |
+ }, |
+ script_args=['--without-bar', 'install'], |
+ packages = ['pkg.bar', 'pkg.foo'], |
+ py_modules = ['bar_et', 'bazish'], |
+ ext_modules = [Extension('bar.ext',['bar.c'])] |
+ ) |
+ |
+ def testDefaults(self): |
+ self.assertTrue(not |
+ Feature( |
+ "test",standard=True,remove='x',available=False |
+ ).include_by_default() |
+ ) |
+ self.assertTrue( |
+ Feature("test",standard=True,remove='x').include_by_default() |
+ ) |
+ # Feature must have either kwargs, removes, or require_features |
+ self.assertRaises(DistutilsSetupError, Feature, "test") |
+ |
+ def testAvailability(self): |
+ self.assertRaises( |
+ DistutilsPlatformError, |
+ self.dist.features['dwim'].include_in, self.dist |
+ ) |
+ |
+ def testFeatureOptions(self): |
+ dist = self.dist |
+ self.assertTrue( |
+ ('with-dwim',None,'include DWIM') in dist.feature_options |
+ ) |
+ self.assertTrue( |
+ ('without-dwim',None,'exclude DWIM (default)') in dist.feature_options |
+ ) |
+ self.assertTrue( |
+ ('with-bar',None,'include bar (default)') in dist.feature_options |
+ ) |
+ self.assertTrue( |
+ ('without-bar',None,'exclude bar') in dist.feature_options |
+ ) |
+ self.assertEqual(dist.feature_negopt['without-foo'],'with-foo') |
+ self.assertEqual(dist.feature_negopt['without-bar'],'with-bar') |
+ self.assertEqual(dist.feature_negopt['without-dwim'],'with-dwim') |
+ self.assertTrue(not 'without-baz' in dist.feature_negopt) |
+ |
+ def testUseFeatures(self): |
+ dist = self.dist |
+ self.assertEqual(dist.with_foo,1) |
+ self.assertEqual(dist.with_bar,0) |
+ self.assertEqual(dist.with_baz,1) |
+ self.assertTrue(not 'bar_et' in dist.py_modules) |
+ self.assertTrue(not 'pkg.bar' in dist.packages) |
+ self.assertTrue('pkg.baz' in dist.packages) |
+ self.assertTrue('scripts/baz_it' in dist.scripts) |
+ self.assertTrue(('libfoo','foo/foofoo.c') in dist.libraries) |
+ self.assertEqual(dist.ext_modules,[]) |
+ self.assertEqual(dist.require_features, [self.req]) |
+ |
+ # If we ask for bar, it should fail because we explicitly disabled |
+ # it on the command line |
+ self.assertRaises(DistutilsOptionError, dist.include_feature, 'bar') |
+ |
+ def testFeatureWithInvalidRemove(self): |
+ self.assertRaises( |
+ SystemExit, makeSetup, features = {'x':Feature('x', remove='y')} |
+ ) |
+ |
+class TestCommandTests(unittest.TestCase): |
+ |
+ def testTestIsCommand(self): |
+ test_cmd = makeSetup().get_command_obj('test') |
+ self.assertTrue(isinstance(test_cmd, distutils.cmd.Command)) |
+ |
+ def testLongOptSuiteWNoDefault(self): |
+ ts1 = makeSetup(script_args=['test','--test-suite=foo.tests.suite']) |
+ ts1 = ts1.get_command_obj('test') |
+ ts1.ensure_finalized() |
+ self.assertEqual(ts1.test_suite, 'foo.tests.suite') |
+ |
+ def testDefaultSuite(self): |
+ ts2 = makeSetup(test_suite='bar.tests.suite').get_command_obj('test') |
+ ts2.ensure_finalized() |
+ self.assertEqual(ts2.test_suite, 'bar.tests.suite') |
+ |
+ def testDefaultWModuleOnCmdLine(self): |
+ ts3 = makeSetup( |
+ test_suite='bar.tests', |
+ script_args=['test','-m','foo.tests'] |
+ ).get_command_obj('test') |
+ ts3.ensure_finalized() |
+ self.assertEqual(ts3.test_module, 'foo.tests') |
+ self.assertEqual(ts3.test_suite, 'foo.tests.test_suite') |
+ |
+ def testConflictingOptions(self): |
+ ts4 = makeSetup( |
+ script_args=['test','-m','bar.tests', '-s','foo.tests.suite'] |
+ ).get_command_obj('test') |
+ self.assertRaises(DistutilsOptionError, ts4.ensure_finalized) |
+ |
+ def testNoSuite(self): |
+ ts5 = makeSetup().get_command_obj('test') |
+ ts5.ensure_finalized() |
+ self.assertEqual(ts5.test_suite, None) |