Add very basic TUI test that also tests how the TUI uses escape sequences for colors

This commit is contained in:
David Dworken 2023-09-24 17:03:54 -07:00
parent 354f2872d6
commit b3fa5c9a6b
No known key found for this signature in database
4 changed files with 81 additions and 4 deletions

View File

@ -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)()

View File

@ -0,0 +1,27 @@
Search Query: > ls
┌────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 Hostname CWD Timestamp Runtime Exit Code Command │
│────────────────────────────────────────────────────────────────────────────────────────────────────────│
 localhost /tmp/ Oct 17 2022 21:43:21 PDT 3s 2 echo 'aaaaaa bbbb' │
 localhost /tmp/ Oct 17 2022 21:43:16 PDT 3s 2 ls ~/ │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
└────────────────────────────────────────────────────────────────────────────────────────────────────────┘
hiSHtory: Search your shell history  • ctrl+h help

View File

@ -0,0 +1,27 @@
Search Query: > ech 
┌────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 Hostname CWD Timestamp Runtime Exit Code Command │
│────────────────────────────────────────────────────────────────────────────────────────────────────────│
 localhost /tmp/ Oct 17 2022 21:43:21 PDT 3s 2 echo 'aaaaaa bbbb' │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
 │
└────────────────────────────────────────────────────────────────────────────────────────────────────────┘
hiSHtory: Search your shell history  • ctrl+h help

View File

@ -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))