diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Test/X02zlevi.ztst | 20 | ||||
-rw-r--r-- | Test/comptest | 33 |
3 files changed, 52 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog index 41a44096c..f33be725b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2013-02-12 Oliver Kiddle <opk@zsh.org> + * 31041: Test/comptest, Test/X02zlevi.ztst: add support for + testing line editor widgets from the test suite + * unposted: Etc/zsh-development-guide: remove duplication in git guidelines @@ -517,5 +520,5 @@ ***************************************************** * This is used by the shell to define $ZSH_PATCHLEVEL -* $Revision: 1.5801 $ +* $Revision: 1.5802 $ ***************************************************** diff --git a/Test/X02zlevi.ztst b/Test/X02zlevi.ztst new file mode 100644 index 000000000..d4a125f21 --- /dev/null +++ b/Test/X02zlevi.ztst @@ -0,0 +1,20 @@ +# Tests of the vi mode of ZLE + +%prep + if ( zmodload -i zsh/zpty ) >/dev/null 2>&1; then + . $ZTST_srcdir/comptest + comptestinit -v -z $ZTST_testdir/../Src/zsh + else + ZTST_unimplemented="the zsh/zpty module is not available" + fi + +%test + + zletest $'one two\ebmt3|`tx``' +0:setting mark and returning to original position +>BUFFER: one wo +>CURSOR: 2 + +%clean + + zmodload -ui zsh/zpty diff --git a/Test/comptest b/Test/comptest index 14938a7cd..5577209da 100644 --- a/Test/comptest +++ b/Test/comptest @@ -8,10 +8,12 @@ comptestinit () { zmodload -i zsh/zpty || return $? comptest_zsh=${ZSH:-zsh} + comptest_keymap=e - while getopts z: opt; do + while getopts vz: opt; do case $opt in z) comptest_zsh="$OPTARG";; + v) comptest_keymap="v";; esac done (( OPTIND > 1 )) && shift $(( OPTIND - 1 )) @@ -30,11 +32,11 @@ comptestinit () { "export ZDOTDIR=$ZTST_testdir" \ "module_path=( $module_path )" \ "fpath=( $fpath )" \ +"bindkey -$comptest_keymap" \ 'LISTMAX=10000000 TERM=vt100 stty columns 80 rows 24 setopt zle -bindkey -e autoload -U compinit compinit -u zstyle ":completion:*:default" list-colors "no=<NO>" "fi=<FI>" "di=<DI>" "ln=<LN>" "pi=<PI>" "so=<SO>" "bd=<BD>" "cd=<CD>" "ex=<EX>" "mi=<MI>" "tc=<TC>" "sp=<SP>" "lc=<LC>" "ec=<EC>\n" "rc=<RC>" @@ -60,18 +62,29 @@ list-choices-with-report () { zle clear-screen zle -R } -finish () { +comp-finish () { print "<WIDGET><finish>" zle kill-whole-line zle clear-screen zle -R } +zle-finish () { + print -lr "<WIDGET><finish>" "BUFFER: $BUFFER" "CURSOR: $CURSOR" + (( region_active )) && print -lr "MARK: $MARK" + zle -K main + zle kill-whole-line + zle clear-screen + zle -R +} zle -N expand-or-complete-with-report zle -N list-choices-with-report -zle -N finish +zle -N comp-finish +zle -N zle-finish bindkey "^I" expand-or-complete-with-report bindkey "^D" list-choices-with-report -bindkey "^Z" finish +bindkey "^Z" comp-finish +bindkey "^M" zle-finish +bindkey -a "^M" zle-finish ' } @@ -120,3 +133,13 @@ comptest () { done done } + +zletest () { + input="$*" + zpty -n -w zsh "$input"$'\C-M' + zpty -r -m zsh log "*<WIDGET><finish>*<PROMPT>*" || { + print "failed to invoke finish widget." + return 1 + } + print -lr "${(@)${(ps:\r\n:)log##*<WIDGET><finish>}[1,-2]}" +} |