2014-09-19 06:45:07 +08:00
|
|
|
# vim: set filetype=expect:
|
|
|
|
spawn $fish
|
|
|
|
expect_prompt
|
|
|
|
|
2016-01-15 13:46:53 +08:00
|
|
|
# Test switching key bindings to vi mode. This should leave the mode in the
|
|
|
|
# appropriate state (i.e., insert mode). These initial tests assume the
|
|
|
|
# default escape timeout of 500ms is in effect.
|
2014-09-19 06:45:07 +08:00
|
|
|
|
2015-12-24 07:24:45 +08:00
|
|
|
send "set -g fish_key_bindings fish_vi_key_bindings\r"
|
2014-09-19 06:45:07 +08:00
|
|
|
expect_prompt
|
2016-01-24 10:24:54 +08:00
|
|
|
|
|
|
|
# This test is only present to make the Travis-CI framework succeed
|
|
|
|
# consistently. It's not clear why the following tests succeed without this
|
|
|
|
# test when executed on a local machine but not in the Travis-CI framework.
|
|
|
|
send "echo success: default escape timeout\r"
|
|
|
|
expect_prompt -re {\r\nsuccess: default escape timeout\r\n} {
|
|
|
|
puts "prime vi mode: default escape timeout"
|
|
|
|
} unmatched {
|
|
|
|
puts stderr "prime vi mode fail: default escape timeout"
|
|
|
|
}
|
|
|
|
|
2016-01-15 13:46:53 +08:00
|
|
|
send "echo fail: default escape timeout"
|
|
|
|
send "\033"
|
2015-12-24 07:24:45 +08:00
|
|
|
# Delay needed to allow fish to transition to vi "normal" mode.
|
2016-01-24 10:24:54 +08:00
|
|
|
sleep 0.550
|
2016-01-15 13:46:53 +08:00
|
|
|
send "ddi"
|
|
|
|
send "echo success: default escape timeout\r"
|
|
|
|
expect_prompt -re {\r\nsuccess: default escape timeout\r\n} {
|
|
|
|
puts "vi replace line: default escape timeout"
|
2014-09-19 06:45:07 +08:00
|
|
|
} unmatched {
|
2016-01-24 10:24:54 +08:00
|
|
|
puts stderr "vi replace line fail: default escape timeout"
|
2014-09-19 06:45:07 +08:00
|
|
|
}
|
2015-12-24 07:24:45 +08:00
|
|
|
|
|
|
|
# Verify that a human can transpose words using \et (which is an emacs default
|
|
|
|
# binding but should be valid while in vi insert mode).
|
2016-01-15 13:46:53 +08:00
|
|
|
send "echo abc def"
|
|
|
|
send "\033"
|
|
|
|
# Fish should still be in vi insert mode after this delay to simulate a slow
|
|
|
|
# typist.
|
2015-12-24 07:24:45 +08:00
|
|
|
sleep 0.400
|
|
|
|
send "t\r"
|
|
|
|
expect_prompt -re {\r\ndef abc\r\n} {
|
2016-01-15 13:46:53 +08:00
|
|
|
puts "vi transpose words: default escape timeout"
|
2014-09-19 06:45:07 +08:00
|
|
|
} unmatched {
|
2016-01-15 13:46:53 +08:00
|
|
|
puts stderr "vi transpose words fail: default escape timeout"
|
2014-09-19 06:45:07 +08:00
|
|
|
}
|
|
|
|
|
2015-12-24 07:24:45 +08:00
|
|
|
# Test replacing a single character.
|
2016-01-15 13:46:53 +08:00
|
|
|
send "echo TEXT"
|
|
|
|
send "\033"
|
2015-12-24 07:24:45 +08:00
|
|
|
# Delay needed to allow fish to transition to vi "normal" mode.
|
2016-01-24 10:24:54 +08:00
|
|
|
sleep 0.550
|
2016-01-15 13:46:53 +08:00
|
|
|
send "hhrAi\r"
|
2015-07-20 15:18:56 +08:00
|
|
|
expect_prompt -re {\r\nTAXT\r\n} {
|
2016-01-15 13:46:53 +08:00
|
|
|
puts "vi mode replace: default escape timeout"
|
2015-07-20 15:18:56 +08:00
|
|
|
} -nounmatched -re {\r\nfail} {
|
2016-01-15 13:46:53 +08:00
|
|
|
puts stderr "vi mode replace fail: default escape timeout"
|
2015-07-20 15:18:56 +08:00
|
|
|
} unmatched {
|
2016-01-15 13:46:53 +08:00
|
|
|
puts stderr "couldn't find expected output 'TAXT': default escape timeout"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Verify that changing the escape timeout has an effect. The vi key bindings
|
|
|
|
# should still be in effect.
|
|
|
|
send "set -g fish_escape_delay_ms 100\r"
|
|
|
|
expect_prompt
|
|
|
|
send "echo fail: shortened escape timeout"
|
|
|
|
send "\033"
|
2016-01-24 10:24:54 +08:00
|
|
|
sleep 0.150
|
2016-01-15 13:46:53 +08:00
|
|
|
send "ddi"
|
|
|
|
send "echo success: shortened escape timeout\r"
|
|
|
|
expect_prompt -re {\r\nsuccess: shortened escape timeout\r\n} {
|
|
|
|
puts "vi replace line: shortened escape timeout"
|
|
|
|
} -nounmatched -re {\r\nfail} {
|
|
|
|
puts stderr "vi replace line fail: shortened escape timeout"
|
|
|
|
} unmatched {
|
|
|
|
puts stderr "couldn't find expected output: replace_line, shortened escape timeout"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Verify that we don't switch to vi normal mode if we don't wait long enough
|
|
|
|
# after sending escape. The vi key bindings should still be in effect.
|
|
|
|
send "echo fail: no normal mode"
|
|
|
|
send "\033"
|
|
|
|
sleep 0.050
|
|
|
|
send "ddi"
|
|
|
|
send "inserted\r"
|
|
|
|
expect_prompt -re {\r\nfail: no normal modediinserted\r\n} {
|
|
|
|
puts "vi normal mode: shortened escape timeout"
|
|
|
|
} unmatched {
|
|
|
|
puts stderr "couldn't find expected output: no normal mode"
|
2015-07-20 15:18:56 +08:00
|
|
|
}
|
|
|
|
|
2015-12-24 07:24:45 +08:00
|
|
|
# Switch back to regular (emacs mode) key bindings.
|
2016-01-15 13:46:53 +08:00
|
|
|
send "set -g fish_key_bindings fish_default_key_bindings\r"
|
|
|
|
expect_prompt
|
|
|
|
|
|
|
|
# Verify the emacs transpose word (\et) behavior using various delays,
|
|
|
|
# including none, after the escape character.
|
|
|
|
|
|
|
|
# Start by testing with no delay. This should transpose the words.
|
|
|
|
send "echo abc def"
|
|
|
|
send "\033t\r"
|
|
|
|
expect_prompt -re {\r\ndef abc\r\n} {
|
|
|
|
puts "emacs transpose words: no escape delay"
|
|
|
|
} unmatched {
|
|
|
|
puts stderr "emacs transpose words fail: no escape delay"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Now test with a delay > 0 and < the escape timeout. This should transpose
|
|
|
|
# the words.
|
|
|
|
send "set -g fish_escape_delay_ms 100\r"
|
2014-09-19 06:45:07 +08:00
|
|
|
expect_prompt
|
2016-01-24 10:24:54 +08:00
|
|
|
|
2016-01-15 13:46:53 +08:00
|
|
|
send "echo ghi jkl"
|
|
|
|
send "\033"
|
|
|
|
sleep 0.050
|
|
|
|
send "t\r"
|
|
|
|
expect_prompt -re {\r\njkl ghi\r\n} {
|
|
|
|
puts "emacs transpose words: short escape delay"
|
|
|
|
} unmatched {
|
|
|
|
puts stderr "emacs transpose words fail: short escape delay"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Now test with a delay > the escape timeout. The transposition should not
|
|
|
|
# occur and the "t" should become part of the text that is echoed.
|
|
|
|
send "echo mno pqr"
|
|
|
|
send "\033"
|
2016-01-24 10:24:54 +08:00
|
|
|
sleep 0.150
|
2016-01-15 13:46:53 +08:00
|
|
|
send "t\r"
|
|
|
|
expect_prompt -re {\r\nmno pqrt\r\n} {
|
|
|
|
puts "emacs transpose words: long escape delay"
|
|
|
|
} unmatched {
|
|
|
|
puts stderr "emacs transpose words fail: long escape delay"
|
2014-09-19 06:45:07 +08:00
|
|
|
}
|