diff --git a/tests/test_utils.py b/tests/test_utils.py index 21488d28..56d29ec8 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -2,7 +2,7 @@ import pytest from mock import Mock from thefuck.utils import sudo_support, wrap_settings, memoize, get_closest from thefuck.types import Settings -from tests.utils import Command +from tests.utils import Command, no_memoize @pytest.mark.parametrize('override, old, new', [ @@ -34,6 +34,15 @@ def test_memoize(): fn.assert_called_once_with() +@pytest.mark.usefixtures('no_memoize') +def test_no_memoize(): + fn = Mock(__name__='fn') + memoized = memoize(fn) + memoized() + memoized() + assert fn.call_count == 2 + + class TestGetClosest(object): def test_when_can_match(self): diff --git a/tests/utils.py b/tests/utils.py index 4641971d..0f0f0fd5 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -1,3 +1,4 @@ +import pytest from thefuck import types from thefuck.conf import DEFAULT_PRIORITY @@ -14,3 +15,7 @@ def Rule(name='', match=lambda *_: True, return types.Rule(name, match, get_new_command, enabled_by_default, side_effect, priority) + +@pytest.fixture +def no_memoize(monkeypatch): + monkeypatch.setattr('thefuck.utils.memoize.disabled', True) diff --git a/thefuck/utils.py b/thefuck/utils.py index 91ef1ed3..2f58e527 100644 --- a/thefuck/utils.py +++ b/thefuck/utils.py @@ -80,12 +80,13 @@ def memoize(fn): @wraps(fn) def wrapper(*args, **kwargs): key = pickle.dumps((args, kwargs)) - if key not in memo: + if key not in memo or memoize.disabled: memo[key] = fn(*args, **kwargs) return memo[key] return wrapper +memoize.disabled = False def get_closest(word, possibilities, n=3, cutoff=0.6):