test_resourced_test_case.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. # testresources: extensions to python unittest to allow declaritive use
  2. # of resources by test cases.
  3. #
  4. # Copyright (c) 2005-2010 Testresources Contributors
  5. #
  6. # Licensed under either the Apache License, Version 2.0 or the BSD 3-clause
  7. # license at the users choice. A copy of both licenses are available in the
  8. # project source as Apache-2.0 and BSD. You may not use this file except in
  9. # compliance with one of these two licences.
  10. #
  11. # Unless required by applicable law or agreed to in writing, software distributed
  12. # under these licenses is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
  13. # CONDITIONS OF ANY KIND, either express or implied. See the license you chose
  14. # for the specific language governing permissions and limitations under that
  15. # license.
  16. #
  17. import unittest
  18. import testtools
  19. import testresources
  20. from testresources.tests import ResultWithResourceExtensions
  21. def test_suite():
  22. loader = testresources.tests.TestUtil.TestLoader()
  23. result = loader.loadTestsFromName(__name__)
  24. return result
  25. class MockResource(testresources.TestResource):
  26. """Resource used for testing ResourcedTestCase."""
  27. def __init__(self, resource):
  28. testresources.TestResource.__init__(self)
  29. self._resource = resource
  30. def make(self, dependency_resources):
  31. return self._resource
  32. class MockResourceInstance(object):
  33. """A resource instance."""
  34. class TestResourcedTestCase(testtools.TestCase):
  35. def setUp(self):
  36. super(TestResourcedTestCase, self).setUp()
  37. class Example(testresources.ResourcedTestCase):
  38. def test_example(self):
  39. pass
  40. self.resourced_case = Example('test_example')
  41. self.resource = self.getUniqueString()
  42. self.resource_manager = MockResource(self.resource)
  43. def testSetUpUsesSuper(self):
  44. class OtherBaseCase(unittest.TestCase):
  45. setUpCalled = False
  46. def setUp(self):
  47. self.setUpCalled = True
  48. super(OtherBaseCase, self).setUp()
  49. class OurCase(testresources.ResourcedTestCase, OtherBaseCase):
  50. def runTest(self):
  51. pass
  52. ourCase = OurCase()
  53. ourCase.setUp()
  54. self.assertTrue(ourCase.setUpCalled)
  55. def testTearDownUsesSuper(self):
  56. class OtherBaseCase(unittest.TestCase):
  57. tearDownCalled = False
  58. def tearDown(self):
  59. self.tearDownCalled = True
  60. super(OtherBaseCase, self).setUp()
  61. class OurCase(testresources.ResourcedTestCase, OtherBaseCase):
  62. def runTest(self):
  63. pass
  64. ourCase = OurCase()
  65. ourCase.setUp()
  66. ourCase.tearDown()
  67. self.assertTrue(ourCase.tearDownCalled)
  68. def testDefaults(self):
  69. self.assertEqual(self.resourced_case.resources, [])
  70. def testResultPassedToResources(self):
  71. result = ResultWithResourceExtensions()
  72. self.resourced_case.resources = [("foo", self.resource_manager)]
  73. self.resourced_case.run(result)
  74. self.assertEqual(4, len(result._calls))
  75. def testSetUpResourcesSingle(self):
  76. # setUpResources installs the resources listed in ResourcedTestCase.
  77. self.resourced_case.resources = [("foo", self.resource_manager)]
  78. testresources.setUpResources(self.resourced_case,
  79. self.resourced_case.resources, None)
  80. self.assertEqual(self.resource, self.resourced_case.foo)
  81. def testSetUpResourcesMultiple(self):
  82. # setUpResources installs the resources listed in ResourcedTestCase.
  83. self.resourced_case.resources = [
  84. ('foo', self.resource_manager),
  85. ('bar', MockResource('bar_resource'))]
  86. testresources.setUpResources(self.resourced_case,
  87. self.resourced_case.resources, None)
  88. self.assertEqual(self.resource, self.resourced_case.foo)
  89. self.assertEqual('bar_resource', self.resourced_case.bar)
  90. def testSetUpResourcesSetsUpDependences(self):
  91. resource = MockResourceInstance()
  92. self.resource_manager = MockResource(resource)
  93. self.resourced_case.resources = [('foo', self.resource_manager)]
  94. # Give the 'foo' resource access to a 'bar' resource
  95. self.resource_manager.resources.append(
  96. ('bar', MockResource('bar_resource')))
  97. testresources.setUpResources(self.resourced_case,
  98. self.resourced_case.resources, None)
  99. self.assertEqual(resource, self.resourced_case.foo)
  100. self.assertEqual('bar_resource', self.resourced_case.foo.bar)
  101. def testSetUpUsesResource(self):
  102. # setUpResources records a use of each declared resource.
  103. self.resourced_case.resources = [("foo", self.resource_manager)]
  104. testresources.setUpResources(self.resourced_case,
  105. self.resourced_case.resources, None)
  106. self.assertEqual(self.resource_manager._uses, 1)
  107. def testTearDownResourcesDeletesResourceAttributes(self):
  108. self.resourced_case.resources = [("foo", self.resource_manager)]
  109. self.resourced_case.setUpResources()
  110. self.resourced_case.tearDownResources()
  111. self.failIf(hasattr(self.resourced_case, "foo"))
  112. def testTearDownResourcesStopsUsingResource(self):
  113. # tearDownResources records that there is one less use of each
  114. # declared resource.
  115. self.resourced_case.resources = [("foo", self.resource_manager)]
  116. self.resourced_case.setUpResources()
  117. self.resourced_case.tearDownResources()
  118. self.assertEqual(self.resource_manager._uses, 0)
  119. def testTearDownResourcesStopsUsingDependencies(self):
  120. resource = MockResourceInstance()
  121. dep1 = MockResource('bar_resource')
  122. self.resource_manager = MockResource(resource)
  123. self.resourced_case.resources = [('foo', self.resource_manager)]
  124. # Give the 'foo' resource access to a 'bar' resource
  125. self.resource_manager.resources.append(
  126. ('bar', dep1))
  127. self.resourced_case.setUpResources()
  128. self.resourced_case.tearDownResources()
  129. self.assertEqual(dep1._uses, 0)
  130. def testSingleWithSetup(self):
  131. # setUp and tearDown invoke setUpResources and tearDownResources.
  132. self.resourced_case.resources = [("foo", self.resource_manager)]
  133. self.resourced_case.setUp()
  134. self.assertEqual(self.resourced_case.foo, self.resource)
  135. self.assertEqual(self.resource_manager._uses, 1)
  136. self.resourced_case.tearDown()
  137. self.failIf(hasattr(self.resourced_case, "foo"))
  138. self.assertEqual(self.resource_manager._uses, 0)