Merge lp:~free.ekanayaka/python-zope-fixtures/utility-fixture into lp:python-zope-fixtures

Proposed by Free Ekanayaka
Status: Merged
Merged at revision: 3
Proposed branch: lp:~free.ekanayaka/python-zope-fixtures/utility-fixture
Merge into: lp:python-zope-fixtures
Diff against target: 155 lines (+55/-12)
3 files modified
lib/zope_fixtures/__init__.py (+3/-2)
lib/zope_fixtures/components.py (+23/-4)
lib/zope_fixtures/tests/test_components.py (+29/-6)
To merge this branch: bzr merge lp:~free.ekanayaka/python-zope-fixtures/utility-fixture
Reviewer Review Type Date Requested Status
python-fixtures committers Pending
Review via email: mp+83124@code.launchpad.net

Description of the change

This branch:

- Renames zope_fixtures.zoperegistry.ZopeRegistryFixture to zope_fixtures.components.ComponentsFixture, to make it more clear that the APIs of interest are the ones provided by zope.components, and because the Zope prefix seems now redundant.

- Adds a new UtilityFixture, which is merely a convenience around ComponentsFixture for overriding a single utility, reducing boilerplate code for this common use case.

To post a comment you must log in.
Revision history for this message
Robert Collins (lifeless) wrote :

This needs some docs in README; I'll add that as I merge.

Revision history for this message
Robert Collins (lifeless) wrote :

Oh, and __all__ updated.

Revision history for this message
Robert Collins (lifeless) wrote :

Oh, and as you're stacking on a fixture, useFixture is handy :)

    def setUp(self):
        super(UtilityFixture, self).setUp()
        components = self.useFixture(ComponentsFixture())
        components.registry.registerUtility(*self.args, **self.kwargs)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/zope_fixtures/__init__.py'
