Clean up tests to make panics not happen for TUI test failures by moving repeated code line to a function at also adds a require

This commit is contained in:
David Dworken 2023-11-12 00:40:24 -08:00
parent 3df099c945
commit c4b60eb6b2
2 changed files with 33 additions and 40 deletions

View File

@ -1641,8 +1641,7 @@ func testTui_resize(t *testing.T) {
out := captureTerminalOutputWithShellNameAndDimensions(t, tester, tester.ShellName(), 100, 20, []TmuxCommand{ out := captureTerminalOutputWithShellNameAndDimensions(t, tester, tester.ShellName(), 100, 20, []TmuxCommand{
{Keys: "hishtory SPACE tquery ENTER"}, {Keys: "hishtory SPACE tquery ENTER"},
}) })
require.Contains(t, out, "hishtory tquery") out = stripTuiCommandPrefix(t, out)
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1])
testutils.CompareGoldens(t, out, "TestTui-SmallTerminal") testutils.CompareGoldens(t, out, "TestTui-SmallTerminal")
// Check that it resizes after the terminal size is adjusted // Check that it resizes after the terminal size is adjusted
@ -1651,8 +1650,7 @@ func testTui_resize(t *testing.T) {
{Keys: "hishtory SPACE tquery ENTER"}, {Keys: "hishtory SPACE tquery ENTER"},
{ResizeX: 300, ResizeY: 100}, {ResizeX: 300, ResizeY: 100},
}) })
require.Contains(t, out, "hishtory tquery") out = stripTuiCommandPrefix(t, out)
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1])
testutils.CompareGoldens(t, out, "TestTui-Resize") testutils.CompareGoldens(t, out, "TestTui-Resize")
// Check that the cursor position is maintained after it is resized // Check that the cursor position is maintained after it is resized
@ -1669,8 +1667,7 @@ func testTui_resize(t *testing.T) {
{Keys: "hishtory SPACE tquery ENTER"}, {Keys: "hishtory SPACE tquery ENTER"},
{Keys: "1234567890qwertyuip1234567890qwertyuip1234567890qwertyuip1234567890qwertyuip1234567890qwertyuip"}, {Keys: "1234567890qwertyuip1234567890qwertyuip1234567890qwertyuip1234567890qwertyuip1234567890qwertyuip"},
}) })
require.Contains(t, out, "hishtory tquery") out = stripTuiCommandPrefix(t, out)
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1])
testutils.CompareGoldens(t, out, "TestTui-LongQuery") testutils.CompareGoldens(t, out, "TestTui-LongQuery")
} }
@ -1686,7 +1683,7 @@ func testTui_scroll(t *testing.T) {
"Left", "Left",
"l", "l",
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-LeftScroll") testutils.CompareGoldens(t, out, "TestTui-LeftScroll")
// Test horizontal scrolling by one to the right // Test horizontal scrolling by one to the right
@ -1697,7 +1694,7 @@ func testTui_scroll(t *testing.T) {
"hishtory SPACE tquery ENTER", "hishtory SPACE tquery ENTER",
"S-Left S-Right S-Right S-Left", "S-Left S-Right S-Right S-Left",
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-RightScroll") testutils.CompareGoldens(t, out, "TestTui-RightScroll")
// Test horizontal scrolling by two // Test horizontal scrolling by two
@ -1705,7 +1702,7 @@ func testTui_scroll(t *testing.T) {
"hishtory SPACE tquery ENTER", "hishtory SPACE tquery ENTER",
"S-Right S-Right", "S-Right S-Right",
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-RightScrollTwo") testutils.CompareGoldens(t, out, "TestTui-RightScrollTwo")
// Assert there are no leaked connections // Assert there are no leaked connections
@ -1727,19 +1724,19 @@ func testTui_color(t *testing.T) {
// 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, TmuxCaptureConfig{tester: tester, complexCommands: []TmuxCommand{{Keys: "hishtory SPACE tquery ENTER"}}, includeEscapeSequences: 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 = stripTuiCommandPrefix(t, out)
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, TmuxCaptureConfig{tester: tester, complexCommands: []TmuxCommand{{Keys: "hishtory SPACE tquery ENTER"}, {Keys: "ech"}}, includeEscapeSequences: 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 = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-ColoredOutputWithSearch") testutils.CompareGoldens(t, out, "TestTui-ColoredOutputWithSearch")
// And one more time with highlight-matches // And one more time with highlight-matches
tester.RunInteractiveShell(t, ` hishtory config-set highlight-matches true`) tester.RunInteractiveShell(t, ` hishtory config-set highlight-matches true`)
require.Equal(t, "true", strings.TrimSpace(tester.RunInteractiveShell(t, `hishtory config-get highlight-matches`))) require.Equal(t, "true", strings.TrimSpace(tester.RunInteractiveShell(t, `hishtory config-get highlight-matches`)))
out = captureTerminalOutputComplex(t, TmuxCaptureConfig{tester: tester, complexCommands: []TmuxCommand{{Keys: "hishtory SPACE tquery ENTER"}, {Keys: "ech"}}, includeEscapeSequences: 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 = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-ColoredOutputWithSearch-BetaMode") testutils.CompareGoldens(t, out, "TestTui-ColoredOutputWithSearch-BetaMode")
} }
@ -1756,14 +1753,14 @@ func testTui_delete(t *testing.T) {
{Keys: "aaaaaa", ExtraDelay: 1.0}, {Keys: "aaaaaa", ExtraDelay: 1.0},
{Keys: "C-K"}, {Keys: "C-K"},
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-Delete") testutils.CompareGoldens(t, out, "TestTui-Delete")
// And that it stays deleted // And that it stays deleted
out = captureTerminalOutput(t, tester, []string{ out = captureTerminalOutput(t, tester, []string{
"hishtory SPACE tquery ENTER", "hishtory SPACE tquery ENTER",
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-DeleteStill") testutils.CompareGoldens(t, out, "TestTui-DeleteStill")
// And that we can then delete another entry // And that we can then delete another entry
@ -1771,14 +1768,14 @@ func testTui_delete(t *testing.T) {
"hishtory SPACE tquery ENTER", "hishtory SPACE tquery ENTER",
"C-K", "C-K",
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-DeleteAgain") testutils.CompareGoldens(t, out, "TestTui-DeleteAgain")
// And that it stays deleted // And that it stays deleted
out = captureTerminalOutputWithComplexCommands(t, tester, []TmuxCommand{ out = captureTerminalOutputWithComplexCommands(t, tester, []TmuxCommand{
{Keys: "hishtory SPACE tquery ENTER", ExtraDelay: 1.5}, {Keys: "hishtory SPACE tquery ENTER", ExtraDelay: 1.5},
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-DeleteAgainStill") testutils.CompareGoldens(t, out, "TestTui-DeleteAgainStill")
// Assert there are no leaked connections // Assert there are no leaked connections
@ -1802,7 +1799,7 @@ func testTui_search(t *testing.T, onlineStatus OnlineStatus) {
"hishtory SPACE tquery ENTER", "hishtory SPACE tquery ENTER",
"ls", "ls",
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-Search") testutils.CompareGoldens(t, out, "TestTui-Search")
// Check the output when there is a selected result // Check the output when there is a selected result
@ -1812,7 +1809,7 @@ func testTui_search(t *testing.T, onlineStatus OnlineStatus) {
{Keys: "ls", ExtraDelay: 2.0}, {Keys: "ls", ExtraDelay: 2.0},
{Keys: "ENTER"}, {Keys: "ENTER"},
}) })
out = strings.Split(strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]), "\n")[0] out = strings.Split(stripTuiCommandPrefix(t, out), "\n")[0]
expected = `ls ~/` expected = `ls ~/`
if diff := cmp.Diff(expected, out); diff != "" { if diff := cmp.Diff(expected, out); diff != "" {
t.Fatalf("hishtory tquery selection mismatch (-expected +got):\n%s", diff) t.Fatalf("hishtory tquery selection mismatch (-expected +got):\n%s", diff)
@ -1824,7 +1821,7 @@ func testTui_search(t *testing.T, onlineStatus OnlineStatus) {
{Keys: "hishtory SPACE tquery SPACE foo: ENTER", ExtraDelay: 1.5}, {Keys: "hishtory SPACE tquery SPACE foo: ENTER", ExtraDelay: 1.5},
{Keys: "ls", ExtraDelay: 1.0}, {Keys: "ls", ExtraDelay: 1.0},
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-InitialInvalidSearch") testutils.CompareGoldens(t, out, "TestTui-InitialInvalidSearch")
// Check the output when the search is invalid // Check the output when the search is invalid
@ -1834,7 +1831,7 @@ func testTui_search(t *testing.T, onlineStatus OnlineStatus) {
{Keys: "ls", ExtraDelay: 1.5}, {Keys: "ls", ExtraDelay: 1.5},
{Keys: ":"}, {Keys: ":"},
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-InvalidSearch") testutils.CompareGoldens(t, out, "TestTui-InvalidSearch")
// Check the output when the search is invalid and then edited to become valid // Check the output when the search is invalid and then edited to become valid
@ -1842,7 +1839,7 @@ func testTui_search(t *testing.T, onlineStatus OnlineStatus) {
"hishtory SPACE tquery ENTER", "hishtory SPACE tquery ENTER",
"ls: BSpace", "ls: BSpace",
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-InvalidSearchBecomesValid") testutils.CompareGoldens(t, out, "TestTui-InvalidSearchBecomesValid")
} }
@ -1853,10 +1850,7 @@ func testTui_general(t *testing.T, onlineStatus OnlineStatus) {
// Check the initial output when there is no search // Check the initial output when there is no search
out := captureTerminalOutput(t, tester, []string{"hishtory SPACE tquery ENTER"}) out := captureTerminalOutput(t, tester, []string{"hishtory SPACE tquery ENTER"})
if len(strings.Split(out, "hishtory tquery")) != 2 { out = stripTuiCommandPrefix(t, out)
t.Fatalf("failed to split out=%#v", out)
}
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1])
testutils.CompareGoldens(t, out, "TestTui-Initial") testutils.CompareGoldens(t, out, "TestTui-Initial")
// Check that we can exit the TUI via pressing esc // Check that we can exit the TUI via pressing esc
@ -1874,7 +1868,7 @@ func testTui_general(t *testing.T, onlineStatus OnlineStatus) {
"hishtory SPACE tquery ENTER", "hishtory SPACE tquery ENTER",
"C-h", "C-h",
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-HelpPage") testutils.CompareGoldens(t, out, "TestTui-HelpPage")
// Test closing the help page // Test closing the help page
@ -1882,7 +1876,7 @@ func testTui_general(t *testing.T, onlineStatus OnlineStatus) {
"hishtory SPACE tquery ENTER", "hishtory SPACE tquery ENTER",
"C-h C-h", "C-h C-h",
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-HelpPageClosed") testutils.CompareGoldens(t, out, "TestTui-HelpPageClosed")
// Test selecting and cd-ing // Test selecting and cd-ing
@ -1890,7 +1884,7 @@ func testTui_general(t *testing.T, onlineStatus OnlineStatus) {
"hishtory SPACE tquery ENTER", "hishtory SPACE tquery ENTER",
"C-x", "C-x",
}) })
out = strings.Split(strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]), "\n")[0] out = strings.Split(stripTuiCommandPrefix(t, out), "\n")[0]
testutils.CompareGoldens(t, out, "TestTui-SelectAndCd") testutils.CompareGoldens(t, out, "TestTui-SelectAndCd")
// Test the User column // Test the User column
@ -1898,7 +1892,7 @@ func testTui_general(t *testing.T, onlineStatus OnlineStatus) {
out = captureTerminalOutput(t, tester, []string{ out = captureTerminalOutput(t, tester, []string{
"hishtory SPACE tquery ENTER", "hishtory SPACE tquery ENTER",
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
require.Contains(t, out, " User") require.Contains(t, out, " User")
require.Contains(t, out, " david ") require.Contains(t, out, " david ")
@ -1915,20 +1909,14 @@ func testTui_errors(t *testing.T) {
os.Setenv("HISHTORY_SIMULATE_NETWORK_ERROR", "1") os.Setenv("HISHTORY_SIMULATE_NETWORK_ERROR", "1")
out := captureTerminalOutput(t, tester, []string{"hishtory SPACE tquery ENTER"}) out := captureTerminalOutput(t, tester, []string{"hishtory SPACE tquery ENTER"})
os.Setenv("HISHTORY_SIMULATE_NETWORK_ERROR", "") os.Setenv("HISHTORY_SIMULATE_NETWORK_ERROR", "")
if len(strings.Split(out, "hishtory tquery")) != 2 { out = stripTuiCommandPrefix(t, out)
t.Fatalf("failed to split out=%#v", out)
}
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1])
testutils.CompareGoldens(t, out, "TestTui-Offline") testutils.CompareGoldens(t, out, "TestTui-Offline")
// Check the output when the device is offline AND there is an invalid search // Check the output when the device is offline AND there is an invalid search
os.Setenv("HISHTORY_SIMULATE_NETWORK_ERROR", "1") os.Setenv("HISHTORY_SIMULATE_NETWORK_ERROR", "1")
out = captureTerminalOutput(t, tester, []string{"hishtory SPACE tquery ENTER", "ls:"}) out = captureTerminalOutput(t, tester, []string{"hishtory SPACE tquery ENTER", "ls:"})
os.Setenv("HISHTORY_SIMULATE_NETWORK_ERROR", "") os.Setenv("HISHTORY_SIMULATE_NETWORK_ERROR", "")
if len(strings.Split(out, "hishtory tquery")) != 2 { out = stripTuiCommandPrefix(t, out)
t.Fatalf("failed to split out=%#v", out)
}
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1])
testutils.CompareGoldens(t, out, "TestTui-OfflineInvalid") testutils.CompareGoldens(t, out, "TestTui-OfflineInvalid")
} }
@ -1948,7 +1936,7 @@ func testTui_ai(t *testing.T) {
"hishtory SPACE tquery ENTER", "hishtory SPACE tquery ENTER",
"?myQuery", "?myQuery",
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
testutils.CompareGoldens(t, out, "TestTui-AiQuery") testutils.CompareGoldens(t, out, "TestTui-AiQuery")
} }
@ -2331,7 +2319,7 @@ func TestSortByConsistentTimezone(t *testing.T) {
out = tester.RunInteractiveShell(t, `hishtory export -pipefail -tablesizing`) out = tester.RunInteractiveShell(t, `hishtory export -pipefail -tablesizing`)
testutils.CompareGoldens(t, out, "TestSortByConsistentTimezone-export") testutils.CompareGoldens(t, out, "TestSortByConsistentTimezone-export")
out = captureTerminalOutput(t, tester, []string{"hishtory SPACE tquery SPACE -pipefail SPACE -tablesizing ENTER"}) out = captureTerminalOutput(t, tester, []string{"hishtory SPACE tquery SPACE -pipefail SPACE -tablesizing ENTER"})
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
require.Regexp(t, regexp.MustCompile(`Timestamp[\s\S]*Command[\s\S]*Apr 16 2022 01:36:26 PDT[\s\S]*third_entry[\s\S]*Apr 16 2022 01:19:46 PDT[\s\S]*second_entry[\s\S]*Apr 16 2022 01:03:06 PDT[\s\S]*first_entry`), out) require.Regexp(t, regexp.MustCompile(`Timestamp[\s\S]*Command[\s\S]*Apr 16 2022 01:36:26 PDT[\s\S]*third_entry[\s\S]*Apr 16 2022 01:19:46 PDT[\s\S]*second_entry[\s\S]*Apr 16 2022 01:03:06 PDT[\s\S]*first_entry`), out)
} }
@ -2404,7 +2392,7 @@ echo foo`)
{Keys: "Down Down"}, {Keys: "Down Down"},
{Keys: "ENTER", ExtraDelay: 1.0}, {Keys: "ENTER", ExtraDelay: 1.0},
}) })
out = strings.TrimSpace(strings.Split(out, "hishtory tquery")[1]) out = stripTuiCommandPrefix(t, out)
out = strings.Split(out, "\n")[1] out = strings.Split(out, "\n")[1]
testutils.CompareGoldens(t, out, "testRemoveDuplicateRows-enabled-tquery-select") testutils.CompareGoldens(t, out, "testRemoveDuplicateRows-enabled-tquery-select")
} }

View File

@ -354,3 +354,8 @@ func stripShellPrefix(out string) string {
} }
return out return out
} }
func stripTuiCommandPrefix(t *testing.T, out string) string {
require.Contains(t, out, "hishtory tquery")
return strings.TrimSpace(strings.Split(out, "hishtory tquery")[1])
}