add tests (ai gen)
This commit is contained in:
+107
@@ -0,0 +1,107 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// tests hint extraction from text
|
||||
func TestExtractHints(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
content string
|
||||
expected []string
|
||||
}{
|
||||
{
|
||||
name: "single bold hint",
|
||||
content: "This is a **hint**.",
|
||||
expected: []string{"hint"},
|
||||
},
|
||||
{
|
||||
name: "multiple bold hints",
|
||||
content: "**one** and **two**",
|
||||
expected: []string{"one", "two"},
|
||||
},
|
||||
{
|
||||
name: "underscore hints",
|
||||
content: "__one__ and __two__",
|
||||
expected: []string{"one", "two"},
|
||||
},
|
||||
{
|
||||
name: "mixed hints",
|
||||
content: "**one** and __two__",
|
||||
expected: []string{"one", "two"},
|
||||
},
|
||||
{
|
||||
name: "no hints",
|
||||
content: "just plain text",
|
||||
expected: []string{},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := extractHints(tt.content)
|
||||
if !reflect.DeepEqual(got, tt.expected) {
|
||||
t.Errorf("extractHints() = %v, want %v", got, tt.expected)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// tests section parsing from markdown
|
||||
func TestParseSections(t *testing.T) {
|
||||
content := []byte(`# Title 1
|
||||
Content 1 with **hint1**.
|
||||
|
||||
# Title 2
|
||||
Content 2 with __hint2__.
|
||||
`)
|
||||
|
||||
sections := parseSections(content)
|
||||
|
||||
if len(sections) != 2 {
|
||||
t.Fatalf("expected 2 sections, got %d", len(sections))
|
||||
}
|
||||
|
||||
// verify first section
|
||||
if sections[0].Title != "# Title 1" {
|
||||
t.Errorf("expected title '# Title 1', got '%s'", sections[0].Title)
|
||||
}
|
||||
if sections[0].Content != "Content 1 with **hint1**." {
|
||||
t.Errorf("expected content match for section 1, got '%s'", sections[0].Content)
|
||||
}
|
||||
if len(sections[0].Hints) != 1 || sections[0].Hints[0] != "hint1" {
|
||||
t.Error("failed to extract hint from section 1")
|
||||
}
|
||||
|
||||
// verify second section
|
||||
if sections[1].Title != "# Title 2" {
|
||||
t.Errorf("expected title '# Title 2', got '%s'", sections[1].Title)
|
||||
}
|
||||
if sections[1].Content != "Content 2 with __hint2__." {
|
||||
t.Errorf("expected content match for section 2, got '%s'", sections[1].Content)
|
||||
}
|
||||
if len(sections[1].Hints) != 1 || sections[1].Hints[0] != "hint2" {
|
||||
t.Error("failed to extract hint from section 2")
|
||||
}
|
||||
}
|
||||
|
||||
// tests parsing with no headers
|
||||
func TestParseSectionsNoHeaders(t *testing.T) {
|
||||
content := []byte(`Just some content without any headers.
|
||||
It has **one hint**.`)
|
||||
|
||||
sections := parseSections(content)
|
||||
|
||||
if len(sections) != 1 {
|
||||
t.Fatalf("expected 1 section, got %d", len(sections))
|
||||
}
|
||||
|
||||
if sections[0].Title != "no title" {
|
||||
t.Errorf("expected 'no title', got '%s'", sections[0].Title)
|
||||
}
|
||||
if len(sections[0].Hints) != 1 || sections[0].Hints[0] != "one hint" {
|
||||
t.Error("failed to extract hint")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user