Beispiel #1
0
class TestBinding:
    @pytest.fixture(autouse=True)
    def fixture(self):
        self.src_bindable = MockBindable()
        self.dst_bindable = MockBindable()

        self.binding = Binding(src=self.src_bindable, dst=self.dst_bindable)

    def test_dst_is_updated_with_src_value(self):
        self.dst_bindable.set.assert_called_once_with(
            self.src_bindable.get.return_value)

    def test_src_poke(self):
        self.src_bindable.reset()
        self.dst_bindable.reset()

        self.src_bindable.poke()

        self.dst_bindable.set.assert_called_once_with(
            self.src_bindable.get.return_value)

    def test_dst_poke(self):
        self.src_bindable.reset()
        self.dst_bindable.reset()

        self.dst_bindable.poke()

        self.src_bindable.set.assert_called_once_with(
            self.dst_bindable.get.return_value)

    def test_unbind_stops_propagating_changes(self):
        self.src_bindable.reset()
        self.dst_bindable.reset()

        self.binding.unbind()

        self.src_bindable.poke()
        self.dst_bindable.poke()

        self.src_bindable.get.assert_not_called()
        self.src_bindable.set.assert_not_called()
        self.dst_bindable.get.assert_not_called()
        self.dst_bindable.set.assert_not_called()

    def test_unbind_deletes_references_to_src_and_dst(self):
        src_bindable_wr = weakref.ref(self.src_bindable)
        dst_bindable_wr = weakref.ref(self.dst_bindable)

        del self.src_bindable
        del self.dst_bindable

        gc.collect()
        assert src_bindable_wr() is not None
        assert dst_bindable_wr() is not None

        self.binding.unbind()

        gc.collect()
        assert src_bindable_wr() is None
        assert dst_bindable_wr() is None
Beispiel #2
0
class TestBinding_With_ToDstTransform:
    @pytest.fixture(autouse=True)
    def fixture(self):
        self.src_bindable = MockBindable()
        self.dst_bindable = MockBindable()

        # Can't use a Mock object for to_dst() since it can sometimes have global referrers that prevent it from being
        # garbage collected (which is required for one of the test cases)
        def to_dst(x):
            self.to_dst_called_with.append(x)
            return self.to_dst_return_value

        self.to_dst_called_with = []
        self.to_dst_return_value = object()
        self.to_dst = to_dst

        self.binding = Binding(src=self.src_bindable, dst=self.dst_bindable, to_dst=self.to_dst)

    def test_dst_is_updated_with_src_value(self):
        self.dst_bindable.set.assert_called_once_with(
            self.to_dst_return_value)

        assert self.to_dst_called_with == [self.src_bindable.get.return_value]

    def test_src_poke(self):
        self.src_bindable.reset()
        self.dst_bindable.reset()
        self.to_dst_called_with.clear()

        self.src_bindable.poke()

        self.dst_bindable.set.assert_called_once_with(
            self.to_dst_return_value)

        assert self.to_dst_called_with == [self.src_bindable.get.return_value]

    def test_unbind_deletes_references_to_to_dst(self):
        to_dst_wr = weakref.ref(self.to_dst)

        del self.to_dst

        gc.collect()
        assert to_dst_wr() is not None

        self.binding.unbind()

        gc.collect()

        assert to_dst_wr() is None
Beispiel #3
0
    def fixture(self):
        self.src_bindable = MockBindable()
        self.dst_bindable = MockBindable()

        # Can't use a Mock object for to_dst() since it can sometimes have global referrers that prevent it from being
        # garbage collected (which is required for one of the test cases)
        def to_src(x):
            self.to_src_called_with.append(x)
            return self.to_src_return_value

        self.to_src_called_with = []
        self.to_src_return_value = object()
        self.to_src = to_src

        self.binding = Binding(src=self.src_bindable, dst=self.dst_bindable, to_src=self.to_src)
Beispiel #4
0
    def fixture(self):
        self.src_bindable = MockBindable()
        self.dst_bindable = MockBindable()

        self.binding = Binding(src=self.src_bindable, dst=self.dst_bindable, one_way=True)

        self.src_bindable.reset()
        self.dst_bindable.reset()
Beispiel #5
0
    def view_ready(self) -> None:
        self.__data_bindings.extend([
            Binding(src=self._model.bn_thresh,
                    dst=self.view.bn_thresh,
                    to_dst=lambda x: x*100,
                    to_src=lambda x: x/100),
        ])

        self.__event_connections.extend([
            self.view.bn_tool_button_is_active.on_changed.connect(
                self._hdl_tool_button_is_active_changed
            )
        ])

        self._hdl_tool_button_is_active_changed()
Beispiel #6
0
    def fixture(self):
        self.src_bindable = MockBindable()
        self.dst_bindable = MockBindable()

        self.binding = Binding(src=self.src_bindable, dst=self.dst_bindable)
Beispiel #7
0
    def fixture(self):
        self.src_bindable = MockBindable()
        self.dst_bindable = MockBindable()
        self.dst_bindable.get.side_effect = NotImplementedError

        self.binding = Binding(src=self.src_bindable, dst=self.dst_bindable)