2014-09-18 15:45:07 -07:00
# vim: set filetype=expect:
spawn $fish
expect_prompt
2016-01-31 17:37:51 -08:00
# Fish should start in default-mode (i.e., emacs) bindings. The default escape
# timeout is 300ms.
2014-09-18 15:45:07 -07:00
2016-01-31 17:37:51 -08:00
# 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, default timeout: no delay"
} unmatched {
puts stderr "emacs transpose words fail, default timeout: no delay"
}
# Now test with a delay > 0 and < the escape timeout. This should transpose
# the words.
send "echo ghi jkl"
send "\033"
2016-02-10 18:09:55 -08:00
sleep 0.250
2016-01-31 17:37:51 -08:00
send "t\r"
expect_prompt -re {\r\njkl ghi\r\n} {
puts "emacs transpose words, default timeout: short delay"
} unmatched {
puts stderr "emacs transpose words fail, default timeout: short 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"
sleep 0.400
send "t\r"
expect_prompt -re {\r\nmno pqrt\r\n} {
puts "emacs transpose words, default timeout: long delay"
} unmatched {
puts stderr "emacs transpose words fail, default timeout: long delay"
}
2014-09-18 15:45:07 -07:00
2016-01-31 17:37:51 -08:00
# Test vi key bindings.
# This should leave vi mode in the insert state.
2015-12-23 15:24:45 -08:00
send "set -g fish_key_bindings fish_vi_key_bindings\r"
2014-09-18 15:45:07 -07:00
expect_prompt
2016-01-23 18:24:54 -08:00
2016-01-31 17:37:51 -08:00
# These vi tests assume the fish_vi_key_bindings default escape timeout of
# 10ms is in effect; not the 300ms timeout for the default-mode.
#
2016-02-04 16:32:25 -08:00
# Go through a prompt cycle to let fish catch up, it may be slow due to ASAN
2016-01-23 18:24:54 -08:00
send "echo success: default escape timeout\r"
expect_prompt -re {\r\nsuccess: default escape timeout\r\n} {
2016-01-31 17:37:51 -08:00
puts "prime vi mode, default timeout"
2014-09-18 15:45:07 -07:00
} unmatched {
2016-01-31 17:37:51 -08:00
puts stderr "prime vi mode, default timeout"
2014-09-18 15:45:07 -07:00
}
2016-01-23 18:24:54 -08:00
2016-02-10 18:09:55 -08:00
# Verify the default timeout has been set to the expected value.
send "echo fish_escape_delay_ms=\$fish_escape_delay_ms\r"
2016-04-28 21:12:58 -07:00
expect_prompt -re {\r\nfish_escape_delay_ms=100\r\n} {
2016-02-10 18:09:55 -08:00
puts "vi-mode default timeout set correctly"
} unmatched {
puts stderr "vi-mode default timeout not set correctly"
}
2016-01-14 21:46:53 -08:00
send "echo fail: default escape timeout"
send "\033"
2016-02-10 18:09:55 -08:00
# Delay needed to allow fish to transition to vi "normal" mode. The delay is
# longer than strictly necessary to let fish catch up as it may be slow due to
# ASAN.
2016-04-28 21:12:58 -07:00
sleep 0.150
2016-01-14 21:46:53 -08:00
send "ddi"
send "echo success: default escape timeout\r"
expect_prompt -re {\r\nsuccess: default escape timeout\r\n} {
2016-01-31 17:37:51 -08:00
puts "vi replace line, default timeout: long delay"
2014-09-18 15:45:07 -07:00
} unmatched {
2016-01-31 17:37:51 -08:00
puts stderr "vi replace line, default timeout: long delay"
2014-09-18 15:45:07 -07:00
}
2015-12-23 15:24:45 -08:00
# Test replacing a single character.
2016-01-14 21:46:53 -08:00
send "echo TEXT"
send "\033"
2015-12-23 15:24:45 -08:00
# Delay needed to allow fish to transition to vi "normal" mode.
2016-04-28 21:12:58 -07:00
sleep 0.150
2016-01-14 21:46:53 -08:00
send "hhrAi\r"
2015-07-20 00:18:56 -07:00
expect_prompt -re {\r\nTAXT\r\n} {
2016-01-31 17:37:51 -08:00
puts "vi mode replace char, default timeout: long delay"
2015-07-20 00:18:56 -07:00
} unmatched {
2016-01-31 17:37:51 -08:00
puts stderr "vi mode replace char, default timeout: long delay"
2016-01-14 21:46:53 -08:00
}
2016-01-31 17:37:51 -08:00
# Verify that changing the escape timeout has an effect.
2016-04-28 21:12:58 -07:00
send "set -g fish_escape_delay_ms 200\r"
2016-01-14 21:46:53 -08:00
expect_prompt
2016-02-10 18:09:55 -08:00
2016-01-31 17:37:51 -08:00
send "echo fail: lengthened escape timeout"
2016-01-14 21:46:53 -08:00
send "\033"
2016-02-10 18:09:55 -08:00
sleep 0.250
2016-01-14 21:46:53 -08:00
send "ddi"
2016-01-31 17:37:51 -08:00
send "echo success: lengthened escape timeout\r"
expect_prompt -re {\r\nsuccess: lengthened escape timeout\r\n} {
puts "vi replace line, 100ms timeout: long delay"
2016-01-14 21:46:53 -08:00
} unmatched {
2016-01-31 17:37:51 -08:00
puts stderr "vi replace line, 100ms timeout: long delay"
2016-01-14 21:46:53 -08:00
}
# Verify that we don't switch to vi normal mode if we don't wait long enough
2016-01-31 17:37:51 -08:00
# after sending escape.
2016-01-14 21:46:53 -08:00
send "echo fail: no normal mode"
send "\033"
2016-04-28 21:12:58 -07:00
sleep 0.100
2016-01-14 21:46:53 -08:00
send "ddi"
send "inserted\r"
expect_prompt -re {\r\nfail: no normal modediinserted\r\n} {
2016-01-31 17:37:51 -08:00
puts "vi replace line, 100ms timeout: short delay"
2015-07-20 00:18:56 -07:00
} unmatched {
2016-01-31 17:37:51 -08:00
puts stderr "vi replace line, 100ms timeout: short delay"
2015-07-20 00:18:56 -07:00
}
2015-09-03 14:20:08 -04:00
# Test 't' binding that contains non-zero arity function (forward-jump) followed
# by another function (and) https://github.com/fish-shell/fish-shell/issues/2357
2016-02-02 18:13:08 -08:00
send "\033"
2016-02-10 18:09:55 -08:00
sleep 0.250
2016-02-02 18:13:08 -08:00
send "ddiecho TEXT\033"
2016-02-10 18:09:55 -08:00
sleep 0.250
2016-02-02 18:13:08 -08:00
send "hhtTrN\r"
2015-09-03 14:20:08 -04:00
expect_prompt -re {\r\nTENT\r\n} {
puts "t-binding success"
} -nounmatched -re {\r\nfail} {
puts stderr "t-binding fail"
} unmatched {
puts stderr "Couldn't find expected output 'TENT'"
}
2015-12-23 15:24:45 -08:00
# Switch back to regular (emacs mode) key bindings.
2016-01-14 21:46:53 -08:00
send "set -g fish_key_bindings fish_default_key_bindings\r"
2014-09-18 15:45:07 -07:00
expect_prompt
2016-01-14 21:46:53 -08:00
2016-04-28 21:12:58 -07:00
# Verify the custom escape timeout of 200ms set earlier is still in effect.
2016-02-10 18:09:55 -08:00
send "echo fish_escape_delay_ms=\$fish_escape_delay_ms\r"
2016-04-28 21:12:58 -07:00
expect_prompt -re {\r\nfish_escape_delay_ms=200\r\n} {
2016-02-10 18:09:55 -08:00
puts "default-mode custom timeout set correctly"
} unmatched {
puts stderr "default-mode custom timeout not set correctly"
}
2016-04-28 21:12:58 -07:00
# Reset it to 100ms.
send "set -g fish_escape_delay_ms 100\r"
expect_prompt
2016-01-14 21:46:53 -08:00
# 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"
2016-01-31 17:37:51 -08:00
send "\033"
send "t\r"
2016-01-14 21:46:53 -08:00
expect_prompt -re {\r\ndef abc\r\n} {
2016-01-31 17:37:51 -08:00
puts "emacs transpose words, 100ms timeout: no delay"
2016-01-14 21:46:53 -08:00
} unmatched {
2016-01-31 17:37:51 -08:00
puts stderr "emacs transpose words fail, 100ms timeout: no delay"
2016-01-14 21:46:53 -08:00
}
2016-01-23 18:24:54 -08:00
2016-01-31 17:37:51 -08:00
# Same test as above but with a slight delay less than the escape timeout.
2016-01-14 21:46:53 -08:00
send "echo ghi jkl"
send "\033"
2016-01-31 17:37:51 -08:00
sleep 0.080
2016-01-14 21:46:53 -08:00
send "t\r"
expect_prompt -re {\r\njkl ghi\r\n} {
2016-01-31 17:37:51 -08:00
puts "emacs transpose words, 100ms timeout: short delay"
2016-01-14 21:46:53 -08:00
} unmatched {
2016-01-31 17:37:51 -08:00
puts stderr "emacs transpose words fail, 100ms timeout: short delay"
2016-01-14 21:46:53 -08:00
}
# 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-02-10 18:09:55 -08:00
sleep 0.250
2016-01-14 21:46:53 -08:00
send "t\r"
expect_prompt -re {\r\nmno pqrt\r\n} {
2016-01-31 17:37:51 -08:00
puts "emacs transpose words, 100ms timeout: long delay"
2014-09-18 15:45:07 -07:00
} unmatched {
2016-01-31 17:37:51 -08:00
puts stderr "emacs transpose words fail, 100ms timeout: long delay"
2014-09-18 15:45:07 -07:00
}
2016-05-24 20:42:50 -07:00
# Verify special characters, such as \cV, are not intercepted by the kernel
# tty driver. Rather, they can be bound and handled by fish.
send "bind \\cV 'echo ctrl-v seen'\r"
expect_prompt
send "\026\r"
expect_prompt -re {ctrl-v seen} {
puts "ctrl-v seen"
} unmatched {
puts stderr "ctrl-v not seen"
}
send "bind \\cO 'echo ctrl-o seen'\r"
expect_prompt
send "\017\r"
expect_prompt -re {ctrl-o seen} {
puts "ctrl-o seen"
} unmatched {
puts stderr "ctrl-o not seen"
}