示例#1
0
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()
示例#2
0
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)
示例#3
0
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 == ([], [])
示例#4
0
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 == ([], [])
示例#5
0
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()
示例#6
0
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
示例#7
0
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()
示例#8
0
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
示例#9
0
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
示例#10
0
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)