mirror of
https://github.com/zsh-users/zsh-autosuggestions.git
synced 2025-12-06 15:20:40 +01:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
87facd9b85 | ||
|
|
dc822c54f8 | ||
|
|
15c5db898f | ||
|
|
46d5fe174d | ||
|
|
6c31a02892 | ||
|
|
9ec62a1a23 |
@@ -1,5 +1,11 @@
|
||||
# Changelog
|
||||
|
||||
## v0.3.1
|
||||
|
||||
- Fixes issue with `vi-next-char` not accepting suggestion (#137).
|
||||
- Fixes global variable warning when WARN_CREATE_GLOBAL option enabled (#133).
|
||||
- Split out a separate test file for each widget.
|
||||
|
||||
## v0.3.0
|
||||
|
||||
- Adds `autosuggest-execute` widget (PR #124).
|
||||
|
||||
374
script/test.zsh
374
script/test.zsh
@@ -1,374 +0,0 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
SCRIPT_DIR=$(dirname "$0")
|
||||
TEST_DIR=$SCRIPT_DIR/../test
|
||||
DIST_DIR=$SCRIPT_DIR/../
|
||||
|
||||
# Use stub.sh for stubbing/mocking
|
||||
source $TEST_DIR/stub-1.0.2.sh
|
||||
|
||||
source $DIST_DIR/zsh-autosuggestions.zsh
|
||||
|
||||
#--------------------------------------------------------------------#
|
||||
# Highlighting #
|
||||
#--------------------------------------------------------------------#
|
||||
|
||||
testHighlightDefaultStyle() {
|
||||
assertEquals \
|
||||
"fg=8" \
|
||||
"$ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE"
|
||||
}
|
||||
|
||||
testHighlightApplyWithSuggestion() {
|
||||
orig_style=ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE
|
||||
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=4"
|
||||
|
||||
BUFFER="ec"
|
||||
POSTDISPLAY="ho hello"
|
||||
region_highlight=("0 2 fg=1")
|
||||
|
||||
_zsh_autosuggest_highlight_apply
|
||||
|
||||
assertEquals \
|
||||
"highlight did not use correct style" \
|
||||
"0 2 fg=1 2 10 $ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE" \
|
||||
"$region_highlight"
|
||||
|
||||
assertEquals \
|
||||
"higlight was not saved to be removed later" \
|
||||
"2 10 $ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE" \
|
||||
"$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT"
|
||||
|
||||
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE=orig_style
|
||||
}
|
||||
|
||||
testHighlightApplyWithoutSuggestion() {
|
||||
BUFFER="echo hello"
|
||||
POSTDISPLAY=""
|
||||
region_highlight=("0 4 fg=1")
|
||||
|
||||
_zsh_autosuggest_highlight_apply
|
||||
|
||||
assertEquals \
|
||||
"region_highlight was modified" \
|
||||
"0 4 fg=1" \
|
||||
"$region_highlight"
|
||||
|
||||
assertNull \
|
||||
"last highlight region was not cleared" \
|
||||
"$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT"
|
||||
}
|
||||
|
||||
testHighlightReset() {
|
||||
BUFFER="ec"
|
||||
POSTDISPLAY="ho hello"
|
||||
region_highlight=("0 1 fg=1" "2 10 fg=8" "1 2 fg=1")
|
||||
_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT="2 10 fg=8"
|
||||
|
||||
_zsh_autosuggest_highlight_reset
|
||||
|
||||
assertEquals \
|
||||
"last highlight region was not removed" \
|
||||
"0 1 fg=1 1 2 fg=1" \
|
||||
"$region_highlight"
|
||||
|
||||
assertNull \
|
||||
"last highlight variable was not cleared" \
|
||||
"$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT"
|
||||
}
|
||||
|
||||
#--------------------------------------------------------------------#
|
||||
# Widgets #
|
||||
#--------------------------------------------------------------------#
|
||||
|
||||
testWidgetFunctionClear() {
|
||||
BUFFER="ec"
|
||||
POSTDISPLAY="ho hello"
|
||||
|
||||
_zsh_autosuggest_clear "original-widget"
|
||||
|
||||
assertEquals \
|
||||
"BUFFER was modified" \
|
||||
"ec" \
|
||||
"$BUFFER"
|
||||
|
||||
assertNull \
|
||||
"POSTDISPLAY was not cleared" \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testWidgetFunctionModify() {
|
||||
BUFFER=""
|
||||
POSTDISPLAY=""
|
||||
|
||||
stub_and_eval \
|
||||
_zsh_autosuggest_invoke_original_widget \
|
||||
'BUFFER+="e"'
|
||||
|
||||
stub_and_echo \
|
||||
_zsh_autosuggest_suggestion \
|
||||
"echo hello"
|
||||
|
||||
_zsh_autosuggest_modify "original-widget"
|
||||
|
||||
assertTrue \
|
||||
"original widget not invoked" \
|
||||
"stub_called _zsh_autosuggest_invoke_original_widget"
|
||||
|
||||
assertEquals \
|
||||
"BUFFER was not modified" \
|
||||
"e" \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
"POSTDISPLAY does not contain suggestion" \
|
||||
"cho hello" \
|
||||
"$POSTDISPLAY"
|
||||
|
||||
restore _zsh_autosuggest_invoke_original_widget
|
||||
restore _zsh_autosuggest_suggestion
|
||||
}
|
||||
|
||||
testWidgetFunctionAcceptCursorAtEnd() {
|
||||
BUFFER="echo"
|
||||
POSTDISPLAY=" hello"
|
||||
CURSOR=4
|
||||
|
||||
stub _zsh_autosuggest_invoke_original_widget
|
||||
|
||||
_zsh_autosuggest_accept "original-widget"
|
||||
|
||||
assertTrue \
|
||||
"original widget not invoked" \
|
||||
"stub_called _zsh_autosuggest_invoke_original_widget"
|
||||
|
||||
assertEquals \
|
||||
"BUFFER was not modified" \
|
||||
"echo hello" \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
"POSTDISPLAY was not cleared" \
|
||||
"" \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testWidgetFunctionAcceptCursorNotAtEnd() {
|
||||
BUFFER="echo"
|
||||
POSTDISPLAY=" hello"
|
||||
CURSOR=2
|
||||
|
||||
stub _zsh_autosuggest_invoke_original_widget
|
||||
|
||||
_zsh_autosuggest_accept "original-widget"
|
||||
|
||||
assertTrue \
|
||||
"original widget not invoked" \
|
||||
"stub_called _zsh_autosuggest_invoke_original_widget"
|
||||
|
||||
assertEquals \
|
||||
"BUFFER was modified" \
|
||||
"echo" \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
"POSTDISPLAY was modified" \
|
||||
" hello" \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testWidgetFunctionExecute() {
|
||||
BUFFER="ec"
|
||||
POSTDISPLAY="ho hello"
|
||||
|
||||
stub _zsh_autosuggest_invoke_original_widget
|
||||
|
||||
_zsh_autosuggest_execute
|
||||
|
||||
assertTrue \
|
||||
"accept-line not invoked" \
|
||||
"stub_called_with _zsh_autosuggest_invoke_original_widget 'accept-line'"
|
||||
|
||||
assertEquals \
|
||||
"BUFFER was not modified" \
|
||||
"echo hello" \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
"POSTDISPLAY was not cleared" \
|
||||
"" \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testWidgetFunctionPartialAcceptCursorMovesOutOfBuffer() {
|
||||
BUFFER="ec"
|
||||
POSTDISPLAY="ho hello"
|
||||
CURSOR=1
|
||||
|
||||
stub_and_eval \
|
||||
_zsh_autosuggest_invoke_original_widget \
|
||||
'CURSOR=5; LBUFFER="echo "; RBUFFER="hello"'
|
||||
|
||||
_zsh_autosuggest_partial_accept "original-widget"
|
||||
|
||||
assertTrue \
|
||||
"original widget not invoked" \
|
||||
"stub_called _zsh_autosuggest_invoke_original_widget"
|
||||
|
||||
assertEquals \
|
||||
"BUFFER was not modified correctly" \
|
||||
"echo " \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
"POSTDISPLAY was not modified correctly" \
|
||||
"hello" \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testWidgetFunctionPartialAcceptCursorStaysInBuffer() {
|
||||
BUFFER="echo hello"
|
||||
POSTDISPLAY=" world"
|
||||
CURSOR=1
|
||||
|
||||
stub_and_eval \
|
||||
_zsh_autosuggest_invoke_original_widget \
|
||||
'CURSOR=5; LBUFFER="echo "; RBUFFER="hello"'
|
||||
|
||||
_zsh_autosuggest_partial_accept "original-widget"
|
||||
|
||||
assertTrue \
|
||||
"original widget not invoked" \
|
||||
"stub_called _zsh_autosuggest_invoke_original_widget"
|
||||
|
||||
assertEquals \
|
||||
"BUFFER was modified" \
|
||||
"echo hello" \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
"POSTDISPLAY was modified" \
|
||||
" world" \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testWidgetAccept() {
|
||||
stub _zsh_autosuggest_highlight_reset
|
||||
stub _zsh_autosuggest_accept
|
||||
stub _zsh_autosuggest_highlight_apply
|
||||
|
||||
# Call the function pointed to by the widget since we can't call
|
||||
# the widget itself when zle is not active
|
||||
${widgets[autosuggest-accept]#*:} "original-widget"
|
||||
|
||||
assertTrue \
|
||||
"autosuggest-accept widget does not exist" \
|
||||
"zle -l autosuggest-accept"
|
||||
|
||||
assertTrue \
|
||||
"highlight_reset was not called" \
|
||||
"stub_called _zsh_autosuggest_highlight_reset"
|
||||
|
||||
assertTrue \
|
||||
"widget function was not called" \
|
||||
"stub_called _zsh_autosuggest_accept"
|
||||
|
||||
assertTrue \
|
||||
"highlight_apply was not called" \
|
||||
"stub_called _zsh_autosuggest_highlight_apply"
|
||||
}
|
||||
|
||||
testWidgetClear() {
|
||||
stub _zsh_autosuggest_highlight_reset
|
||||
stub _zsh_autosuggest_clear
|
||||
stub _zsh_autosuggest_highlight_apply
|
||||
|
||||
# Call the function pointed to by the widget since we can't call
|
||||
# the widget itself when zle is not active
|
||||
${widgets[autosuggest-clear]#*:} "original-widget"
|
||||
|
||||
assertTrue \
|
||||
"autosuggest-clear widget does not exist" \
|
||||
"zle -l autosuggest-clear"
|
||||
|
||||
assertTrue \
|
||||
"highlight_reset was not called" \
|
||||
"stub_called _zsh_autosuggest_highlight_reset"
|
||||
|
||||
assertTrue \
|
||||
"widget function was not called" \
|
||||
"stub_called _zsh_autosuggest_clear"
|
||||
|
||||
assertTrue \
|
||||
"highlight_apply was not called" \
|
||||
"stub_called _zsh_autosuggest_highlight_apply"
|
||||
}
|
||||
|
||||
testWidgetExecute() {
|
||||
stub _zsh_autosuggest_highlight_reset
|
||||
stub _zsh_autosuggest_execute
|
||||
stub _zsh_autosuggest_highlight_apply
|
||||
|
||||
# Call the function pointed to by the widget since we can't call
|
||||
# the widget itself when zle is not active
|
||||
${widgets[autosuggest-execute]#*:} "original-widget"
|
||||
|
||||
assertTrue \
|
||||
"autosuggest-execute widget does not exist" \
|
||||
"zle -l autosuggest-execute"
|
||||
|
||||
assertTrue \
|
||||
"highlight_reset was not called" \
|
||||
"stub_called _zsh_autosuggest_highlight_reset"
|
||||
|
||||
assertTrue \
|
||||
"widget function was not called" \
|
||||
"stub_called _zsh_autosuggest_execute"
|
||||
|
||||
assertTrue \
|
||||
"highlight_apply was not called" \
|
||||
"stub_called _zsh_autosuggest_highlight_apply"
|
||||
}
|
||||
|
||||
testEscapeCommandPrefix() {
|
||||
assertEquals \
|
||||
"Did not escape single backslash" \
|
||||
"\\\\" \
|
||||
"$(_zsh_autosuggest_escape_command "\\")"
|
||||
|
||||
assertEquals \
|
||||
"Did not escape two backslashes" \
|
||||
"\\\\\\\\" \
|
||||
"$(_zsh_autosuggest_escape_command "\\\\")"
|
||||
|
||||
assertEquals \
|
||||
"Did not escape parentheses" \
|
||||
"\\(\\)" \
|
||||
"$(_zsh_autosuggest_escape_command "()")"
|
||||
|
||||
assertEquals \
|
||||
"Did not escape square brackets" \
|
||||
"\\[\\]" \
|
||||
"$(_zsh_autosuggest_escape_command "[]")"
|
||||
|
||||
assertEquals \
|
||||
"Did not escape pipe" \
|
||||
"\\|" \
|
||||
"$(_zsh_autosuggest_escape_command "|")"
|
||||
|
||||
assertEquals \
|
||||
"Did not escape star" \
|
||||
"\\*" \
|
||||
"$(_zsh_autosuggest_escape_command "*")"
|
||||
|
||||
assertEquals \
|
||||
"Did not escape question mark" \
|
||||
"\\?" \
|
||||
"$(_zsh_autosuggest_escape_command "?")"
|
||||
}
|
||||
|
||||
# For zsh compatibility
|
||||
setopt shwordsplit
|
||||
SHUNIT_PARENT=$0
|
||||
|
||||
source $TEST_DIR/shunit2-2.1.6/src/shunit2
|
||||
@@ -5,6 +5,8 @@
|
||||
|
||||
# If there was a highlight, remove it
|
||||
_zsh_autosuggest_highlight_reset() {
|
||||
typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
|
||||
|
||||
if [ -n "$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT" ]; then
|
||||
region_highlight=("${(@)region_highlight:#$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT}")
|
||||
unset _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
|
||||
@@ -13,6 +15,8 @@ _zsh_autosuggest_highlight_reset() {
|
||||
|
||||
# If there's a suggestion, highlight it
|
||||
_zsh_autosuggest_highlight_apply() {
|
||||
typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
|
||||
|
||||
if [ $#POSTDISPLAY -gt 0 ]; then
|
||||
_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT="$#BUFFER $(($#BUFFER + $#POSTDISPLAY)) $ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE"
|
||||
region_highlight+=("$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT")
|
||||
|
||||
@@ -48,4 +48,3 @@ _zsh_autosuggest_strategy_match_prev_cmd() {
|
||||
# Echo the matched history entry
|
||||
echo -E "$history[$histkey]"
|
||||
}
|
||||
|
||||
|
||||
@@ -32,8 +32,16 @@ _zsh_autosuggest_modify() {
|
||||
|
||||
# Accept the entire suggestion
|
||||
_zsh_autosuggest_accept() {
|
||||
local -i max_cursor_pos=$#BUFFER
|
||||
|
||||
# When vicmd keymap is active, the cursor can't move all the way
|
||||
# to the end of the buffer
|
||||
if [ "$KEYMAP" = "vicmd" ]; then
|
||||
max_cursor_pos=$((max_cursor_pos - 1))
|
||||
fi
|
||||
|
||||
# Only accept if the cursor is at the end of the buffer
|
||||
if [ $CURSOR -eq $#BUFFER ]; then
|
||||
if [ $CURSOR -eq $max_cursor_pos ]; then
|
||||
# Add the suggestion to the buffer
|
||||
BUFFER="$BUFFER$POSTDISPLAY"
|
||||
|
||||
|
||||
133
test/widgets/accept_test.zsh
Normal file
133
test/widgets/accept_test.zsh
Normal file
@@ -0,0 +1,133 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
source "${0:a:h}/../test_helper.zsh"
|
||||
|
||||
oneTimeSetUp() {
|
||||
source_autosuggestions
|
||||
}
|
||||
|
||||
testCursorAtEnd() {
|
||||
BUFFER='echo'
|
||||
POSTDISPLAY=' hello'
|
||||
CURSOR=4
|
||||
|
||||
stub _zsh_autosuggest_invoke_original_widget
|
||||
|
||||
_zsh_autosuggest_accept 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'original widget not invoked' \
|
||||
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||
|
||||
assertEquals \
|
||||
'BUFFER was not modified' \
|
||||
'echo hello' \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
'POSTDISPLAY was not cleared' \
|
||||
'' \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testCursorNotAtEnd() {
|
||||
BUFFER='echo'
|
||||
POSTDISPLAY=' hello'
|
||||
CURSOR=2
|
||||
|
||||
stub _zsh_autosuggest_invoke_original_widget
|
||||
|
||||
_zsh_autosuggest_accept 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'original widget not invoked' \
|
||||
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||
|
||||
assertEquals \
|
||||
'BUFFER was modified' \
|
||||
'echo' \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
'POSTDISPLAY was modified' \
|
||||
' hello' \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testViCursorAtEnd() {
|
||||
BUFFER='echo'
|
||||
POSTDISPLAY=' hello'
|
||||
CURSOR=3
|
||||
KEYMAP='vicmd'
|
||||
|
||||
stub _zsh_autosuggest_invoke_original_widget
|
||||
|
||||
_zsh_autosuggest_accept 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'original widget not invoked' \
|
||||
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||
|
||||
assertEquals \
|
||||
'BUFFER was not modified' \
|
||||
'echo hello' \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
'POSTDISPLAY was not cleared' \
|
||||
'' \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testViCursorNotAtEnd() {
|
||||
BUFFER='echo'
|
||||
POSTDISPLAY=' hello'
|
||||
CURSOR=2
|
||||
KEYMAP='vicmd'
|
||||
|
||||
stub _zsh_autosuggest_invoke_original_widget
|
||||
|
||||
_zsh_autosuggest_accept 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'original widget not invoked' \
|
||||
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||
|
||||
assertEquals \
|
||||
'BUFFER was modified' \
|
||||
'echo' \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
'POSTDISPLAY was modified' \
|
||||
' hello' \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testWidget() {
|
||||
stub _zsh_autosuggest_highlight_reset
|
||||
stub _zsh_autosuggest_accept
|
||||
stub _zsh_autosuggest_highlight_apply
|
||||
|
||||
# Call the function pointed to by the widget since we can't call
|
||||
# the widget itself when zle is not active
|
||||
${widgets[autosuggest-accept]#*:} 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'autosuggest-accept widget does not exist' \
|
||||
'zle -l autosuggest-accept'
|
||||
|
||||
assertTrue \
|
||||
'highlight_reset was not called' \
|
||||
'stub_called _zsh_autosuggest_highlight_reset'
|
||||
|
||||
assertTrue \
|
||||
'widget function was not called' \
|
||||
'stub_called _zsh_autosuggest_accept'
|
||||
|
||||
assertTrue \
|
||||
'highlight_apply was not called' \
|
||||
'stub_called _zsh_autosuggest_highlight_apply'
|
||||
}
|
||||
|
||||
run_tests "$0"
|
||||
51
test/widgets/clear_test.zsh
Normal file
51
test/widgets/clear_test.zsh
Normal file
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
source "${0:a:h}/../test_helper.zsh"
|
||||
|
||||
oneTimeSetUp() {
|
||||
source_autosuggestions
|
||||
}
|
||||
|
||||
testClear() {
|
||||
BUFFER='ec'
|
||||
POSTDISPLAY='ho hello'
|
||||
|
||||
_zsh_autosuggest_clear 'original-widget'
|
||||
|
||||
assertEquals \
|
||||
'BUFFER was modified' \
|
||||
'ec' \
|
||||
"$BUFFER"
|
||||
|
||||
assertNull \
|
||||
'POSTDISPLAY was not cleared' \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testWidget() {
|
||||
stub _zsh_autosuggest_highlight_reset
|
||||
stub _zsh_autosuggest_clear
|
||||
stub _zsh_autosuggest_highlight_apply
|
||||
|
||||
# Call the function pointed to by the widget since we can't call
|
||||
# the widget itself when zle is not active
|
||||
${widgets[autosuggest-clear]#*:} 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'autosuggest-clear widget does not exist' \
|
||||
'zle -l autosuggest-clear'
|
||||
|
||||
assertTrue \
|
||||
'highlight_reset was not called' \
|
||||
'stub_called _zsh_autosuggest_highlight_reset'
|
||||
|
||||
assertTrue \
|
||||
'widget function was not called' \
|
||||
'stub_called _zsh_autosuggest_clear'
|
||||
|
||||
assertTrue \
|
||||
'highlight_apply was not called' \
|
||||
'stub_called _zsh_autosuggest_highlight_apply'
|
||||
}
|
||||
|
||||
run_tests "$0"
|
||||
41
test/widgets/modify_test.zsh
Normal file
41
test/widgets/modify_test.zsh
Normal file
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
source "${0:a:h}/../test_helper.zsh"
|
||||
|
||||
oneTimeSetUp() {
|
||||
source_autosuggestions
|
||||
}
|
||||
|
||||
testModify() {
|
||||
BUFFER=''
|
||||
POSTDISPLAY=''
|
||||
|
||||
stub_and_eval \
|
||||
_zsh_autosuggest_invoke_original_widget \
|
||||
'BUFFER+="e"'
|
||||
|
||||
stub_and_echo \
|
||||
_zsh_autosuggest_suggestion \
|
||||
'echo hello'
|
||||
|
||||
_zsh_autosuggest_modify 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'original widget not invoked' \
|
||||
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||
|
||||
assertEquals \
|
||||
'BUFFER was not modified' \
|
||||
'e' \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
'POSTDISPLAY does not contain suggestion' \
|
||||
'cho hello' \
|
||||
"$POSTDISPLAY"
|
||||
|
||||
restore _zsh_autosuggest_invoke_original_widget
|
||||
restore _zsh_autosuggest_suggestion
|
||||
}
|
||||
|
||||
run_tests "$0"
|
||||
61
test/widgets/partial_accept_test.zsh
Normal file
61
test/widgets/partial_accept_test.zsh
Normal file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
source "${0:a:h}/../test_helper.zsh"
|
||||
|
||||
oneTimeSetUp() {
|
||||
source_autosuggestions
|
||||
}
|
||||
|
||||
testCursorMovesOutOfBuffer() {
|
||||
BUFFER='ec'
|
||||
POSTDISPLAY='ho hello'
|
||||
CURSOR=1
|
||||
|
||||
stub_and_eval \
|
||||
_zsh_autosuggest_invoke_original_widget \
|
||||
'CURSOR=5; LBUFFER="echo "; RBUFFER="hello"'
|
||||
|
||||
_zsh_autosuggest_partial_accept 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'original widget not invoked' \
|
||||
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||
|
||||
assertEquals \
|
||||
'BUFFER was not modified correctly' \
|
||||
'echo ' \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
'POSTDISPLAY was not modified correctly' \
|
||||
'hello' \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testCursorStaysInBuffer() {
|
||||
BUFFER='echo hello'
|
||||
POSTDISPLAY=' world'
|
||||
CURSOR=1
|
||||
|
||||
stub_and_eval \
|
||||
_zsh_autosuggest_invoke_original_widget \
|
||||
'CURSOR=5; LBUFFER="echo "; RBUFFER="hello"'
|
||||
|
||||
_zsh_autosuggest_partial_accept 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'original widget not invoked' \
|
||||
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||
|
||||
assertEquals \
|
||||
'BUFFER was modified' \
|
||||
'echo hello' \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
'POSTDISPLAY was modified' \
|
||||
' world' \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
run_tests "$0"
|
||||
@@ -1,209 +0,0 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
source "${0:a:h}/test_helper.zsh"
|
||||
|
||||
oneTimeSetUp() {
|
||||
source_autosuggestions
|
||||
}
|
||||
|
||||
testWidgetFunctionClear() {
|
||||
BUFFER='ec'
|
||||
POSTDISPLAY='ho hello'
|
||||
|
||||
_zsh_autosuggest_clear 'original-widget'
|
||||
|
||||
assertEquals \
|
||||
'BUFFER was modified' \
|
||||
'ec' \
|
||||
"$BUFFER"
|
||||
|
||||
assertNull \
|
||||
'POSTDISPLAY was not cleared' \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testWidgetFunctionModify() {
|
||||
BUFFER=''
|
||||
POSTDISPLAY=''
|
||||
|
||||
stub_and_eval \
|
||||
_zsh_autosuggest_invoke_original_widget \
|
||||
'BUFFER+="e"'
|
||||
|
||||
stub_and_echo \
|
||||
_zsh_autosuggest_suggestion \
|
||||
'echo hello'
|
||||
|
||||
_zsh_autosuggest_modify 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'original widget not invoked' \
|
||||
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||
|
||||
assertEquals \
|
||||
'BUFFER was not modified' \
|
||||
'e' \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
'POSTDISPLAY does not contain suggestion' \
|
||||
'cho hello' \
|
||||
"$POSTDISPLAY"
|
||||
|
||||
restore _zsh_autosuggest_invoke_original_widget
|
||||
restore _zsh_autosuggest_suggestion
|
||||
}
|
||||
|
||||
testWidgetFunctionAcceptCursorAtEnd() {
|
||||
BUFFER='echo'
|
||||
POSTDISPLAY=' hello'
|
||||
CURSOR=4
|
||||
|
||||
stub _zsh_autosuggest_invoke_original_widget
|
||||
|
||||
_zsh_autosuggest_accept 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'original widget not invoked' \
|
||||
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||
|
||||
assertEquals \
|
||||
'BUFFER was not modified' \
|
||||
'echo hello' \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
'POSTDISPLAY was not cleared' \
|
||||
'' \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testWidgetFunctionAcceptCursorNotAtEnd() {
|
||||
BUFFER='echo'
|
||||
POSTDISPLAY=' hello'
|
||||
CURSOR=2
|
||||
|
||||
stub _zsh_autosuggest_invoke_original_widget
|
||||
|
||||
_zsh_autosuggest_accept 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'original widget not invoked' \
|
||||
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||
|
||||
assertEquals \
|
||||
'BUFFER was modified' \
|
||||
'echo' \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
'POSTDISPLAY was modified' \
|
||||
' hello' \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testWidgetFunctionPartialAcceptCursorMovesOutOfBuffer() {
|
||||
BUFFER='ec'
|
||||
POSTDISPLAY='ho hello'
|
||||
CURSOR=1
|
||||
|
||||
stub_and_eval \
|
||||
_zsh_autosuggest_invoke_original_widget \
|
||||
'CURSOR=5; LBUFFER="echo "; RBUFFER="hello"'
|
||||
|
||||
_zsh_autosuggest_partial_accept 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'original widget not invoked' \
|
||||
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||
|
||||
assertEquals \
|
||||
'BUFFER was not modified correctly' \
|
||||
'echo ' \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
'POSTDISPLAY was not modified correctly' \
|
||||
'hello' \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testWidgetFunctionPartialAcceptCursorStaysInBuffer() {
|
||||
BUFFER='echo hello'
|
||||
POSTDISPLAY=' world'
|
||||
CURSOR=1
|
||||
|
||||
stub_and_eval \
|
||||
_zsh_autosuggest_invoke_original_widget \
|
||||
'CURSOR=5; LBUFFER="echo "; RBUFFER="hello"'
|
||||
|
||||
_zsh_autosuggest_partial_accept 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'original widget not invoked' \
|
||||
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||
|
||||
assertEquals \
|
||||
'BUFFER was modified' \
|
||||
'echo hello' \
|
||||
"$BUFFER"
|
||||
|
||||
assertEquals \
|
||||
'POSTDISPLAY was modified' \
|
||||
' world' \
|
||||
"$POSTDISPLAY"
|
||||
}
|
||||
|
||||
testWidgetAccept() {
|
||||
stub _zsh_autosuggest_highlight_reset
|
||||
stub _zsh_autosuggest_accept
|
||||
stub _zsh_autosuggest_highlight_apply
|
||||
|
||||
# Call the function pointed to by the widget since we can't call
|
||||
# the widget itself when zle is not active
|
||||
${widgets[autosuggest-accept]#*:} 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'autosuggest-accept widget does not exist' \
|
||||
'zle -l autosuggest-accept'
|
||||
|
||||
assertTrue \
|
||||
'highlight_reset was not called' \
|
||||
'stub_called _zsh_autosuggest_highlight_reset'
|
||||
|
||||
assertTrue \
|
||||
'widget function was not called' \
|
||||
'stub_called _zsh_autosuggest_accept'
|
||||
|
||||
assertTrue \
|
||||
'highlight_apply was not called' \
|
||||
'stub_called _zsh_autosuggest_highlight_apply'
|
||||
}
|
||||
|
||||
testWidgetClear() {
|
||||
stub _zsh_autosuggest_highlight_reset
|
||||
stub _zsh_autosuggest_clear
|
||||
stub _zsh_autosuggest_highlight_apply
|
||||
|
||||
# Call the function pointed to by the widget since we can't call
|
||||
# the widget itself when zle is not active
|
||||
${widgets[autosuggest-clear]#*:} 'original-widget'
|
||||
|
||||
assertTrue \
|
||||
'autosuggest-clear widget does not exist' \
|
||||
'zle -l autosuggest-clear'
|
||||
|
||||
assertTrue \
|
||||
'highlight_reset was not called' \
|
||||
'stub_called _zsh_autosuggest_highlight_reset'
|
||||
|
||||
assertTrue \
|
||||
'widget function was not called' \
|
||||
'stub_called _zsh_autosuggest_clear'
|
||||
|
||||
assertTrue \
|
||||
'highlight_apply was not called' \
|
||||
'stub_called _zsh_autosuggest_highlight_apply'
|
||||
}
|
||||
|
||||
run_tests "$0"
|
||||
@@ -1,6 +1,6 @@
|
||||
# Fish-like fast/unobtrusive autosuggestions for zsh.
|
||||
# https://github.com/zsh-users/zsh-autosuggestions
|
||||
# v0.3.0
|
||||
# v0.3.1
|
||||
# Copyright (c) 2013 Thiago de Arruda
|
||||
# Copyright (c) 2016 Eric Freese
|
||||
#
|
||||
@@ -196,6 +196,8 @@ _zsh_autosuggest_invoke_original_widget() {
|
||||
|
||||
# If there was a highlight, remove it
|
||||
_zsh_autosuggest_highlight_reset() {
|
||||
typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
|
||||
|
||||
if [ -n "$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT" ]; then
|
||||
region_highlight=("${(@)region_highlight:#$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT}")
|
||||
unset _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
|
||||
@@ -204,6 +206,8 @@ _zsh_autosuggest_highlight_reset() {
|
||||
|
||||
# If there's a suggestion, highlight it
|
||||
_zsh_autosuggest_highlight_apply() {
|
||||
typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
|
||||
|
||||
if [ $#POSTDISPLAY -gt 0 ]; then
|
||||
_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT="$#BUFFER $(($#BUFFER + $#POSTDISPLAY)) $ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE"
|
||||
region_highlight+=("$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT")
|
||||
@@ -245,8 +249,16 @@ _zsh_autosuggest_modify() {
|
||||
|
||||
# Accept the entire suggestion
|
||||
_zsh_autosuggest_accept() {
|
||||
local -i max_cursor_pos=$#BUFFER
|
||||
|
||||
# When vicmd keymap is active, the cursor can't move all the way
|
||||
# to the end of the buffer
|
||||
if [ "$KEYMAP" = "vicmd" ]; then
|
||||
max_cursor_pos=$((max_cursor_pos - 1))
|
||||
fi
|
||||
|
||||
# Only accept if the cursor is at the end of the buffer
|
||||
if [ $CURSOR -eq $#BUFFER ]; then
|
||||
if [ $CURSOR -eq $max_cursor_pos ]; then
|
||||
# Add the suggestion to the buffer
|
||||
BUFFER="$BUFFER$POSTDISPLAY"
|
||||
|
||||
@@ -403,7 +415,6 @@ _zsh_autosuggest_strategy_match_prev_cmd() {
|
||||
echo -E "$history[$histkey]"
|
||||
}
|
||||
|
||||
|
||||
#--------------------------------------------------------------------#
|
||||
# Start #
|
||||
#--------------------------------------------------------------------#
|
||||
|
||||
Reference in New Issue
Block a user