1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
package textutil
import (
"regexp"
"strings"
"testing"
)
func TestRenderTemplate_Basic(t *testing.T) {
out := RenderTemplate("Hello, {{name}}!", map[string]string{"name": "Hex"})
if out != "Hello, Hex!" {
t.Fatalf("render failed: %q", out)
}
// No vars
if RenderTemplate("x", nil) != "x" { t.Fatal("nil vars changed output") }
}
func TestStripCodeFences_Variants(t *testing.T) {
cases := []struct{ in, want string }{
{"```\ncode\n```", "code"},
{"```go\npackage x\n```", "package x"},
{"no fences", "no fences"},
{"\n\n```\ntrim\n```\n", "trim"},
}
for _, c := range cases {
if got := StripCodeFences(c.in); got != c.want {
t.Fatalf("strip mismatch: %q != %q", got, c.want)
}
}
}
func TestInstructionFromSelection_Markers(t *testing.T) {
inputs := []string{
";do it;\ncode",
"/* fix */\ncode",
"<!-- doc -->\ncode",
"// change\ncode",
"# tweak\ncode",
"-- op\ncode",
}
for _, in := range inputs {
instr, cleaned := InstructionFromSelection(in)
if strings.TrimSpace(instr) == "" {
t.Fatalf("no instruction for input: %q", in)
}
// cleaned should not contain the instruction token
if strings.Contains(cleaned, instr) {
// Allow coincidence only if separated differently; require not exact match on same line
first := strings.Split(in, "\n")[0]
if strings.Contains(first, instr) {
t.Fatalf("instruction not removed: %q", cleaned)
}
}
}
}
func TestFindFirstInstructionInLine_EarliestWins(t *testing.T) {
// Both markers present, earliest should win (strict tag first)
line := ";first; // later"
instr, cleaned, ok := FindFirstInstructionInLine(line)
if !ok || instr != "first" {
t.Fatalf("expected 'first', got %q ok=%v", instr, ok)
}
if strings.Contains(cleaned, instr) {
t.Fatalf("expected cleaned line to remove instr: %q", cleaned)
}
}
func TestFindStrictInlineTag(t *testing.T) {
if txt, l, r, ok := FindStrictInlineTag("pre;do;post"); !ok || txt != "do" || l != 3 || r != 7 {
t.Fatalf("strict tag parse failed: %q %d %d %v", txt, l, r, ok)
}
if _, _, _, ok := FindStrictInlineTag("; spaced ;"); ok {
t.Fatalf("should reject spaced strict tag")
}
}
// optional: ensure no ANSI codes appear in plain helpers
func TestNoANSIInHelpers(t *testing.T) {
ansi := regexp.MustCompile(`\x1b\[[0-9;]*m`)
if ansi.MatchString(RenderTemplate("x", nil)) {
t.Fatalf("unexpected ansi in RenderTemplate")
}
if ansi.MatchString(StripCodeFences("x")) {
t.Fatalf("unexpected ansi in StripCodeFences")
}
}
|