summaryrefslogtreecommitdiff
path: root/lib/testresources/tests/test_resourced_test_case.py
blob: 73fffacd80c3ce9366b1f2ac2e8ea48f2c54e316 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#
#  testresources: extensions to python unittest to allow declaritive use
#  of resources by test cases.
#  Copyright (C) 2005  Robert Collins <robertc@robertcollins.net>
#
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#

import testtools
import testresources


def test_suite():
    loader = testresources.tests.TestUtil.TestLoader()
    result = loader.loadTestsFromName(__name__)
    return result


class MockResource(testresources.TestResource):
    """Resource used for testing ResourcedTestCase."""

    def __init__(self, resource):
        testresources.TestResource.__init__(self)
        self._resource = resource

    def make(self, dependency_resources):
        return self._resource


class MockResourceInstance(object):
    """A resource instance."""


class TestResourcedTestCase(testtools.TestCase):

    def setUp(self):
        testtools.TestCase.setUp(self)
        self.resourced_case = testresources.ResourcedTestCase('run')
        self.resource = self.getUniqueString()
        self.resource_manager = MockResource(self.resource)

    def testDefaults(self):
        self.assertEqual(self.resourced_case.resources, [])

    def testSetUpResourcesSingle(self):
        # setUpResources installs the resources listed in ResourcedTestCase.
        self.resourced_case.resources = [("foo", self.resource_manager)]
        self.resourced_case.setUpResources()
        self.assertEqual(self.resource, self.resourced_case.foo)

    def testSetUpResourcesMultiple(self):
        # setUpResources installs the resources listed in ResourcedTestCase.
        self.resourced_case.resources = [
            ('foo', self.resource_manager),
            ('bar', MockResource('bar_resource'))]
        self.resourced_case.setUpResources()
        self.assertEqual(self.resource, self.resourced_case.foo)
        self.assertEqual('bar_resource', self.resourced_case.bar)

    def testSetUpResourcesSetsUpDependences(self):
        resource = MockResourceInstance()
        self.resource_manager = MockResource(resource)
        self.resourced_case.resources = [('foo', self.resource_manager)]
        # Give the 'foo' resource access to a 'bar' resource
        self.resource_manager.resources.append(
            ('bar', MockResource('bar_resource')))
        self.resourced_case.setUpResources()
        self.assertEqual(resource, self.resourced_case.foo)
        self.assertEqual('bar_resource', self.resourced_case.foo.bar)

    def testSetUpUsesResource(self):
        # setUpResources records a use of each declared resource.
        self.resourced_case.resources = [("foo", self.resource_manager)]
        self.resourced_case.setUpResources()
        self.assertEqual(self.resource_manager._uses, 1)

    def testTearDownResourcesDeletesResourceAttributes(self):
        self.resourced_case.resources = [("foo", self.resource_manager)]
        self.resourced_case.setUpResources()
        self.resourced_case.tearDownResources()
        self.failIf(hasattr(self.resourced_case, "foo"))

    def testTearDownResourcesStopsUsingResource(self):
        # tearDownResources records that there is one less use of each
        # declared resource.
        self.resourced_case.resources = [("foo", self.resource_manager)]
        self.resourced_case.setUpResources()
        self.resourced_case.tearDownResources()
        self.assertEqual(self.resource_manager._uses, 0)

    def testTearDownResourcesStopsUsingDependencies(self):
        resource = MockResourceInstance()
        dep1 = MockResource('bar_resource')
        self.resource_manager = MockResource(resource)
        self.resourced_case.resources = [('foo', self.resource_manager)]
        # Give the 'foo' resource access to a 'bar' resource
        self.resource_manager.resources.append(
            ('bar', dep1))
        self.resourced_case.setUpResources()
        self.resourced_case.tearDownResources()
        self.assertEqual(dep1._uses, 0)

    def testSingleWithSetup(self):
        # setUp and tearDown invoke setUpResources and tearDownResources.
        self.resourced_case.resources = [("foo", self.resource_manager)]
        self.resourced_case.setUp()
        self.assertEqual(self.resourced_case.foo, self.resource)
        self.assertEqual(self.resource_manager._uses, 1)
        self.resourced_case.tearDown()
        self.failIf(hasattr(self.resourced_case, "foo"))
        self.assertEqual(self.resource_manager._uses, 0)