summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Test/X02zlevi.ztst20
-rw-r--r--Test/comptest33
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]}"
+}