thread-master/backend/internal/library/style8d/text_input_test.go

74 lines
2.5 KiB
Go
Raw Normal View History

package style8d
import "testing"
func TestNormalizeReferenceTextsFromArray(t *testing.T) {
texts, err := NormalizeReferenceTexts([]string{"第一段參考文字內容超過二十個字元", "第二段參考文字內容也超過二十個字元"}, "")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if len(texts) != 2 {
t.Fatalf("texts=%v", texts)
}
}
func TestNormalizeReferenceTextsFromRawText(t *testing.T) {
raw := "第一段參考文字內容超過二十個字元\n還有第二行\n\n---\n\n第二段參考文字內容也超過二十個字元"
texts, err := NormalizeReferenceTexts(nil, raw)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if len(texts) != 2 {
t.Fatalf("texts=%v", texts)
}
}
func TestBuildUserPromptFromTexts(t *testing.T) {
got := BuildUserPromptFromTexts("我的舊文", "產品教學帳", TextsToPosts([]string{"這是一段超過二十個字的參考文字樣本內容"}))
if got == "" {
t.Fatal("empty prompt")
}
if !containsAll(got, "我的舊文", "產品教學帳", "[1]") {
t.Fatalf("prompt=%q", got)
}
}
func TestBuildStoredProfileFromTexts(t *testing.T) {
out, err := ParseLLMOutput(`{"d1Tone":{"summary":"口語","evidence":[]},"d2Structure":{"summary":"短句","evidence":[]},"d3Interaction":{"summary":"提問","evidence":[]},"d4Topics":{"summary":"生活","evidence":[]},"d5Rhythm":{"summary":"晚間","evidence":[]},"d6Visual":{"summary":"emoji","evidence":[]},"d7Conversion":{"summary":"留言","evidence":[]},"d8Risk":{"summary":"硬銷","evidence":[]},"personaDraft":{"identity":"觀察者","tone":"輕鬆","audience":"上班族","hooks":"痛點","examples":"有時候真的會累","avoid":"硬銷"}}`)
if err != nil {
t.Fatalf("parse: %v", err)
}
profile := BuildStoredProfileFromTexts("手動貼文", TextsToPosts([]string{"sample text long enough"}), out)
if profile.SourceType != SourceTypeManual {
t.Fatalf("sourceType=%q", profile.SourceType)
}
if profile.Engagement.Verdict != "not_applicable" {
t.Fatalf("verdict=%q", profile.Engagement.Verdict)
}
if ManualStyleBenchmark("手動貼文") != "manual:手動貼文" {
t.Fatal("manual benchmark mismatch")
}
}
func containsAll(s string, parts ...string) bool {
for _, part := range parts {
if !contains(s, part) {
return false
}
}
return true
}
func contains(s, sub string) bool {
return len(sub) == 0 || (len(s) >= len(sub) && indexOf(s, sub) >= 0)
}
func indexOf(s, sub string) int {
for i := 0; i+len(sub) <= len(s); i++ {
if s[i:i+len(sub)] == sub {
return i
}
}
return -1
}