fish-shell/tests/histfile.expect
ridiculousfish 3c800e0608 Make history tests more robust
history now often writes to the history file asynchronously, but the history
test expects to find the text in the file immediately after running the
command. Hack a bit in history to make this test more reliable.
2019-06-28 11:16:27 -07:00

125 lines
3.7 KiB
Text

# vim: set filetype=expect:
# We're going to use three history files, including the default, to verify
# that the fish_history variable works as expected.
set default_histfile "../test/data/fish/fish_history"
set my_histfile "../test/data/fish/my_history"
set env_histfile "../test/data/fish/env_history"
# =============
# Verify that if we spawn fish with no fish_history env var it uses the
# default file.
# =============
set fish_pid [spawn $fish]
expect_prompt
# Verify that a command is recorded in the default history file.
set cmd1 "echo $fish_pid default histfile"
set hist_line "- cmd: $cmd1"
send "$cmd1\r"
expect_prompt
# TODO: Figure out why this `history --save` is only needed in one of the
# three Travis CI build environments and neither of my OS X or Ubuntu servers.
send "history --save\r"
expect_prompt
send "grep '^$hist_line' $default_histfile\r"
expect_prompt -re "\r\n$hist_line\r\n" {
puts "cmd1 found in default histfile"
} unmatched {
puts stderr "cmd1 not found in default histfile"
}
# Switch to a new history file and verify it is written to and the default
# history file is not written to.
set cmd2 "echo $fish_pid my histfile"
set hist_line "- cmd: $cmd2"
send "set fish_history my\r"
expect_prompt
send "$cmd2\r"
expect_prompt
send "grep '^$hist_line' $my_histfile\r"
expect_prompt -re "\r\n$hist_line\r\n" {
puts "cmd2 found in my histfile"
} unmatched {
puts stderr "cmd2 not found in my histfile"
}
# We expect this grep to fail to find the pattern and thus the expect_prompt
# block is inverted.
send "grep '^$hist_line' $default_histfile\r"
expect_prompt -re "\r\n$hist_line\r\n" {
puts stderr "cmd2 found in default histfile"
} unmatched {
puts "cmd2 not found in default histfile"
}
# Switch back to the default history file.
set cmd3 "echo $fish_pid default histfile again"
set hist_line "- cmd: $cmd3"
send "set fish_history default\r"
expect_prompt
send "$cmd3\r"
expect_prompt
# TODO: Figure out why this `history --save` is only needed in one of the
# three Travis CI build environments and neither of my OS X or Ubuntu servers.
send "history --save\r"
expect_prompt
send "grep '^$hist_line' $default_histfile\r"
expect_prompt -re "\r\n$hist_line\r\n" {
puts "cmd3 found in default histfile"
} unmatched {
puts stderr "cmd3 not found in default histfile"
}
# We expect this grep to fail to find the pattern and thus the expect_prompt
# block is inverted.
send "grep '^$hist_line' $my_histfile\r"
expect_prompt -re "\r\n$hist_line\r\n" {
puts stderr "cmd3 found in my histfile"
} unmatched {
puts "cmd3 not found in my histfile"
}
# =============
# Verify that if we spawn fish with a HISTFILE env var it uses that file.
# =============
# Start by shutting down the previous shell.
send "exit\r"
expect eof
wait
# Set the fish_history env var.
set ::env(fish_history) env
# Spawn a new shell.
set prompt_counter 1
set fish_pid [spawn $fish]
expect_prompt
# Verify that the new fish shell is using the fish_history value for history.
set cmd4 "echo $fish_pid env histfile"
set hist_line "- cmd: $cmd4"
send "$cmd4\r"
expect_prompt
# TODO: Figure out why this `history --save` is only needed in one of the
# three Travis CI build environments and neither of my OS X or Ubuntu servers.
# send "history --save\r"
# expect_prompt
send "grep '^$hist_line' $env_histfile\r"
expect_prompt -re "\r\n$hist_line\r\n" {
puts "cmd4 found in env histfile"
} unmatched {
puts stderr "cmd4 not found in env histfile"
}
# We expect this grep to fail to find the pattern and thus the expect_prompt
# block is inverted.
send "grep '^$hist_line' $default_histfile\r"
expect_prompt -re "\r\n$hist_line\r\n" {
puts stderr "cmd4 found in default histfile"
} unmatched {
puts "cmd4 not found in default histfile"
}