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
30func TestSlideBackChordHintVev(t *testing.T) {
31 for _, value := range []string{"vev", "VEV"} {
32 t.Run(value, func(t *testing.T) {
33 t.Setenv("TERM_PROGRAM", value)
34 if got, want := slideBackChordHint(), "Alt+Shift+↑"; got != want {
35 t.Errorf("Vev hint = %q; want %q", got, want)
36 }
37 })
38 }
39}
40
41// TestSlideBackChordHintDefault pins the default for every
42// non-VS-Code terminal: the snappier Option+↑ chord, which Ghostty,
43// iTerm2 (with Meta=Option), Terminal.app (with Use Option as Meta),
44// Alacritty and Kitty all deliver natively.
45func TestSlideBackChordHintDefault(t *testing.T) {
46 for _, v := range []string{"", "ghostty", "iTerm.app", "Apple_Terminal", "alacritty", "kitty"} {
47 t.Run(v, func(t *testing.T) {
48 t.Setenv("TERM_PROGRAM", v)
49 if got, want := slideBackChordHint(), "Option+↑"; got != want {
50 t.Errorf("TERM_PROGRAM=%q hint = %q; want %q", v, got, want)
51 }
52 })
53 }
54}