1package modes
2
3import (
4 "strings"
5 "testing"
6
7 "github.com/patriceckhart/zot/packages/tui"
8)
9
10func TestShellEscapeCommand(t *testing.T) {
11 cases := []struct {
12 in string
13 wantCmd string
14 wantOK bool
15 }{
16 {"!ls -la", "ls -la", true},
17 {" !pwd", "pwd", true},
18 {"! go test ./... ", "go test ./...", true},
19 {"!", "", false},
20 {"! ", "", false},
21 {"ls -la", "", false},
22 {"/help", "", false},
23 {"hello !world", "", false},
24 }
25 for _, c := range cases {
26 cmd, ok := shellEscapeCommand(c.in)
27 if ok != c.wantOK || cmd != c.wantCmd {
28 t.Errorf("shellEscapeCommand(%q) = (%q,%v); want (%q,%v)",
29 c.in, cmd, ok, c.wantCmd, c.wantOK)
30 }
31 }
32}
33
34func TestRenderShellBlockStylesFooterDimmed(t *testing.T) {
35 i := &Interactive{}
36 i.cfg.Theme = tui.Theme{Tool: 2, Error: 1, Muted: 8}
37
38 ok := i.renderShellBlock("$ echo hi\n\nhi\n\n[exit 0] Took 0.1s", false)
39 if len(ok) == 0 {
40 t.Fatal("expected non-empty block")
41 }
42 // The success body uses the Tool color; the footer uses Muted.
43 body := strings.Join(ok, "\n")
44 if !strings.Contains(body, "echo hi") || !strings.Contains(body, "[exit 0]") {
45 t.Fatalf("block missing expected content: %q", body)
46 }
47
48 fail := i.renderShellBlock("$ false\n\n[exit 1] Took 0.0s", true)
49 if len(fail) == 0 {
50 t.Fatal("expected non-empty failure block")
51 }
52}