def test_should_be_able_to_get_items_from_list_binding(self): list_model = ListModel.ListModel("items") list_model.insert_item(0, "zero") list_model.insert_item(1, "one") list_model.insert_item(2, "two") binding = Binding.ListBinding(list_model, "items") items = binding.items self.assertEqual(len(items), 3) self.assertEqual(items[2], "two") list_model.insert_item(0, "negative") self.assertEqual(len(items), 4) self.assertEqual(items[3], "two")
def test_table_widget_handles_pending_updates_in_close(self): from nion.ui import Widgets ui = TestUI.UserInterface() def create_item(item): return ui.create_label_widget(item) widget = Widgets.TableWidget(ui, create_item) list_model = ListModel.ListModel() widget.bind_items(Binding.ListBinding(list_model, "items")) with contextlib.closing(widget): list_model.insert_item(0, "abc") list_model.insert_item(1, "abc") list_model.remove_item(0) self.assertEqual(3, len(widget.pending_queued_tasks)) self.assertEqual(0, len(widget.pending_queued_tasks)) widget.run_pending_keyed_tasks()
def test_inserting_and_removing_item_into_binding_notifies_target(self): list_model = ListModel.ListModel("items") binding = Binding.ListBinding(list_model, "items") list_copy = list() def inserter(value: str, index: int) -> None: list_copy.insert(index, value) def remover(index: int) -> None: del list_copy[index] binding.inserter = inserter binding.remover = remover list_model.insert_item(0, "zero") list_model.insert_item(1, "one") self.assertEqual(len(list_copy), 2) self.assertEqual(list_copy[1], "one") list_model.remove_item(0) self.assertEqual(len(list_copy), 1) self.assertEqual(list_copy[0], "one")