def test_set_source_model(): """Ensure setSourceModel sets source_model and clears the pattern.""" model1 = base.BaseCompletionModel() model2 = base.BaseCompletionModel() filter_model = sortfilter.CompletionFilterModel(model1) filter_model.set_pattern('foo') # sourceModel() is cached as srcmodel, so make sure both match assert filter_model.srcmodel is model1 assert filter_model.sourceModel() is model1 assert filter_model.pattern == 'foo' filter_model.setSourceModel(model2) assert filter_model.srcmodel is model2 assert filter_model.sourceModel() is model2 assert not filter_model.pattern
def test_completion_show(show, rows, quick_complete, completionview, config_stub): """Test that the completion widget is shown at appropriate times. Args: show: The completion show config setting. rows: Each entry represents a completion category with only one item. quick_complete: The completion quick-complete config setting. """ config_stub.data['completion']['show'] = show config_stub.data['completion']['quick-complete'] = quick_complete model = base.BaseCompletionModel() for name in rows: cat = QStandardItem() model.appendRow(cat) cat.appendRow(QStandardItem(name)) filtermodel = sortfilter.CompletionFilterModel(model, parent=completionview) assert not completionview.isVisible() completionview.set_model(filtermodel) assert completionview.isVisible() == (show == 'always' and len(rows) > 0) completionview.completion_item_focus('next') expected = (show != 'never' and len(rows) > 0 and not (quick_complete and len(rows) == 1)) assert completionview.isVisible() == expected completionview.set_model(None) completionview.completion_item_focus('next') assert not completionview.isVisible()
def test_completion_item_focus(which, tree, count, expected, completionview, qtbot): """Test that on_next_prev_item moves the selection properly. Args: tree: Each list represents a completion category, with each string being an item under that category. count: Number of times to go forward (or back if negative). expected: item data that should be selected after going back/forward. """ model = base.BaseCompletionModel() for catdata in tree: cat = QStandardItem() model.appendRow(cat) for name in catdata: cat.appendRow(QStandardItem(name)) filtermodel = sortfilter.CompletionFilterModel(model, parent=completionview) completionview.set_model(filtermodel) if expected is None: for _ in range(count): completionview.completion_item_focus(which) else: with qtbot.waitSignal(completionview.selection_changed): for _ in range(count): completionview.completion_item_focus(which) idx = completionview.selectionModel().currentIndex() assert filtermodel.data(idx) == expected
def test_completion_item_focus(which, tree, expected, completionview, qtbot): """Test that on_next_prev_item moves the selection properly. Args: which: the direction in which to move the selection. tree: Each list represents a completion category, with each string being an item under that category. expected: expected argument from on_selection_changed for each successive movement. None implies no signal should be emitted. """ model = base.BaseCompletionModel() for catdata in tree: cat = QStandardItem() model.appendRow(cat) for name in catdata: cat.appendRow(QStandardItem(name)) filtermodel = sortfilter.CompletionFilterModel(model, parent=completionview) completionview.set_model(filtermodel) for entry in expected: if entry is None: with qtbot.assertNotEmitted(completionview.selection_changed): completionview.completion_item_focus(which) else: with qtbot.waitSignal(completionview.selection_changed) as sig: completionview.completion_item_focus(which) assert sig.args == [entry]
def test_set_model(completionview): """Ensure set_model actually sets the model and expands all categories.""" model = base.BaseCompletionModel() filtermodel = sortfilter.CompletionFilterModel(model) for i in range(3): model.appendRow(QStandardItem(str(i))) completionview.set_model(filtermodel) assert completionview.model() is filtermodel for i in range(model.rowCount()): assert completionview.isExpanded(filtermodel.index(i, 0))
def test_filter_accepts_row(pattern, data, expected): source_model = base.BaseCompletionModel() cat = source_model.new_category('test') source_model.new_item(cat, data) filter_model = sortfilter.CompletionFilterModel(source_model) filter_model.set_pattern(pattern) assert filter_model.rowCount() == 1 # "test" category idx = filter_model.index(0, 0) assert idx.isValid() row_count = filter_model.rowCount(idx) assert row_count == (1 if expected else 0)
def _create_model(data): """Create a completion model populated with the given data. data: A list of lists, where each sub-list represents a category, each tuple in the sub-list represents an item, and each value in the tuple represents the item data for that column """ model = base.BaseCompletionModel() for catdata in data: cat = model.new_category('') for itemdata in catdata: model.new_item(cat, *itemdata) return model
def test_completion_item_focus_no_model(which, completionview, qtbot): """Test that selectionChanged is not fired when the model is None. Validates #1812: help completion repeatedly completes """ with qtbot.assertNotEmitted(completionview.selection_changed): completionview.completion_item_focus(which) model = base.BaseCompletionModel() filtermodel = sortfilter.CompletionFilterModel(model, parent=completionview) completionview.set_model(filtermodel) completionview.set_model(None) with qtbot.assertNotEmitted(completionview.selection_changed): completionview.completion_item_focus(which)
def test_set_pattern(completionview): model = sortfilter.CompletionFilterModel(base.BaseCompletionModel()) model.set_pattern = unittest.mock.Mock() completionview.set_model(model, 'foo') model.set_pattern.assert_called_with('foo')
def _init_empty_completion(): """Initialize empty completion model.""" log.completion.debug("Initializing empty completion.") if usertypes.Completion.empty not in _instances: _instances[usertypes.Completion.empty] = base.BaseCompletionModel()