diff -r 5ff1fc726848 -r c6bca38c1cbf eggs/zc.buildout-1.5.2-py2.6.egg/zc/buildout/testselectingpython.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eggs/zc.buildout-1.5.2-py2.6.egg/zc/buildout/testselectingpython.py Sat Jan 08 11:20:57 2011 +0530 @@ -0,0 +1,96 @@ +############################################################################## +# +# Copyright (c) 2006 Zope Corporation and Contributors. +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## +import os, re, subprocess, sys, textwrap, unittest, doctest +from zope.testing import renormalizing +import zc.buildout.tests +import zc.buildout.testing + +if sys.version_info[:2] == (2, 4): + other_version = "2.5" +else: + other_version = "2.4" + +__test__ = dict( + test_selecting_python_via_easy_install= + """\ + +We can specify a specific Python executable. + + >>> dest = tmpdir('sample-install') + >>> ws = zc.buildout.easy_install.install( + ... ['demo'], dest, links=[link_server], + ... index='http://www.python.org/pypi/', + ... always_unzip=True, executable=other_executable) + + >>> ls(dest) + d demo-0.3-py%(other_version)s.egg + d demoneeded-1.1-py%(other_version)s.egg + +""" % dict(other_version=other_version) + ) + +def multi_python(test): + other_executable = zc.buildout.testing.find_python(other_version) + command = textwrap.dedent('''\ + try: + import setuptools + except ImportError: + import sys + sys.exit(1) + ''') + env = dict(os.environ) + env.pop('PYTHONPATH', None) + if subprocess.call([other_executable, '-c', command], env=env): + # the other executable does not have setuptools. Get setuptools. + # We will do this using the same tools we are testing, for better or + # worse. Alternatively, we could try using bootstrap. + executable_dir = test.globs['tmpdir']('executable_dir') + executable_parts = os.path.join(executable_dir, 'parts') + test.globs['mkdir'](executable_parts) + ws = zc.buildout.easy_install.install( + ['setuptools'], executable_dir, + index='http://www.python.org/pypi/', + always_unzip=True, executable=other_executable) + zc.buildout.easy_install.sitepackage_safe_scripts( + executable_dir, ws, other_executable, executable_parts, + reqs=['setuptools'], interpreter='py') + original_executable = other_executable + other_executable = os.path.join(executable_dir, 'py') + assert not subprocess.call( + [other_executable, '-c', command], env=env), ( + 'test set up failed') + sample_eggs = test.globs['tmpdir']('sample_eggs') + os.mkdir(os.path.join(sample_eggs, 'index')) + test.globs['sample_eggs'] = sample_eggs + zc.buildout.tests.create_sample_eggs(test, executable=other_executable) + test.globs['other_executable'] = other_executable + + +def setup(test): + zc.buildout.testing.buildoutSetUp(test) + multi_python(test) + zc.buildout.tests.add_source_dist(test) + test.globs['link_server'] = test.globs['start_server']( + test.globs['sample_eggs']) + + +def test_suite(): + return doctest.DocTestSuite( + setUp=setup, + tearDown=zc.buildout.testing.buildoutTearDown, + checker=renormalizing.RENormalizing([ + (re.compile('setuptools-\S+-py%s.egg' % other_version), + 'setuptools-V-py%s.egg' % other_version), + ]), + )