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