コード例 #1
0
ファイル: test_mixins.py プロジェクト: dalejung/bouncebox
    def test_component_mixin_add_component_hooks(self):
        """
        Allow Mixins to define cls_add_component_hooks
        """
        class TestBase(bc.PreMixComponent):
            pass
        base = TestBase
        class TestMixin(object):
            def mixin_add_component_hook(self, *args, **kwargs):
                self.mixin1 = True
                self.last_call = kwargs

        class TestMixin2(object):
            def mixin_add_component_hook(self, *args, **kwargs):
                self.mixin2 = True
                self.last_call2 = kwargs

        mixins.component_mixin(base, TestMixin)
        mixins.component_mixin(base, TestMixin2)
        test = base('parent')
        child = base('child')
        assert len(test.cls_add_component_hooks) == 2
        test.add_component(child, test_param=123)
        # make sure both ac hooks run
        assert test.last_call['test_param'] == 123
        assert test.last_call2['test_param'] == 123
        assert test.mixin1
        assert test.mixin2
コード例 #2
0
ファイル: test_mixins.py プロジェクト: dalejung/bouncebox
    def test_component_mixin_listeners(self):
        """
        Assert that listeners
        """
        base = self.base
        class TestMixin(object):
            listeners = [(be.Event, 'handle_ev1')]
            def __init__(self):
                self.bob = 123
                num = getattr(self, 'num', 0)
                self.num = num + 1

            def handle_ev1(self, event):
                pass

        class TestMixin2(object):
            listeners = [(be.Event, 'handle_ev2')]
            def __init__(self):
                self.frank = 22
                num = getattr(self, 'num', 0)
                self.num = num + 1

            def handle_ev2(self, event):
                pass

        mixins.component_mixin(base, TestMixin)
        mixins.component_mixin(base, TestMixin2)
        test = base()
        assert len(test.listeners) == 2
        # did not affect ancestor
        assert len(bc.PreMixComponent.listeners) == 0
コード例 #3
0
ファイル: test_mixins.py プロジェクト: dalejung/bouncebox
    def test_component_mixin_init(self):
        """
            Assert that the inits are run
        """
        base = self.base
        class TestMixin(object):
            def __init__(self):
                self.bob = 123
                num = getattr(self, 'num', 0)
                self.num = num + 1

        class TestMixin2(object):
            def __init__(self):
                self.frank = 22
                num = getattr(self, 'num', 0)
                self.num = num + 1

        mixins.component_mixin(base, TestMixin)
        mixins.component_mixin(base, TestMixin2)
        test = base()
        assert test.bob == 123
        assert test.num == 2
        assert test.frank == 22
        assert len(base._init_hooks) == 2
        # did not affect ancestor
        assert len(bc.PreMixComponent._init_hooks) == 0
コード例 #4
0
ファイル: test_mixins.py プロジェクト: dalejung/bouncebox
 def test_component_mixin_add_twice(self):
     """
     Verify that a Mixin will only be added once
     """
     base = self.base
     res = mixins.component_mixin(base, mixins.BubbleDownMixin)
     assert res
     assert 'BubbleDownMixin' in base._mixins_
     res = mixins.component_mixin(base, mixins.BubbleDownMixin)
     assert not res
     assert len(base._mixins_) == 1
コード例 #5
0
ファイル: test_mixins.py プロジェクト: dalejung/bouncebox
    def test_component_mixin_methods(self):
        """
        assert that methods are aggregated
        """
        base = self.base
        class TestMixin(object):
            def handle_ev1(self, event):
                pass

        class TestMixin2(object):
            def handle_ev2(self, event):
                pass

        mixins.component_mixin(base, TestMixin)
        mixins.component_mixin(base, TestMixin2)
        test = base()
        assert hasattr(test, 'handle_ev1')
        assert hasattr(test, 'handle_ev2')
        test.handle_ev1(None)
        test.handle_ev2(None)
コード例 #6
0
ファイル: test_mixins.py プロジェクト: dalejung/bouncebox
    def test_component_mixin_methods_override(self):
        """
        assert that methods are aggregated
        """
        base = self.base
        class TestMixin(object):
            def dupe_method(self):
                return 1

        class TestMixin2(object):
            def dupe_method(self):
                return 2

        class TestMixin3(object):
            def dupe_method(self):
                return 3

        mixins.component_mixin(base, TestMixin)
        mixins.component_mixin(base, TestMixin2)
        test = base()
        # second one did not override first
        assert test.dupe_method() == 1

        # with override, third gets its method applied
        mixins.component_mixin(base, TestMixin3, override=['dupe_method'])
        assert test.dupe_method() == 3
コード例 #7
0
ファイル: test_mixins.py プロジェクト: dalejung/bouncebox
import sys
from unittest import TestCase

from mock import MagicMock

import bouncebox.core.component as bc
import bouncebox.core.event as be
import bouncebox.core.mixins as mixins

class TestBubbleDown(bc.PreMixComponent):
    pass

mixins.component_mixin(TestBubbleDown, mixins.BubbleDownMixin)

class TestBubbleDownMixin(TestCase):

    def __init__(self, *args, **kwargs):
        TestCase.__init__(self, *args, **kwargs)

    def runTest(self):
        pass

    def setUp(self):
        pass

    def test_bubble_down(self):
        parent = TestBubbleDown()
        mid = TestBubbleDown()
        child = TestBubbleDown()

        child.add_event_listener(be.Event, 'handle_event')
コード例 #8
0
ファイル: component.py プロジェクト: dalejung/bouncebox
    def global_event_handler(self, event):
        """
            Universal Event Handler. Utilitizes the internal router

            Parameters
            ----------
            event: Event
                Event to process via the Component's callbacks

            Notes
            -----
            The event_handler should call the same callbacks as BounceBox.broadcast
        """
        # lazy init internal router. Logic is that by the time event_handler is
        # called the listeners should all be added
        if not self._internal_router_built:
            self.init_internal_router()
        self._internal_router.send(event)

# MIXIN
# Add in mixins
class Component(PreMixComponent):
    pass

mixins.component_mixin(Component, mixins.BubbleDownMixin)

class Source(Component):
    def __init__(self):
        super(Source, self).__init__()