From b482a6d6ecd618242e78b783943fd559bdb42937 Mon Sep 17 00:00:00 2001 From: David Dworken Date: Sun, 24 Sep 2023 17:03:54 -0700 Subject: [PATCH] Add very basic TUI test that also tests how the TUI uses escape sequences for colors --- client/client_test.go | 21 ++++++++++++++++++--- client/testutils.go | 10 +++++++++- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/client/client_test.go b/client/client_test.go index 70e7285..dd02631 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -111,6 +111,7 @@ func TestParam(t *testing.T) { runTestsWithRetries(t, "testTui/scroll", testTui_scroll) runTestsWithRetries(t, "testTui/resize", testTui_resize) runTestsWithRetries(t, "testTui/delete", testTui_delete) + runTestsWithRetries(t, "testTui/color", testTui_color) // Assert there are no leaked connections assertNoLeakedConnections(t) @@ -1604,9 +1605,6 @@ func testTui_resize(t testing.TB) { }) out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) testutils.CompareGoldens(t, out, "TestTui-LongQuery") - - // Assert there are no leaked connections - // assertNoLeakedConnections(t) } func testTui_scroll(t testing.TB) { @@ -1646,6 +1644,23 @@ func testTui_scroll(t testing.TB) { } +func testTui_color(t testing.TB) { + // Setup + defer testutils.BackupAndRestore(t)() + tester, _, _ := setupTestTui(t) + + // 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. + out := captureTerminalOutputComplex(t, tester, tester.ShellName(), 200, 50, []TmuxCommand{{Keys: "hishtory SPACE tquery ENTER"}}, true) + out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) + testutils.CompareGoldens(t, out, "TestTui-ColoredOutput") + + // 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 = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) + testutils.CompareGoldens(t, out, "TestTui-ColoredOutputWithSearch") +} + func testTui_delete(t testing.TB) { // Setup defer testutils.BackupAndRestore(t)() diff --git a/client/testutils.go b/client/testutils.go index 60e7619..bda92b3 100644 --- a/client/testutils.go +++ b/client/testutils.go @@ -246,6 +246,10 @@ func captureTerminalOutputWithShellName(t testing.TB, tester shellTester, overri } func captureTerminalOutputWithShellNameAndDimensions(t testing.TB, tester shellTester, overriddenShellName string, width, height int, commands []TmuxCommand) string { + return captureTerminalOutputComplex(t, tester, overriddenShellName, width, height, commands, false) +} + +func captureTerminalOutputComplex(t testing.TB, tester shellTester, overriddenShellName string, width, height int, commands []TmuxCommand, includeEscapeSequences bool) string { sleepAmount := "0.1" if runtime.GOOS == "linux" { sleepAmount = "0.2" @@ -283,7 +287,11 @@ func captureTerminalOutputWithShellNameAndDimensions(t testing.TB, tester shellT if testutils.IsGithubAction() { fullCommand += " sleep 2.5\n" } - fullCommand += " tmux capture-pane -t foo -p\n" + fullCommand += " tmux capture-pane -t foo -p" + if includeEscapeSequences { + fullCommand += "e" + } + fullCommand += "\n" fullCommand += " tmux kill-session -t foo\n" testutils.TestLog(t, "Running tmux command: "+fullCommand) return strings.TrimSpace(tester.RunInteractiveShell(t, fullCommand))