Files

66 lines
2.2 KiB
Go

package main
import "testing"
func TestValidateScript_DecisionOK(t *testing.T) {
lines := []scriptLine{
{Speaker: "旁白", Text: "夜深了,城里静悄悄的。"},
{Speaker: "小军师", Text: "城门关得紧紧的。"},
{Speaker: "小军师", Text: "我们怎么才能悄悄进城呢?", Emotion: "think"},
}
if err := validateScript(lines, true, "小军师"); err != nil {
t.Fatalf("合法决策剧本应通过: %v", err)
}
}
func TestValidateScript_FinalOK(t *testing.T) {
lines := []scriptLine{
{Speaker: "旁白", Text: "天亮了,城门缓缓打开。"},
{Speaker: "小军师", Text: "我们成功了,真是太好了!"},
{Speaker: "小军师", Text: "我们一起进城啦!", Emotion: "happy"},
}
if err := validateScript(lines, false, "小军师"); err != nil {
t.Fatalf("合法终局剧本应通过: %v", err)
}
}
func TestValidateScript_TooFewLines(t *testing.T) {
lines := []scriptLine{{Speaker: "旁白", Text: "夜深了,城里静悄悄的。"}}
if err := validateScript(lines, true, "小军师"); err == nil {
t.Fatal("不足 3 句应报错")
}
}
func TestValidateScript_MissingQuestion(t *testing.T) {
lines := []scriptLine{
{Speaker: "旁白", Text: "夜深了,城里静悄悄的。"},
{Speaker: "小军师", Text: "城门关得紧紧的。"},
{Speaker: "小军师", Text: "我们悄悄等天亮吧。"},
}
if err := validateScript(lines, true, "小军师"); err == nil {
t.Fatal("决策节点末句未提问应报错")
}
}
func TestValidateScript_BadSpeaker(t *testing.T) {
lines := []scriptLine{
{Speaker: "旁白", Text: "夜深了,城里静悄悄的。"},
{Speaker: "路人甲", Text: "城门关得紧紧的。"},
{Speaker: "小军师", Text: "我们怎么才能悄悄进城呢?"},
}
if err := validateScript(lines, true, "小军师"); err == nil {
t.Fatal("非法 speaker 应报错")
}
}
func TestValidateScript_BadLength(t *testing.T) {
lines := []scriptLine{
{Speaker: "旁白", Text: "夜深了。"},
{Speaker: "小军师", Text: "城门关得紧紧的。"},
{Speaker: "小军师", Text: "我们怎么才能悄悄进城呢?"},
}
if err := validateScript(lines, true, "小军师"); err == nil {
t.Fatal("台词不足 8 字应报错")
}
}