diff --git a/tests/bind.expect b/tests/bind.expect index 252709557..6c80b8f11 100644 --- a/tests/bind.expect +++ b/tests/bind.expect @@ -1,48 +1,55 @@ # vim: set filetype=expect: - spawn $fish - expect_prompt -# test switching key bindings -# this should leave the mode in the appropriate state +# Test switching key bindings to vi mode. +# This should leave the mode in the appropriate state (i.e., insert mode). -send_line "set -g fish_key_bindings fish_vi_key_bindings" +send "set -g fish_key_bindings fish_vi_key_bindings\r" expect_prompt -send_line -h "echo fail\033ddiecho success" +send -h "echo fail\033" +# Delay needed to allow fish to transition to vi "normal" mode. +sleep 0.510 +send -h "ddiecho success\r" expect_prompt -re {\r\nsuccess\r\n} { - puts "success" + puts "vi replace line success" } -nounmatched -re {\r\nfail} { - puts stderr "fail" -} unmatched { - puts stderr "Couldn't find expected output 'success'" -} -# try again without the human typing -send_line -h "echo fail\033ddiecho success" -expect_prompt -re {\r\nsuccess\r\n} { - puts "success" -} -nounmatched -re {\r\nfail} { - puts stderr "fail" + puts stderr "vi replace line fail" } unmatched { puts stderr "Couldn't find expected output 'success'" } -# Test lowercase-r replace -send_line -h "\033ddiecho TEXT\033hhrAi" +# Verify that a human can transpose words using \et (which is an emacs default +# binding but should be valid while in vi insert mode). +send "echo abc def\033" +# Fish should still be in vi "insert" mode after this delay. +sleep 0.400 +send "t\r" +expect_prompt -re {\r\ndef abc\r\n} { + puts "vi transpose words success" +} unmatched { + puts stderr "vi transpose words fail" +} + +# Test replacing a single character. +send -h "echo TEXT\033" +# Delay needed to allow fish to transition to vi "normal" mode. +sleep 0.510 +send -h "hhrAi\r" expect_prompt -re {\r\nTAXT\r\n} { - puts "replace success" + puts "vi mode replace success" } -nounmatched -re {\r\nfail} { - puts stderr "replace fail" + puts stderr "vi mode replace fail" } unmatched { puts stderr "Couldn't find expected output 'TAXT'" } -# still in insert mode, switch back to regular key bindings -send_line -h "set -g fish_key_bindings fish_default_key_bindings" +# Switch back to regular (emacs mode) key bindings. +send -h "set -g fish_key_bindings fish_default_key_bindings\r" expect_prompt -send_line "echo success" +send "echo success\r" expect_prompt -re {\r\nsuccess\r\n} { - puts "success" + puts "emacs success" } unmatched { puts stderr "Couldn't find expected output 'success'" } timeout { diff --git a/tests/bind.expect.out b/tests/bind.expect.out index 7f883abdc..f82eec235 100644 --- a/tests/bind.expect.out +++ b/tests/bind.expect.out @@ -1,4 +1,4 @@ -success -success -replace success -success +vi replace line success +vi transpose words success +vi mode replace success +emacs success diff --git a/tests/interactive.fish b/tests/interactive.fish old mode 100644 new mode 100755 index ad53e2624..9f5e979ce --- a/tests/interactive.fish +++ b/tests/interactive.fish @@ -2,7 +2,17 @@ # # Interactive tests using `expect` -source test_util.fish (status -f); or exit +# Change to directory containing this script +cd (dirname (status -f)) + +# Test files specified on commandline, or all *.expect files +if set -q argv[1] + set files_to_test $argv.expect +else + set files_to_test *.expect +end + +source test_util.fish (status -f) $argv; or exit say -o cyan "Testing interactive functionality" if not type -q expect @@ -65,7 +75,7 @@ function test_file end set -l failed -for i in *.expect +for i in $files_to_test if not test_file $i set failed $failed $i end diff --git a/tests/test.fish b/tests/test.fish index 994e7a764..588a8f354 100755 --- a/tests/test.fish +++ b/tests/test.fish @@ -6,7 +6,6 @@ cd (dirname (status -f)) # Test files specified on commandline, or all *.in files -set -q argv[1] if set -q argv[1] set files_to_test $argv.in else