def test_remove_variable(qtbot): """Test removing of the correct variable.""" variables = {'a': 1, 'b': 2, 'c': 3, 'd': '4', 'e': 5} editor = CollectionsEditorTableView(None, variables.copy()) qtbot.addWidget(editor) editor.setCurrentIndex(editor.model.index(1, 0)) editor.remove_item(force=True) assert editor.model.rowCount() == 4 assert data(editor.model, 0, 0) == 'a' assert data(editor.model, 1, 0) == 'c' assert data(editor.model, 2, 0) == 'd' assert data(editor.model, 3, 0) == 'e' # Reset variables and try removing one again editor.set_data(variables.copy()) editor.adjust_columns() editor.setCurrentIndex(editor.model.index(1, 0)) editor.remove_item(force=True) assert editor.model.rowCount() == 4 assert data(editor.model, 0, 0) == 'a' assert data(editor.model, 1, 0) == 'c' assert data(editor.model, 2, 0) == 'd' assert data(editor.model, 3, 0) == 'e'
def test_edit_mutable_and_immutable_types(monkeypatch): """ Test that mutable objs/vals are editable in VarExp; immutable ones aren't. Regression test for spyder-ide/spyder#5991. """ MockQLineEdit = Mock() attr_to_patch_qlineedit = ('spyder.plugins.variableexplorer.widgets.' + 'collectionsdelegate.QLineEdit') monkeypatch.setattr(attr_to_patch_qlineedit, MockQLineEdit) MockTextEditor = Mock() attr_to_patch_textedit = ('spyder.plugins.variableexplorer.widgets.' + 'collectionsdelegate.TextEditor') monkeypatch.setattr(attr_to_patch_textedit, MockTextEditor) MockQDateTimeEdit = Mock() attr_to_patch_qdatetimeedit = ('spyder.plugins.variableexplorer.widgets.' + 'collectionsdelegate.QDateTimeEdit') monkeypatch.setattr(attr_to_patch_qdatetimeedit, MockQDateTimeEdit) MockCollectionsEditor = Mock() mockCollectionsEditor_instance = MockCollectionsEditor() attr_to_patch_coledit = ('spyder.widgets.' + 'collectionseditor.CollectionsEditor') monkeypatch.setattr(attr_to_patch_coledit, MockCollectionsEditor) list_test = [1, "012345678901234567901234567890123456789012", datetime.datetime(2017, 12, 24, 7, 9), [1, 2, 3], (2, "eggs")] tup_test = tuple(list_test) # Tests for mutable type (list) # editor_list = CollectionsEditorTableView(None, list_test) # Directly editable values inside list editor_list_value = editor_list.delegate.createEditor( None, None, editor_list.model.index(0, 3)) assert editor_list_value is not None assert MockQLineEdit.call_count == 1 # Text Editor for long text inside list editor_list.delegate.createEditor(None, None, editor_list.model.index(1, 3)) assert MockTextEditor.call_count == 2 assert not MockTextEditor.call_args[1]["readonly"] # Datetime inside list editor_list_datetime = editor_list.delegate.createEditor( None, None, editor_list.model.index(2, 3)) assert editor_list_datetime is not None assert MockQDateTimeEdit.call_count == 1 # List inside list editor_list.delegate.createEditor(None, None, editor_list.model.index(3, 3)) assert mockCollectionsEditor_instance.show.call_count == 1 assert not mockCollectionsEditor_instance.setup.call_args[1]["readonly"] # Tuple inside list editor_list.delegate.createEditor(None, None, editor_list.model.index(4, 3)) assert mockCollectionsEditor_instance.show.call_count == 2 assert mockCollectionsEditor_instance.setup.call_args[1]["readonly"] # Tests for immutable type (tuple) # editor_tup = CollectionsEditorTableView(None, tup_test) # Directly editable values inside tuple editor_tup_value = editor_tup.delegate.createEditor( None, None, editor_tup.model.index(0, 3)) assert editor_tup_value is None assert MockQLineEdit.call_count == 1 # Text Editor for long text inside tuple editor_tup.delegate.createEditor(None, None, editor_tup.model.index(1, 3)) assert MockTextEditor.call_count == 4 assert MockTextEditor.call_args[1]["readonly"] # Datetime inside tuple editor_tup_datetime = editor_tup.delegate.createEditor( None, None, editor_tup.model.index(2, 3)) assert editor_tup_datetime is None assert MockQDateTimeEdit.call_count == 1 # List inside tuple editor_tup.delegate.createEditor(None, None, editor_tup.model.index(3, 3)) assert mockCollectionsEditor_instance.show.call_count == 3 assert mockCollectionsEditor_instance.setup.call_args[1]["readonly"] # Tuple inside tuple editor_tup.delegate.createEditor(None, None, editor_tup.model.index(4, 3)) assert mockCollectionsEditor_instance.show.call_count == 4 assert mockCollectionsEditor_instance.setup.call_args[1]["readonly"]