def test_try_recover(mocker, tmpdir, error_on_remove): """Test that try_recover_from_autosave() displays a RecoveryDialog, that it stores the files that the user wants to open as reported by the dialog, and that it removes the pid file. If error_on_remove is set, then removing the pid file will raise an OSError; this should be ignored.""" mock_RecoveryDialog = mocker.patch( 'spyder.plugins.editor.utils.autosave.RecoveryDialog') mocker.patch('spyder.plugins.editor.utils.autosave.get_conf_path', return_value=str(tmpdir)) pidfile = tmpdir.join('pid42.txt') autosavefile = tmpdir.join('foo.py') pidfile.write('{"original": ' + repr(str(autosavefile)) + '}') autosavefile.write('bar = 1') addon = AutosaveForPlugin(None) if error_on_remove: mocker.patch('os.remove', side_effect=OSError) addon.try_recover_from_autosave() expected_mapping = [('original', str(autosavefile))] mock_RecoveryDialog.assert_called_with(expected_mapping, parent=None) expected_files_to_open = mock_RecoveryDialog().files_to_open[:] assert addon.recover_files_to_open == expected_files_to_open if not error_on_remove: assert not pidfile.check()
def test_get_files_to_recover_with_one_pid_file(mocker, tmpdir, running, empty): """Test get_files_to_recover() if autosave dir contains one pid file with one autosave file. If running is True, then pretend that the pid file belongs to a running Spyder instance. If empty is True, then the pid file is empty (regression test for spyder-ide/spyder#11375).""" mocker.patch('spyder.plugins.editor.utils.autosave.get_conf_path', return_value=str(tmpdir)) mock_is_spyder_process = mocker.patch( 'spyder.plugins.editor.utils.autosave.is_spyder_process', return_value=running) pidfile = tmpdir.join('pid42.txt') autosavefile = tmpdir.join('foo.py') if empty: pidfile.write('') else: pidfile.write('{"original": ' + repr(str(autosavefile)) + '}') autosavefile.write('bar = 1') addon = AutosaveForPlugin(None) result = addon.get_files_to_recover() if empty: # pid file corrupted so original file name not recorded expected_files = [(None, str(autosavefile))] elif running: # autosave file belongs to running instance expected_files = [] else: expected_files = [('original', str(autosavefile))] expected = (expected_files, [str(pidfile)]) assert result == expected mock_is_spyder_process.assert_called_with(42)
def test_get_files_to_recover_with_empty_autosave_dir(mocker, tmpdir): """Test get_files_to_recover() when autosave dir contains no files.""" mocker.patch('spyder.plugins.editor.utils.autosave.get_conf_path', return_value=str(tmpdir)) addon = AutosaveForPlugin(None) result = addon.get_files_to_recover() assert result == ([], [])
def test_get_files_to_recover_without_autosave_dir(mocker): """Test that get_files_to_recover() does not break if there is no autosave directory.""" mocker.patch('spyder.plugins.editor.utils.autosave.get_conf_path', return_value='non-existing-directory') addon = AutosaveForPlugin(None) result = addon.get_files_to_recover() assert result == ([], [])
def test_autosave_component_timer_if_enabled(qtbot, mocker, enabled): """Test that AutosaveForPlugin calls do_autosave() on timer if enabled.""" mocker.patch.object(AutosaveForPlugin, 'do_autosave') addon = AutosaveForPlugin(None) addon.do_autosave.assert_not_called() addon.interval = 100 addon.enabled = enabled qtbot.wait(500) if enabled: assert addon.do_autosave.called else: addon.do_autosave.assert_not_called()
def test_autosave_component_set_interval(mocker): """Test that setting the interval does indeed change it and calls do_autosave if enabled.""" mocker.patch.object(AutosaveForPlugin, 'do_autosave') addon = AutosaveForPlugin(None) addon.do_autosave.assert_not_called() addon.interval = 10000 assert addon.interval == 10000 addon.do_autosave.assert_not_called() addon.enabled = True addon.interval = 20000 assert addon.do_autosave.called
def test_autosave_component_timer_if_enabled(qtbot, mocker, enabled): """Test that AutosaveForPlugin calls do_autosave() on timer if enabled.""" mocker.patch.object(AutosaveForPlugin, 'do_autosave') addon = AutosaveForPlugin(None) addon.do_autosave.assert_not_called() addon.interval = 100 addon.enabled = enabled qtbot.wait(500) if enabled: assert addon.do_autosave.called else: addon.do_autosave.assert_not_called()
def test_autosave_component_set_interval(qtbot, mocker): """Test that setting the interval does indeed change it and calls do_autosave if enabled.""" mocker.patch.object(AutosaveForPlugin, 'do_autosave') addon = AutosaveForPlugin(None) addon.do_autosave.assert_not_called() addon.interval = 10000 assert addon.interval == 10000 addon.do_autosave.assert_not_called() addon.enabled = True addon.interval = 20000 assert addon.do_autosave.called
def test_get_files_to_recover_with_non_pid_file(mocker, tmpdir): """Test get_files_to_recover() if autosave dir contains no pid file, but one Python file.""" mocker.patch('spyder.plugins.editor.utils.autosave.get_conf_path', return_value=str(tmpdir)) pythonfile = tmpdir.join('foo.py') pythonfile.write('bar = 1') addon = AutosaveForPlugin(None) result = addon.get_files_to_recover() expected = ([(None, str(pythonfile))], []) assert result == expected
def test_get_files_to_recover_with_one_pid_file(mocker, tmpdir, running): """Test get_files_to_recover() if autosave dir contains one pid file with one autosave file. Depending on the value of running, """ mocker.patch('spyder.plugins.editor.utils.autosave.get_conf_path', return_value=str(tmpdir)) mock_is_spyder_process = mocker.patch( 'spyder.plugins.editor.utils.autosave.is_spyder_process', return_value=running) pidfile = tmpdir.join('pid42.txt') autosavefile = tmpdir.join('foo.py') pidfile.write('{"original": ' + repr(str(autosavefile)) + '}') autosavefile.write('bar = 1') addon = AutosaveForPlugin(None) result = addon.get_files_to_recover() expected_files = [('original', str(autosavefile))] if not running else [] expected = (expected_files, [str(pidfile)]) assert result == expected mock_is_spyder_process.assert_called_with(42)