def test_sorted_filtered_model_updates_when_data_item_enters_filter(self): def sort_by_date_key(data_item): return data_item.created document_model = DocumentModel.DocumentModel() with contextlib.closing(document_model): filtered_data_items = ListModel.FilteredListModel( items_key="data_items") filtered_data_items.container = document_model filtered_data_items.filter = ListModel.EqFilter("is_live", True) filtered_data_items.sort_key = sort_by_date_key for _ in range(4): data_item = DataItem.DataItem( numpy.zeros((16, 16), numpy.uint32)) document_model.append_data_item(data_item) self.assertEqual(len(filtered_data_items.items), 0) with document_model.data_item_live(document_model.data_items[0]): document_model.data_items[0].data_item_changed_event.fire() self.assertEqual(len(filtered_data_items.items), 1) with document_model.data_item_live( document_model.data_items[2]): document_model.data_items[2].data_item_changed_event.fire() self.assertEqual(len(filtered_data_items.items), 2) self.assertTrue( filtered_data_items.items.index( document_model.data_items[0]) < filtered_data_items .items.index(document_model.data_items[2]))
def test_filtered_model_updates_when_source_model_has_data_item_that_updates( self): document_model = DocumentModel.DocumentModel() with contextlib.closing(document_model): filtered_data_items = ListModel.FilteredListModel( items_key="data_items") filtered_data_items.container = document_model for _ in range(4): data_item = DataItem.DataItem( numpy.zeros((16, 16), numpy.uint32)) document_model.append_data_item(data_item) self.assertEqual(len(filtered_data_items.items), 4) selection = Selection.IndexedSelection() filtered_data_items2 = ListModel.FilteredListModel( items_key="data_items", container=filtered_data_items, selection=selection) filtered_data_items2.filter = ListModel.EqFilter("is_live", True) self.assertEqual(len(filtered_data_items2.items), 0) with document_model.data_item_live(document_model.data_items[0]): document_model.data_items[0].data_item_changed_event.fire() self.assertEqual(len(filtered_data_items.items), 4) # verify assumption self.assertEqual(len(filtered_data_items2.items), 1) # verify assumption self.assertTrue( document_model.data_items[0] in filtered_data_items2.items)
def test_sorted_filtered_model_updates_when_data_item_exits_filter(self): def sort_by_date_key(data_item): return data_item.created with TestContext.create_memory_context() as test_context: document_model = test_context.create_document_model() filtered_data_items = ListModel.FilteredListModel(items_key="data_items") filtered_data_items.container = document_model filtered_data_items.filter = ListModel.NotFilter(ListModel.EqFilter("is_live", True)) filtered_data_items.sort_key = sort_by_date_key for _ in range(4): data_item = DataItem.DataItem(numpy.zeros((16, 16), numpy.uint32)) document_model.append_data_item(data_item) self.assertEqual(len(filtered_data_items.items), 4) with document_model.data_item_live(document_model.data_items[0]): document_model.data_items[0].data_item_changed_event.fire() self.assertEqual(len(filtered_data_items.items), 3)