Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(168)

Side by Side Diff: recipe_engine/third_party/setuptools/tests/__init__.py

Issue 1344583003: Recipe package system. (Closed) Base URL: git@github.com:luci/recipes-py.git@master
Patch Set: Recompiled proto Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 """Tests for the 'setuptools' package"""
2 import sys
3 import os
4 import unittest
5 import doctest
6 import distutils.core
7 import distutils.cmd
8 from distutils.errors import DistutilsOptionError, DistutilsPlatformError
9 from distutils.errors import DistutilsSetupError
10 from distutils.core import Extension
11 from distutils.version import LooseVersion
12 from setuptools.compat import func_code
13
14 from setuptools.compat import func_code
15 import setuptools.dist
16 import setuptools.depends as dep
17 from setuptools import Feature
18 from setuptools.depends import Require
19
20 def additional_tests():
21 suite = unittest.TestSuite((
22 doctest.DocFileSuite(
23 os.path.join('tests', 'api_tests.txt'),
24 optionflags=doctest.ELLIPSIS, package='pkg_resources',
25 ),
26 ))
27 if sys.platform == 'win32':
28 suite.addTest(doctest.DocFileSuite('win_script_wrapper.txt'))
29 return suite
30
31 def makeSetup(**args):
32 """Return distribution from 'setup(**args)', without executing commands"""
33
34 distutils.core._setup_stop_after = "commandline"
35
36 # Don't let system command line leak into tests!
37 args.setdefault('script_args',['install'])
38
39 try:
40 return setuptools.setup(**args)
41 finally:
42 distutils.core._setup_stop_after = None
43
44
45 class DependsTests(unittest.TestCase):
46
47 def testExtractConst(self):
48 if not hasattr(dep, 'extract_constant'):
49 # skip on non-bytecode platforms
50 return
51
52 def f1():
53 global x, y, z
54 x = "test"
55 y = z
56
57 fc = func_code(f1)
58 # unrecognized name
59 self.assertEqual(dep.extract_constant(fc,'q', -1), None)
60
61 # constant assigned
62 self.assertEqual(dep.extract_constant(fc,'x', -1), "test")
63
64 # expression assigned
65 self.assertEqual(dep.extract_constant(fc,'y', -1), -1)
66
67 # recognized name, not assigned
68 self.assertEqual(dep.extract_constant(fc,'z', -1), None)
69
70 def testFindModule(self):
71 self.assertRaises(ImportError, dep.find_module, 'no-such.-thing')
72 self.assertRaises(ImportError, dep.find_module, 'setuptools.non-existent ')
73 f,p,i = dep.find_module('setuptools.tests')
74 f.close()
75
76 def testModuleExtract(self):
77 if not hasattr(dep, 'get_module_constant'):
78 # skip on non-bytecode platforms
79 return
80
81 from email import __version__
82 self.assertEqual(
83 dep.get_module_constant('email','__version__'), __version__
84 )
85 self.assertEqual(
86 dep.get_module_constant('sys','version'), sys.version
87 )
88 self.assertEqual(
89 dep.get_module_constant('setuptools.tests','__doc__'),__doc__
90 )
91
92 def testRequire(self):
93 if not hasattr(dep, 'extract_constant'):
94 # skip on non-bytecode platformsh
95 return
96
97 req = Require('Email','1.0.3','email')
98
99 self.assertEqual(req.name, 'Email')
100 self.assertEqual(req.module, 'email')
101 self.assertEqual(req.requested_version, '1.0.3')
102 self.assertEqual(req.attribute, '__version__')
103 self.assertEqual(req.full_name(), 'Email-1.0.3')
104
105 from email import __version__
106 self.assertEqual(req.get_version(), __version__)
107 self.assertTrue(req.version_ok('1.0.9'))
108 self.assertTrue(not req.version_ok('0.9.1'))
109 self.assertTrue(not req.version_ok('unknown'))
110
111 self.assertTrue(req.is_present())
112 self.assertTrue(req.is_current())
113
114 req = Require('Email 3000','03000','email',format=LooseVersion)
115 self.assertTrue(req.is_present())
116 self.assertTrue(not req.is_current())
117 self.assertTrue(not req.version_ok('unknown'))
118
119 req = Require('Do-what-I-mean','1.0','d-w-i-m')
120 self.assertTrue(not req.is_present())
121 self.assertTrue(not req.is_current())
122
123 req = Require('Tests', None, 'tests', homepage="http://example.com")
124 self.assertEqual(req.format, None)
125 self.assertEqual(req.attribute, None)
126 self.assertEqual(req.requested_version, None)
127 self.assertEqual(req.full_name(), 'Tests')
128 self.assertEqual(req.homepage, 'http://example.com')
129
130 paths = [os.path.dirname(p) for p in __path__]
131 self.assertTrue(req.is_present(paths))
132 self.assertTrue(req.is_current(paths))
133
134
135 class DistroTests(unittest.TestCase):
136
137 def setUp(self):
138 self.e1 = Extension('bar.ext',['bar.c'])
139 self.e2 = Extension('c.y', ['y.c'])
140
141 self.dist = makeSetup(
142 packages=['a', 'a.b', 'a.b.c', 'b', 'c'],
143 py_modules=['b.d','x'],
144 ext_modules = (self.e1, self.e2),
145 package_dir = {},
146 )
147
148 def testDistroType(self):
149 self.assertTrue(isinstance(self.dist,setuptools.dist.Distribution))
150
151 def testExcludePackage(self):
152 self.dist.exclude_package('a')
153 self.assertEqual(self.dist.packages, ['b','c'])
154
155 self.dist.exclude_package('b')
156 self.assertEqual(self.dist.packages, ['c'])
157 self.assertEqual(self.dist.py_modules, ['x'])
158 self.assertEqual(self.dist.ext_modules, [self.e1, self.e2])
159
160 self.dist.exclude_package('c')
161 self.assertEqual(self.dist.packages, [])
162 self.assertEqual(self.dist.py_modules, ['x'])
163 self.assertEqual(self.dist.ext_modules, [self.e1])
164
165 # test removals from unspecified options
166 makeSetup().exclude_package('x')
167
168 def testIncludeExclude(self):
169 # remove an extension
170 self.dist.exclude(ext_modules=[self.e1])
171 self.assertEqual(self.dist.ext_modules, [self.e2])
172
173 # add it back in
174 self.dist.include(ext_modules=[self.e1])
175 self.assertEqual(self.dist.ext_modules, [self.e2, self.e1])
176
177 # should not add duplicate
178 self.dist.include(ext_modules=[self.e1])
179 self.assertEqual(self.dist.ext_modules, [self.e2, self.e1])
180
181 def testExcludePackages(self):
182 self.dist.exclude(packages=['c','b','a'])
183 self.assertEqual(self.dist.packages, [])
184 self.assertEqual(self.dist.py_modules, ['x'])
185 self.assertEqual(self.dist.ext_modules, [self.e1])
186
187 def testEmpty(self):
188 dist = makeSetup()
189 dist.include(packages=['a'], py_modules=['b'], ext_modules=[self.e2])
190 dist = makeSetup()
191 dist.exclude(packages=['a'], py_modules=['b'], ext_modules=[self.e2])
192
193 def testContents(self):
194 self.assertTrue(self.dist.has_contents_for('a'))
195 self.dist.exclude_package('a')
196 self.assertTrue(not self.dist.has_contents_for('a'))
197
198 self.assertTrue(self.dist.has_contents_for('b'))
199 self.dist.exclude_package('b')
200 self.assertTrue(not self.dist.has_contents_for('b'))
201
202 self.assertTrue(self.dist.has_contents_for('c'))
203 self.dist.exclude_package('c')
204 self.assertTrue(not self.dist.has_contents_for('c'))
205
206 def testInvalidIncludeExclude(self):
207 self.assertRaises(DistutilsSetupError,
208 self.dist.include, nonexistent_option='x'
209 )
210 self.assertRaises(DistutilsSetupError,
211 self.dist.exclude, nonexistent_option='x'
212 )
213 self.assertRaises(DistutilsSetupError,
214 self.dist.include, packages={'x':'y'}
215 )
216 self.assertRaises(DistutilsSetupError,
217 self.dist.exclude, packages={'x':'y'}
218 )
219 self.assertRaises(DistutilsSetupError,
220 self.dist.include, ext_modules={'x':'y'}
221 )
222 self.assertRaises(DistutilsSetupError,
223 self.dist.exclude, ext_modules={'x':'y'}
224 )
225
226 self.assertRaises(DistutilsSetupError,
227 self.dist.include, package_dir=['q']
228 )
229 self.assertRaises(DistutilsSetupError,
230 self.dist.exclude, package_dir=['q']
231 )
232
233
234 class FeatureTests(unittest.TestCase):
235
236 def setUp(self):
237 self.req = Require('Distutils','1.0.3','distutils')
238 self.dist = makeSetup(
239 features={
240 'foo': Feature("foo",standard=True,require_features=['baz',self. req]),
241 'bar': Feature("bar", standard=True, packages=['pkg.bar'],
242 py_modules=['bar_et'], remove=['bar.ext'],
243 ),
244 'baz': Feature(
245 "baz", optional=False, packages=['pkg.baz'],
246 scripts = ['scripts/baz_it'],
247 libraries=[('libfoo','foo/foofoo.c')]
248 ),
249 'dwim': Feature("DWIM", available=False, remove='bazish'),
250 },
251 script_args=['--without-bar', 'install'],
252 packages = ['pkg.bar', 'pkg.foo'],
253 py_modules = ['bar_et', 'bazish'],
254 ext_modules = [Extension('bar.ext',['bar.c'])]
255 )
256
257 def testDefaults(self):
258 self.assertTrue(not
259 Feature(
260 "test",standard=True,remove='x',available=False
261 ).include_by_default()
262 )
263 self.assertTrue(
264 Feature("test",standard=True,remove='x').include_by_default()
265 )
266 # Feature must have either kwargs, removes, or require_features
267 self.assertRaises(DistutilsSetupError, Feature, "test")
268
269 def testAvailability(self):
270 self.assertRaises(
271 DistutilsPlatformError,
272 self.dist.features['dwim'].include_in, self.dist
273 )
274
275 def testFeatureOptions(self):
276 dist = self.dist
277 self.assertTrue(
278 ('with-dwim',None,'include DWIM') in dist.feature_options
279 )
280 self.assertTrue(
281 ('without-dwim',None,'exclude DWIM (default)') in dist.feature_optio ns
282 )
283 self.assertTrue(
284 ('with-bar',None,'include bar (default)') in dist.feature_options
285 )
286 self.assertTrue(
287 ('without-bar',None,'exclude bar') in dist.feature_options
288 )
289 self.assertEqual(dist.feature_negopt['without-foo'],'with-foo')
290 self.assertEqual(dist.feature_negopt['without-bar'],'with-bar')
291 self.assertEqual(dist.feature_negopt['without-dwim'],'with-dwim')
292 self.assertTrue(not 'without-baz' in dist.feature_negopt)
293
294 def testUseFeatures(self):
295 dist = self.dist
296 self.assertEqual(dist.with_foo,1)
297 self.assertEqual(dist.with_bar,0)
298 self.assertEqual(dist.with_baz,1)
299 self.assertTrue(not 'bar_et' in dist.py_modules)
300 self.assertTrue(not 'pkg.bar' in dist.packages)
301 self.assertTrue('pkg.baz' in dist.packages)
302 self.assertTrue('scripts/baz_it' in dist.scripts)
303 self.assertTrue(('libfoo','foo/foofoo.c') in dist.libraries)
304 self.assertEqual(dist.ext_modules,[])
305 self.assertEqual(dist.require_features, [self.req])
306
307 # If we ask for bar, it should fail because we explicitly disabled
308 # it on the command line
309 self.assertRaises(DistutilsOptionError, dist.include_feature, 'bar')
310
311 def testFeatureWithInvalidRemove(self):
312 self.assertRaises(
313 SystemExit, makeSetup, features = {'x':Feature('x', remove='y')}
314 )
315
316 class TestCommandTests(unittest.TestCase):
317
318 def testTestIsCommand(self):
319 test_cmd = makeSetup().get_command_obj('test')
320 self.assertTrue(isinstance(test_cmd, distutils.cmd.Command))
321
322 def testLongOptSuiteWNoDefault(self):
323 ts1 = makeSetup(script_args=['test','--test-suite=foo.tests.suite'])
324 ts1 = ts1.get_command_obj('test')
325 ts1.ensure_finalized()
326 self.assertEqual(ts1.test_suite, 'foo.tests.suite')
327
328 def testDefaultSuite(self):
329 ts2 = makeSetup(test_suite='bar.tests.suite').get_command_obj('test')
330 ts2.ensure_finalized()
331 self.assertEqual(ts2.test_suite, 'bar.tests.suite')
332
333 def testDefaultWModuleOnCmdLine(self):
334 ts3 = makeSetup(
335 test_suite='bar.tests',
336 script_args=['test','-m','foo.tests']
337 ).get_command_obj('test')
338 ts3.ensure_finalized()
339 self.assertEqual(ts3.test_module, 'foo.tests')
340 self.assertEqual(ts3.test_suite, 'foo.tests.test_suite')
341
342 def testConflictingOptions(self):
343 ts4 = makeSetup(
344 script_args=['test','-m','bar.tests', '-s','foo.tests.suite']
345 ).get_command_obj('test')
346 self.assertRaises(DistutilsOptionError, ts4.ensure_finalized)
347
348 def testNoSuite(self):
349 ts5 = makeSetup().get_command_obj('test')
350 ts5.ensure_finalized()
351 self.assertEqual(ts5.test_suite, None)
OLDNEW
« no previous file with comments | « recipe_engine/third_party/setuptools/svn_utils.py ('k') | recipe_engine/third_party/setuptools/tests/environment.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698