mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-12 08:33:45 +08:00
3c800e0608
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.
126 lines
3.7 KiB
Plaintext
126 lines
3.7 KiB
Plaintext
# 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"
|
|
}
|