def setup_class(self): self.initial_elements = [ R(1, 1, 10, 10), R(2, 2, 20, 20), R(3, 3, 30, 30), ] self.changelist = [ Insert(R(4, 4, 40, 40)) ] # used for commit later self.counter = 0 self.received_events = [] def on_change(event): self.counter += 1 self.received_events += [event] self.eb = EventBus() self.model = CanvasModel(self.eb) self.eb.register(Model_Changed, on_change)
class Test_CanvasModel(object): def setup_class(self): self.initial_elements = [ R(1, 1, 10, 10), R(2, 2, 20, 20), R(3, 3, 30, 30), ] self.changelist = [ Insert(R(4, 4, 40, 40)) ] # used for commit later self.counter = 0 self.received_events = [] def on_change(event): self.counter += 1 self.received_events += [event] self.eb = EventBus() self.model = CanvasModel(self.eb) self.eb.register(Model_Changed, on_change) def test_setting_elems_updates_elems(self): to_give = self.initial_elements[:] # copy self.model.elems = to_give assert to_give == self.initial_elements # model didn't change given assert self.model.elems == self.initial_elements assert self.model._elems == self.initial_elements def test_setting_elems_updates_changelog(self): assert self.model._changelog == [ [ Insert(R(1, 1, 10, 10)), Insert(R(2, 2, 20, 20)), Insert(R(3, 3, 30, 30)), ], ] def test_setting_elems_informs_listeners(self): assert self.counter == 1 assert len(self.received_events) == 1 assert self.received_events[0].data == self.model._changelog[0] def test_cant_modify_elems_through_getter(self): self.model.elems[1] = 'abc' self.model.elems.pop(0) assert self.model.elems == self.initial_elements def test_cant_inject_changes_to_changelog_through_event(self): evt = self.received_events[0] backup = evt.data[0] evt.data[0] == 'abc' assert self.model._changelog == [ [ Insert(R(1, 1, 10, 10)), Insert(R(2, 2, 20, 20)), Insert(R(3, 3, 30, 30)), ], ] evt.data[0] = backup def test_commit(self): self.model.commit(self.changelist) def test_commit_informs_listeners(self): assert self.counter == 2 assert len(self.received_events) == 2 assert self.received_events[1].data == [ Insert(R(4, 4, 40, 40)) ] def test_commit_updates_elems(self): assert self.model._elems == [ R(1, 1, 10, 10), R(2, 2, 20, 20), R(3, 3, 30, 30), R(4, 4, 40, 40), ] assert self.model.elems == self.model._elems def test_commit_updates_changelog(self): assert self.model._changelog == [ [ Insert(R(1, 1, 10, 10)), Insert(R(2, 2, 20, 20)), Insert(R(3, 3, 30, 30)), ], [ Insert(R(4, 4, 40, 40)), ] ] def test_modify_changes_in_changelog_through_commit_argument(self): self.changelist[0] = 'abc' assert self.model._changelog == [ [ Insert(R(1, 1, 10, 10)), Insert(R(2, 2, 20, 20)), Insert(R(3, 3, 30, 30)), ], [ Insert(R(4, 4, 40, 40)), ] ] self.changelist.pop(0) assert self.model._changelog == [ [ Insert(R(1, 1, 10, 10)), Insert(R(2, 2, 20, 20)), Insert(R(3, 3, 30, 30)), ], [ Insert(R(4, 4, 40, 40)), ] ] assert self.received_events[1].data == [ Insert(R(4, 4, 40, 40)) ]