mirror of
https://github.com/ddworken/hishtory.git
synced 2025-02-19 20:10:58 +01:00
Refactor tmux capturing to take in a struct to avoid having to create so many overloaded functions
This commit is contained in:
parent
7e33e942e6
commit
2e5f345411
@ -1651,19 +1651,19 @@ func testTui_color(t testing.TB) {
|
|||||||
|
|
||||||
// Capture the TUI with full colored output, note that this golden will be harder to undersand
|
// Capture the TUI with full colored output, note that this golden will be harder to undersand
|
||||||
// from inspection and primarily servers to detect unintended changes in hishtory's output.
|
// from inspection and primarily servers to detect unintended changes in hishtory's output.
|
||||||
out := captureTerminalOutputComplex(t, tester, tester.ShellName(), 200, 50, []TmuxCommand{{Keys: "hishtory SPACE tquery ENTER"}}, true)
|
out := captureTerminalOutputComplex(t, TmuxCaptureConfig{tester: tester, complexCommands: []TmuxCommand{{Keys: "hishtory SPACE tquery ENTER"}}, includeEscapeSequences: true})
|
||||||
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1])
|
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1])
|
||||||
testutils.CompareGoldens(t, out, "TestTui-ColoredOutput")
|
testutils.CompareGoldens(t, out, "TestTui-ColoredOutput")
|
||||||
|
|
||||||
// And the same once a search query has been typed in
|
// And the same once a search query has been typed in
|
||||||
out = captureTerminalOutputComplex(t, tester, tester.ShellName(), 200, 50, []TmuxCommand{{Keys: "hishtory SPACE tquery ENTER"}, {Keys: "ech"}}, true)
|
out = captureTerminalOutputComplex(t, TmuxCaptureConfig{tester: tester, complexCommands: []TmuxCommand{{Keys: "hishtory SPACE tquery ENTER"}, {Keys: "ech"}}, includeEscapeSequences: true})
|
||||||
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1])
|
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1])
|
||||||
testutils.CompareGoldens(t, out, "TestTui-ColoredOutputWithSearch")
|
testutils.CompareGoldens(t, out, "TestTui-ColoredOutputWithSearch")
|
||||||
|
|
||||||
// And one more time with beta-mode for highlighting matches
|
// And one more time with beta-mode for highlighting matches
|
||||||
tester.RunInteractiveShell(t, ` hishtory config-set beta-mode true`)
|
tester.RunInteractiveShell(t, ` hishtory config-set beta-mode true`)
|
||||||
require.Equal(t, "true", strings.TrimSpace(tester.RunInteractiveShell(t, `hishtory config-get beta-mode`)))
|
require.Equal(t, "true", strings.TrimSpace(tester.RunInteractiveShell(t, `hishtory config-get beta-mode`)))
|
||||||
out = captureTerminalOutputComplex(t, tester, tester.ShellName(), 200, 50, []TmuxCommand{{Keys: "hishtory SPACE tquery ENTER"}, {Keys: "ech"}}, true)
|
out = captureTerminalOutputComplex(t, TmuxCaptureConfig{tester: tester, complexCommands: []TmuxCommand{{Keys: "hishtory SPACE tquery ENTER"}, {Keys: "ech"}}, includeEscapeSequences: true})
|
||||||
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1])
|
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1])
|
||||||
testutils.CompareGoldens(t, out, "TestTui-ColoredOutputWithSearch-BetaMode")
|
testutils.CompareGoldens(t, out, "TestTui-ColoredOutputWithSearch-BetaMode")
|
||||||
}
|
}
|
||||||
|
@ -246,15 +246,41 @@ func captureTerminalOutputWithShellName(t testing.TB, tester shellTester, overri
|
|||||||
}
|
}
|
||||||
|
|
||||||
func captureTerminalOutputWithShellNameAndDimensions(t testing.TB, tester shellTester, overriddenShellName string, width, height int, commands []TmuxCommand) string {
|
func captureTerminalOutputWithShellNameAndDimensions(t testing.TB, tester shellTester, overriddenShellName string, width, height int, commands []TmuxCommand) string {
|
||||||
return captureTerminalOutputComplex(t, tester, overriddenShellName, width, height, commands, false)
|
return captureTerminalOutputComplex(t,
|
||||||
|
TmuxCaptureConfig{
|
||||||
|
tester: tester,
|
||||||
|
overriddenShellName: overriddenShellName,
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
complexCommands: commands,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func captureTerminalOutputComplex(t testing.TB, tester shellTester, overriddenShellName string, width, height int, commands []TmuxCommand, includeEscapeSequences bool) string {
|
type TmuxCaptureConfig struct {
|
||||||
|
tester shellTester
|
||||||
|
overriddenShellName string
|
||||||
|
commands []string
|
||||||
|
complexCommands []TmuxCommand
|
||||||
|
width, height int
|
||||||
|
includeEscapeSequences bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func captureTerminalOutputComplex(t testing.TB, captureConfig TmuxCaptureConfig) string {
|
||||||
|
require.NotNil(t, captureConfig.tester)
|
||||||
|
if captureConfig.overriddenShellName == "" {
|
||||||
|
captureConfig.overriddenShellName = captureConfig.tester.ShellName()
|
||||||
|
}
|
||||||
|
if captureConfig.width == 0 {
|
||||||
|
captureConfig.width = 200
|
||||||
|
}
|
||||||
|
if captureConfig.height == 0 {
|
||||||
|
captureConfig.height = 50
|
||||||
|
}
|
||||||
sleepAmount := "0.1"
|
sleepAmount := "0.1"
|
||||||
if runtime.GOOS == "linux" {
|
if runtime.GOOS == "linux" {
|
||||||
sleepAmount = "0.2"
|
sleepAmount = "0.2"
|
||||||
}
|
}
|
||||||
if overriddenShellName == "fish" {
|
if captureConfig.overriddenShellName == "fish" {
|
||||||
// Fish is considerably slower so this is sadly necessary
|
// Fish is considerably slower so this is sadly necessary
|
||||||
sleepAmount = "0.5"
|
sleepAmount = "0.5"
|
||||||
}
|
}
|
||||||
@ -263,13 +289,20 @@ func captureTerminalOutputComplex(t testing.TB, tester shellTester, overriddenSh
|
|||||||
}
|
}
|
||||||
fullCommand := ""
|
fullCommand := ""
|
||||||
fullCommand += " tmux kill-session -t foo || true\n"
|
fullCommand += " tmux kill-session -t foo || true\n"
|
||||||
fullCommand += fmt.Sprintf(" tmux -u new-session -d -x %d -y %d -s foo %s\n", width, height, overriddenShellName)
|
fullCommand += fmt.Sprintf(" tmux -u new-session -d -x %d -y %d -s foo %s\n", captureConfig.width, captureConfig.height, captureConfig.overriddenShellName)
|
||||||
fullCommand += " sleep 1\n"
|
fullCommand += " sleep 1\n"
|
||||||
if overriddenShellName == "bash" {
|
if captureConfig.overriddenShellName == "bash" {
|
||||||
fullCommand += " tmux send -t foo SPACE source SPACE ~/.bashrc ENTER\n"
|
fullCommand += " tmux send -t foo SPACE source SPACE ~/.bashrc ENTER\n"
|
||||||
}
|
}
|
||||||
fullCommand += " sleep " + sleepAmount + "\n"
|
fullCommand += " sleep " + sleepAmount + "\n"
|
||||||
for _, cmd := range commands {
|
if len(captureConfig.commands) > 0 {
|
||||||
|
require.Empty(t, captureConfig.complexCommands)
|
||||||
|
for _, command := range captureConfig.commands {
|
||||||
|
captureConfig.complexCommands = append(captureConfig.complexCommands, TmuxCommand{Keys: command})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
require.NotEmpty(t, captureConfig.complexCommands)
|
||||||
|
for _, cmd := range captureConfig.complexCommands {
|
||||||
if cmd.Keys != "" {
|
if cmd.Keys != "" {
|
||||||
fullCommand += " tmux send -t foo -- "
|
fullCommand += " tmux send -t foo -- "
|
||||||
fullCommand += cmd.Keys
|
fullCommand += cmd.Keys
|
||||||
@ -288,13 +321,13 @@ func captureTerminalOutputComplex(t testing.TB, tester shellTester, overriddenSh
|
|||||||
fullCommand += " sleep 2.5\n"
|
fullCommand += " sleep 2.5\n"
|
||||||
}
|
}
|
||||||
fullCommand += " tmux capture-pane -t foo -p"
|
fullCommand += " tmux capture-pane -t foo -p"
|
||||||
if includeEscapeSequences {
|
if captureConfig.includeEscapeSequences {
|
||||||
fullCommand += "e"
|
fullCommand += "e"
|
||||||
}
|
}
|
||||||
fullCommand += "\n"
|
fullCommand += "\n"
|
||||||
fullCommand += " tmux kill-session -t foo\n"
|
fullCommand += " tmux kill-session -t foo\n"
|
||||||
testutils.TestLog(t, "Running tmux command: "+fullCommand)
|
testutils.TestLog(t, "Running tmux command: "+fullCommand)
|
||||||
return strings.TrimSpace(tester.RunInteractiveShell(t, fullCommand))
|
return strings.TrimSpace(captureConfig.tester.RunInteractiveShell(t, fullCommand))
|
||||||
}
|
}
|
||||||
|
|
||||||
func assertNoLeakedConnections(t testing.TB) {
|
func assertNoLeakedConnections(t testing.TB) {
|
||||||
|
Loading…
Reference in New Issue
Block a user