1package modes
2
3import "testing"
4
5// TestSlideBackChordHintVSCode pins the VS Code branch: when the
6// process is running under VS Code's integrated terminal the hint
7// must direct the user to Option+Shift+↑, because plain Option+↑
8// gets swallowed by xterm.js's default macOS key handling.
9func TestSlideBackChordHintVSCode(t *testing.T) {
10 t.Setenv("TERM_PROGRAM", "vscode")
11 if got, want := slideBackChordHint(), "Option+Shift+↑"; got != want {
12 t.Errorf("VS Code hint = %q; want %q", got, want)
13 }
14}
15
16// TestSlideBackChordHintVSCodeCaseInsensitive guards against a
17// future VS Code change that capitalises the env-var value
18// ("VSCode" / "VSCODE"). EqualFold keeps the detection robust.
19func TestSlideBackChordHintVSCodeCaseInsensitive(t *testing.T) {
20 for _, v := range []string{"VSCode", "VSCODE", "VsCode"} {
21 t.Run(v, func(t *testing.T) {
22 t.Setenv("TERM_PROGRAM", v)
23 if got, want := slideBackChordHint(), "Option+Shift+↑"; got != want {
24 t.Errorf("TERM_PROGRAM=%q hint = %q; want %q", v, got, want)
25 }
26 })
27 }
28}
29
30// TestSlideBackChordHintDefault pins the default for every
31// non-VS-Code terminal: the snappier Option+↑ chord, which Ghostty,
32// iTerm2 (with Meta=Option), Terminal.app (with Use Option as Meta),
33// Alacritty and Kitty all deliver natively.
34func TestSlideBackChordHintDefault(t *testing.T) {
35 for _, v := range []string{"", "ghostty", "iTerm.app", "Apple_Terminal", "alacritty", "kitty"} {
36 t.Run(v, func(t *testing.T) {
37 t.Setenv("TERM_PROGRAM", v)
38 if got, want := slideBackChordHint(), "Option+↑"; got != want {
39 t.Errorf("TERM_PROGRAM=%q hint = %q; want %q", v, got, want)
40 }
41 })
42 }
43}