This is a regression test for the following bug: you try to run several test layers using subprocesses (e.g. because you used bin/test -j99), and the child process somehow is unable to find the layer it was supposed to be running. This is a serious problem that should not pass silently.
Instead of setting up the conditions for this problem to actually occur in practice we’ll simulate the subprocess invocation using –resume-layer.
>>> import os.path, sys
>>> directory_with_tests = os.path.join(this_directory, 'testrunner-ex')
>>> defaults = [
... '--path', directory_with_tests,
... '--tests-pattern', '^sampletestsf?$',
... ]
The test runner does some funky stuff in this case, specifically, it closes sys.stdout, which makes doctest unhappy, so we stub the close method out.
>>> sys.stdout.close = lambda: None
>>> from six import StringIO
>>> orig_stderr = sys.stderr
>>> sys.stderr = fake_stderr = StringIO()
>>> sys.argv = 'test --resume-layer NoSuchLayer 0'.split()
>>> from zope import testrunner
>>> testrunner.run_internal(defaults)
**********************************************************************
Cannot find layer NoSuchLayer
**********************************************************************
Total: 0 tests, 0 failures, 1 errors and 0 skipped in 0.000 seconds.
True
It also prints to stderr to communicate with the parent process
>>> print(fake_stderr.getvalue(), end='')
0 0 1
subprocess failed for NoSuchLayer
Cleanup
>>> del sys.stdout.close
>>> sys.stderr = orig_stderr