def test_event_changed(self): event = EventSystem(marker) changed_values = [] def changed(owner, variable, old_value, new_value, fromdb): changed_values.append((owner, variable, old_value, new_value, fromdb)) event.hook("changed", changed) variable = CustomVariable(event=event) variable.set("value1") variable.set("value2") variable.set("value3", from_db=True) variable.set(None, from_db=True) variable.set("value4") variable.delete() variable.delete() self.assertEquals(changed_values[0], (marker, variable, Undef, "value1", False)) self.assertEquals(changed_values[1], (marker, variable, ("g", ("s", "value1")), "value2", False)) self.assertEquals(changed_values[2], (marker, variable, ("g", ("s", "value2")), ("g", ("s", "value3")), True)) self.assertEquals(changed_values[3], (marker, variable, ("g", ("s", "value3")), None, True)) self.assertEquals(changed_values[4], (marker, variable, None, "value4", False)) self.assertEquals(changed_values[5], (marker, variable, ("g", ("s", "value4")), Undef, False)) self.assertEquals(len(changed_values), 6)
def test_execute_sends_event(self): event = EventSystem(marker) calls = [] def register_transaction(owner): calls.append(owner) event.hook("register-transaction", register_transaction) connection = self.database.connect(event) connection.execute("SELECT 1") self.assertEqual(len(calls), 1) self.assertEqual(calls[0], marker)
def test_lazy_value_setting_on_resolving(self): event = EventSystem(marker) def resolve(owner, variable, value): variable.set(marker) event.hook("resolve-lazy-value", resolve) lazy_value = LazyValue() variable = CustomVariable(lazy_value, event=event) self.assertEquals(variable.get(), ("g", ("s", marker)))
def test_lazy_value_reset_after_changed(self): event = EventSystem(marker) resolve_called = [] def resolve(owner, variable, value): resolve_called.append(True) event.hook("resolve-lazy-value", resolve) variable = CustomVariable(event=event) variable.set(LazyValue()) variable.set(1) self.assertEquals(variable.get(), ("g", ("s", 1))) self.assertEquals(resolve_called, [])
def test_lazy_value_changed_event(self): event = EventSystem(marker) changed_values = [] def changed(owner, variable, old_value, new_value, fromdb): changed_values.append((owner, variable, old_value, new_value, fromdb)) event.hook("changed", changed) variable = CustomVariable(event=event) lazy_value = LazyValue() variable.set(lazy_value) self.assertEquals(changed_values, [(marker, variable, Undef, lazy_value, False)])
def test_lazy_value_resolving(self): event = EventSystem(marker) resolve_values = [] def resolve(owner, variable, value): resolve_values.append((owner, variable, value)) lazy_value = LazyValue() variable = CustomVariable(lazy_value, event=event) event.hook("resolve-lazy-value", resolve) variable.get() self.assertEquals(resolve_values, [(marker, variable, lazy_value)])
def test_weak_reference(self): marker = Marker() called = [] def callback(owner): called.append(owner) self.event = EventSystem(marker) self.event.hook("event", callback) self.event.emit("event") self.assertEquals(called, [marker]) del called[:] del marker self.event.emit("event") self.assertEquals(called, [])
def setUp(self): TestHelper.setUp(self) self.event = EventSystem(marker)
class EventTest(TestHelper): def setUp(self): TestHelper.setUp(self) self.event = EventSystem(marker) def test_hook_unhook_emit(self): called1 = [] called2 = [] def callback1(owner, arg1, arg2): called1.append((owner, arg1, arg2)) def callback2(owner, arg1, arg2, data1, data2): called2.append((owner, arg1, arg2, data1, data2)) self.event.hook("one", callback1) self.event.hook("one", callback1) self.event.hook("one", callback2, 10, 20) self.event.hook("two", callback2, 10, 20) self.event.hook("two", callback2, 10, 20) self.event.hook("two", callback2, 30, 40) self.event.hook("three", callback1) self.event.emit("one", 1, 2) self.event.emit("two", 3, 4) self.event.unhook("two", callback2, 10, 20) self.event.emit("two", 3, 4) self.event.emit("three", 5, 6) self.assertEquals(sorted(called1), [ (marker, 1, 2), (marker, 5, 6), ]) self.assertEquals(sorted(called2), [ (marker, 1, 2, 10, 20), (marker, 3, 4, 10, 20), (marker, 3, 4, 30, 40), (marker, 3, 4, 30, 40), ]) def test_unhook_by_returning_false(self): called = [] def callback(owner): called.append(owner) return len(called) < 2 self.event.hook("event", callback) self.event.emit("event") self.event.emit("event") self.event.emit("event") self.event.emit("event") self.assertEquals(called, [marker, marker]) def test_weak_reference(self): marker = Marker() called = [] def callback(owner): called.append(owner) self.event = EventSystem(marker) self.event.hook("event", callback) self.event.emit("event") self.assertEquals(called, [marker]) del called[:] del marker self.event.emit("event") self.assertEquals(called, [])
def test_list_events(self): event = EventSystem(marker) variable = ListVariable(RawStrVariable, event=event, value_factory=list) changes = [] def changed(owner, variable, old_value, new_value, fromdb): changes.append((variable, old_value, new_value, fromdb)) event.emit("start-tracking-changes", event) event.hook("changed", changed) variable.checkpoint() event.emit("flush") self.assertEquals(changes, []) lst = variable.get() self.assertEquals(lst, []) self.assertEquals(changes, []) lst.append("a") self.assertEquals(changes, []) event.emit("flush") self.assertEquals(changes, [(variable, None, ["a"], False)]) del changes[:] event.emit("object-deleted") self.assertEquals(changes, [(variable, None, ["a"], False)])
def test_list_events(self): event = EventSystem(marker) variable = ListVariable(BytesVariable, event=event, value_factory=list) changes = [] def changed(owner, variable, old_value, new_value, fromdb): changes.append((variable, old_value, new_value, fromdb)) event.emit("start-tracking-changes", event) event.hook("changed", changed) variable.checkpoint() event.emit("flush") self.assertEqual(changes, []) lst = variable.get() self.assertEqual(lst, []) self.assertEqual(changes, []) lst.append("a") self.assertEqual(changes, []) event.emit("flush") self.assertEqual(changes, [(variable, None, ["a"], False)]) del changes[:] event.emit("object-deleted") self.assertEqual(changes, [(variable, None, ["a"], False)])