===========
 Bug fixes
===========

Wrong setting of working-dir
============================

Since version 3.6.0 zope.testing can run layers in parallel processes.
tranchitella.recipe.testrunner sets the working directory for each using a
relative path. The subprocesses have the given working directory already set,
but zc.recipe.testrunner tried to set it again and failed ("IOError: No such
file or directory").

To illustrate this, we'll create a project with two layers:

    >>> mkdir(sample_buildout, 'sample_working_dir')
    >>> mkdir(sample_buildout, 'bugfix1')
    >>> mkdir(sample_buildout, 'bugfix1', 'bugfix1')
    >>> write(sample_buildout, 'bugfix1', 'bugfix1', '__init__.py', '')
    >>> write(sample_buildout, 'bugfix1', 'bugfix1', 'tests.py',
    ... '''
    ... import unittest
    ...
    ... class Layer1:
    ...     pass
    ... class Layer2:
    ...     pass
    ...
    ... class TestDemo1(unittest.TestCase):
    ...    def test(self):
    ...        pass
    ... class TestDemo2(unittest.TestCase):
    ...    def test(self):
    ...        pass
    ...
    ... def test_suite():
    ...     suite = unittest.TestSuite()
    ...     suite1 = unittest.makeSuite(TestDemo1)
    ...     suite1.layer = Layer1
    ...     suite.addTest(suite1)
    ...     suite2 = unittest.makeSuite(TestDemo2)
    ...     suite2.layer = Layer2
    ...     suite.addTest(suite2)
    ...     return suite
    ... ''')

    >>> write(sample_buildout, 'bugfix1', 'setup.py',
    ... """
    ... from setuptools import setup
    ... 
    ... setup(name = "bugfix1")
    ... """)
    >>> write(sample_buildout, 'bugfix1', 'README.txt', '')

We create a buildout to install the bugfix1 project as a develop egg and to
create the test script using the working-directory parameter:

    >>> write(sample_buildout, 'buildout.cfg',
    ... """
    ... [buildout]
    ... develop = bugfix1
    ... parts = testbugfix1
    ... offline = true
    ...
    ... [testbugfix1]
    ... recipe = tranchitella.recipe.testrunner
    ... eggs = 
    ...    bugfix1
    ... script-name = test
    ... working-directory = sample_working_dir
    ... """)

Now when we run the buildout:

    >>> import os
    >>> os.chdir(sample_buildout)
    >>> print system(os.path.join(sample_buildout, 'bin', 'buildout') + ' -q'),

We can run the test script now:

    >>> print system(os.path.join(sample_buildout, 'bin', 'test') + ' -vv -j2'),
    Running tests at level 1
    Running bugfix1.tests.Layer1 tests:
      Set up bugfix1.tests.Layer1 in 0.000 seconds.
      Running:
     test (bugfix1.tests.TestDemo1)
      Ran 1 tests with 0 failures and 0 errors in 0.000 seconds.
    [Parallel tests running in bugfix1.tests.Layer2:
      . LAYER FINISHED]
    Running bugfix1.tests.Layer2 tests:
      Running in a subprocess.
      Set up bugfix1.tests.Layer2 in 0.000 seconds.
      Ran 1 tests with 0 failures and 0 errors in 0.000 seconds.
    Total: 2 tests, 0 failures, 0 errors in 0.261 seconds.