--- lib/zope_fixtures/__init__.py 2011-11-22 12:31:11 +0000
+++ lib/zope_fixtures/__init__.py 2011-11-23 09:17:39 +0000
@@ -34,10 +34,11 @@
34__version__ = (0, 0, 1, 'beta', 0)34__version__ = (0, 0, 1, 'beta', 0)
3535
36__all__ = [36__all__ = [
37 'ZopeRegistryFixture',37 'ComponentsFixture',
38 'UtilityFixture',
38 ]39 ]
3940
40from zope_fixtures.zoperegistry import ZopeRegistryFixture41from zope_fixtures.components import ComponentsFixture, UtilityFixture
4142
4243
43def test_suite():44def test_suite():
4445
=== renamed file 'lib/zope_fixtures/zoperegistry.py' => 'lib/zope_fixtures/components.py'
--- lib/zope_fixtures/zoperegistry.py 2011-11-22 12:31:11 +0000
+++ lib/zope_fixtures/components.py 2011-11-23 09:17:39 +0000
@@ -14,7 +14,7 @@
14# limitations under that license.14# limitations under that license.
1515
16__all__ = [16__all__ = [
17 'ZopeRegistryFixture'17 'ComponentsFixture'
18 ]18 ]
1919
20from fixtures import Fixture20from fixtures import Fixture
@@ -24,7 +24,7 @@
24getSiteManager = try_import("zope.component.getSiteManager")24getSiteManager = try_import("zope.component.getSiteManager")
2525
2626
27class ZopeRegistryFixture(Fixture):27class ComponentsFixture(Fixture):
28 """Overlay the global Zope registry so that tests don't change it.28 """Overlay the global Zope registry so that tests don't change it.
2929
30 :ivar registry: An alternate Zope registry that can be used to override30 :ivar registry: An alternate Zope registry that can be used to override
@@ -37,15 +37,34 @@
37 class TestSomething(TestCase):37 class TestSomething(TestCase):
3838
39 def test_registry(self):39 def test_registry(self):
40 self.useFixture(ZopeRegistryFixture())40 self.useFixture(ComponentsFixture())
41 getSiteManager().registerUtility(...)41 getSiteManager().registerUtility(...)
42 # more code here42 # more code here
43 """43 """
4444
45 def setUp(self):45 def setUp(self):
46 super(ZopeRegistryFixture, self).setUp()46 super(ComponentsFixture, self).setUp()
47 self.registry = Components(bases=(getSiteManager(),))47 self.registry = Components(bases=(getSiteManager(),))
48 getSiteManager.sethook(lambda context=None: self.registry)48 getSiteManager.sethook(lambda context=None: self.registry)
49 self.addCleanup(getSiteManager.reset)49 self.addCleanup(getSiteManager.reset)
5050
5151
52class UtilityFixture(Fixture):
53 """Convenience around ComponentsFixture to override a single utility."""
54
55 def __init__(self, *args, **kwargs):
56 """Create an UtilityFixture.
57
58 The args and kwargs parameters are the same supported by
59 registerUtility and will be passed to it.
60 """
61 super(UtilityFixture, self).__init__()
62 self.args = args
63 self.kwargs = kwargs
64
65 def setUp(self):
66 super(UtilityFixture, self).setUp()
67 components = ComponentsFixture()
68 components.setUp()
69 components.registry.registerUtility(*self.args, **self.kwargs)
70 self.addCleanup(components.cleanUp)
5271
=== renamed file 'lib/zope_fixtures/tests/test_zoperegistry.py' => 'lib/zope_fixtures/tests/test_components.py'
--- lib/zope_fixtures/tests/test_zoperegistry.py 2011-11-22 12:31:11 +0000
+++ lib/zope_fixtures/tests/test_components.py 2011-11-23 09:17:39 +0000
@@ -18,7 +18,7 @@
18from zope.interface import Interface, implements18from zope.interface import Interface, implements
19from zope.component import provideUtility, queryUtility, getSiteManager19from zope.component import provideUtility, queryUtility, getSiteManager
2020
21from zope_fixtures import ZopeRegistryFixture21from zope_fixtures import ComponentsFixture, UtilityFixture
2222
2323
24class ITestUtility(Interface):24class ITestUtility(Interface):
@@ -29,25 +29,25 @@
29 implements(ITestUtility)29 implements(ITestUtility)
3030
3131
32class TestZopeRegistry(testtools.TestCase):32class TestComponentsFixture(testtools.TestCase):
3333
34 def test_overlays_site_manager(self):34 def test_overlays_site_manager(self):
35 # A custom site manager is installed.35 # A custom site manager is installed.
36 fixture = ZopeRegistryFixture()36 fixture = ComponentsFixture()
37 original_registry = getSiteManager()37 original_registry = getSiteManager()
38 self.useFixture(fixture)38 self.useFixture(fixture)
39 self.assertIs(fixture.registry, getSiteManager())39 self.assertIs(fixture.registry, getSiteManager())
40 self.assertIn(original_registry, fixture.registry.__bases__)40 self.assertIn(original_registry, fixture.registry.__bases__)
4141
42 def test_restores_site_manager(self):42 def test_restores_site_manager(self):
43 fixture = ZopeRegistryFixture()43 fixture = ComponentsFixture()
44 original_registry = getSiteManager()44 original_registry = getSiteManager()
45 with fixture:45 with fixture:
46 self.assertIs(fixture.registry, getSiteManager())46 self.assertIs(fixture.registry, getSiteManager())
47 self.assertIs(original_registry, getSiteManager())47 self.assertIs(original_registry, getSiteManager())
4848
49 def test_provide_utility_against_fixture_registry(self):49 def test_provide_utility_against_fixture_registry(self):
50 fixture = ZopeRegistryFixture()50 fixture = ComponentsFixture()
51 original_registry = getSiteManager()51 original_registry = getSiteManager()
52 self.useFixture(fixture)52 self.useFixture(fixture)
53 utility = TestUtility()53 utility = TestUtility()
@@ -57,11 +57,34 @@
57 self.assertIs(None, original_registry.queryUtility(ITestUtility))57 self.assertIs(None, original_registry.queryUtility(ITestUtility))
5858
59 def test_restores_original_registry(self):59 def test_restores_original_registry(self):
60 fixture = ZopeRegistryFixture()60 fixture = ComponentsFixture()
61 original_registry = getSiteManager()
61 original_utility = TestUtility()62 original_utility = TestUtility()
62 provideUtility(original_utility)63 provideUtility(original_utility)
64 self.addCleanup(original_registry.unregisterUtility, original_utility)
63 with fixture:65 with fixture:
64 overridden_utility = TestUtility()66 overridden_utility = TestUtility()
65 fixture.registry.registerUtility(overridden_utility)67 fixture.registry.registerUtility(overridden_utility)
66 self.assertIs(overridden_utility, queryUtility(ITestUtility))68 self.assertIs(overridden_utility, queryUtility(ITestUtility))
67 self.assertIs(original_utility, queryUtility(ITestUtility))69 self.assertIs(original_utility, queryUtility(ITestUtility))
70
71
72class TestUtilityFixture(testtools.TestCase):
73
74 def test_provide_utility(self):
75 utility = TestUtility()
76 fixture = UtilityFixture(utility)
77 self.useFixture(fixture)
78 self.assertIs(utility, queryUtility(ITestUtility))
79
80 def test_restore_utility(self):
81 utility = TestUtility()
82 with UtilityFixture(utility):
83 self.assertIs(utility, queryUtility(ITestUtility))
84 self.assertIs(None, queryUtility(ITestUtility))
85
86 def test_arguments_passthrough(self):
87 utility = TestUtility()
88 fixture = UtilityFixture(utility, name="foo")
89 self.useFixture(fixture)
90 self.assertIs(utility, queryUtility(ITestUtility, name="foo"))

Subscribers

People subscribed via source and target branches