def launch_arrayeditor(data, title="", xlabels=None, ylabels=None): """Helper routine to launch an arrayeditor and return its result""" dlg = ArrayEditor() assert dlg.setup_and_check(data, title, xlabels=xlabels, ylabels=ylabels) dlg.show() dlg.accept() # trigger slot connected to OK button return dlg.get_value()
def test_arrayeditor_edit_overflow(qtbot, monkeypatch): """ Test that entry of an overflowing integer is caught and handled properly. Integration regression test for #6114 . """ MockQMessageBox = Mock() attr_to_patch = 'spyder.widgets.variableexplorer.arrayeditor.QMessageBox' monkeypatch.setattr(attr_to_patch, MockQMessageBox) # Numpy doesn't raise the OverflowError for ints smaller than 64 bits if not os.name == 'nt': int32_bit_exponent = 66 else: int32_bit_exponent = 34 test_parameters = [(1, np.int32, int32_bit_exponent), (2, np.int64, 66)] expected_array = np.array([5, 6, 7, 3, 4]) for idx, int_type, bit_exponent in test_parameters: test_array = np.arange(0, 5).astype(int_type) dialog = ArrayEditor() assert dialog.setup_and_check(test_array, '1D array', xlabels=None, ylabels=None) dialog.show() qtbot.waitForWindowShown(dialog) view = dialog.arraywidget.view qtbot.keyClick(view, Qt.Key_Down) qtbot.keyClick(view, Qt.Key_Up) qtbot.keyClicks(view, '5') qtbot.keyClick(view, Qt.Key_Down) qtbot.keyClick(view, Qt.Key_Space) qtbot.keyClicks(view.focusWidget(), str(int(2**bit_exponent))) qtbot.keyClick(view.focusWidget(), Qt.Key_Down) MockQMessageBox.critical.assert_called_with(ANY, "Error", ANY) assert MockQMessageBox.critical.call_count == idx qtbot.keyClicks(view, '7') qtbot.keyClick(view, Qt.Key_Up) qtbot.keyClicks(view, '6') qtbot.keyClick(view, Qt.Key_Down) qtbot.wait(200) dialog.accept() qtbot.wait(500) assert np.sum( expected_array == dialog.get_value()) == len(expected_array)