diff --git a/stub.sh b/stub.sh index 0be682e..ec3bcb5 100644 --- a/stub.sh +++ b/stub.sh @@ -95,6 +95,10 @@ stub_and_eval() { STUB_ACTIVE_STUBS+=("$cmd") fi + # Remove stub from list of called stubs, as we are now creating a new stub + # which hasn't been called yet. + STUB_CALLED_STUBS=(${STUB_CALLED_STUBS[@]/$cmd/}) + # Create the stub. eval "$(echo -e "${cmd}() {\n __stub_call \"${cmd}\"\n $2\n}")" } @@ -204,9 +208,6 @@ restore() { # Remove stub from list of active stubs. STUB_ACTIVE_STUBS=(${STUB_ACTIVE_STUBS[@]/$cmd/}) - # Remove stub from list of called stubs. - STUB_CALLED_STUBS=(${STUB_CALLED_STUBS[@]/$cmd/}) - # If stub was for a function, restore the original function. if type "non_stubbed_${cmd}" &>/dev/null; then local original_type="$(type "non_stubbed_${cmd}" | head -1)" diff --git a/test/stub_called-test.sh b/test/stub_called-test.sh index a785e76..62bf522 100755 --- a/test/stub_called-test.sh +++ b/test/stub_called-test.sh @@ -19,20 +19,24 @@ uname assert_raises 'stub_called "uname"' 0 restore "uname" -# Returns 1 after called stub has been restored. +# Stub called state is reset by creating a new stub, not by restore. stub "uname" uname restore "uname" +assert_raises 'stub_called "uname"' 0 +stub "uname" assert_raises 'stub_called "uname"' 1 +restore "uname" -# Restoring only resets called state of restored stub. +# Recreating a stub only resets called state of recreated stub. stub "uname" stub "top" uname top -restore "uname" +stub "uname" assert_raises 'stub_called "uname"' 1 assert_raises 'stub_called "top"' 0 +restore "uname" restore "top" diff --git a/test/stub_called_times-test.sh b/test/stub_called_times-test.sh index b214d55..59247ed 100755 --- a/test/stub_called_times-test.sh +++ b/test/stub_called_times-test.sh @@ -19,12 +19,15 @@ uname assert 'stub_called_times "uname"' "3" restore "uname" -# Echoes 0 after a called stub has been restored. +# Echoes 0 after a called stub has been recreated. stub "uname" uname assert 'stub_called_times "uname"' "1" restore "uname" +assert 'stub_called_times "uname"' "1" +stub "uname" assert 'stub_called_times "uname"' "0" +restore "uname" # When given a second argument, asserts stub called X number of times. stub "uname"