testtools: Merge in new upstream.
[nivanova/samba-autobuild/.git] / lib / testtools / testtools / tests / test_run.py
1 # Copyright (c) 2010 Testtools authors. See LICENSE for details.
2
3 """Tests for the test runner logic."""
4
5 from testtools.helpers import try_import, try_imports
6 fixtures = try_import('fixtures')
7 StringIO = try_imports(['StringIO.StringIO', 'io.StringIO'])
8
9 import testtools
10 from testtools import TestCase, run
11
12
13 if fixtures:
14     class SampleTestFixture(fixtures.Fixture):
15         """Creates testtools.runexample temporarily."""
16
17         def __init__(self):
18             self.package = fixtures.PythonPackage(
19             'runexample', [('__init__.py', """
20 from testtools import TestCase
21
22 class TestFoo(TestCase):
23     def test_bar(self):
24         pass
25     def test_quux(self):
26         pass
27 def test_suite():
28     from unittest import TestLoader
29     return TestLoader().loadTestsFromName(__name__)
30 """)])
31
32         def setUp(self):
33             super(SampleTestFixture, self).setUp()
34             self.useFixture(self.package)
35             testtools.__path__.append(self.package.base)
36             self.addCleanup(testtools.__path__.remove, self.package.base)
37
38
39 class TestRun(TestCase):
40
41     def test_run_list(self):
42         if fixtures is None:
43             self.skipTest("Need fixtures")
44         package = self.useFixture(SampleTestFixture())
45         out = StringIO()
46         run.main(['prog', '-l', 'testtools.runexample.test_suite'], out)
47         self.assertEqual("""testtools.runexample.TestFoo.test_bar
48 testtools.runexample.TestFoo.test_quux
49 """, out.getvalue())
50
51     def test_run_load_list(self):
52         if fixtures is None:
53             self.skipTest("Need fixtures")
54         package = self.useFixture(SampleTestFixture())
55         out = StringIO()
56         # We load two tests - one that exists and one that doesn't, and we
57         # should get the one that exists and neither the one that doesn't nor
58         # the unmentioned one that does.
59         tempdir = self.useFixture(fixtures.TempDir())
60         tempname = tempdir.path + '/tests.list'
61         f = open(tempname, 'wb')
62         try:
63             f.write("""
64 testtools.runexample.TestFoo.test_bar
65 testtools.runexample.missingtest
66 """)
67         finally:
68             f.close()
69         run.main(['prog', '-l', '--load-list', tempname,
70             'testtools.runexample.test_suite'], out)
71         self.assertEqual("""testtools.runexample.TestFoo.test_bar
72 """, out.getvalue())
73
74 def test_suite():
75     from unittest import TestLoader
76     return TestLoader().loadTestsFromName(__name__)