fish-shell/tests/histfile.expect
David Adam 2c01e67a74 histfile tests: tweak expect commands to avoid crash on 32-bit platforms
Rather than killing the process with close, read EOF after sending the
"exit" command and wait for OS cleanup (per the expect examples).

Not cleaning up with wait caused expect to crash on all 32-bit platforms
including i586 and armv7l with "alloc: invalid block: 0xbf993ccb: 3d 3b".

64-bit platforms were not affected, for reasons that are not clear.
2019-01-05 16:03:15 +08:00

131 lines
3.9 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
# 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' $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"
}