package eino import "testing" func TestParsePrefs(t *testing.T) { got := parsePrefs("```json\n[{\"key\":\"称呼\",\"value\":\"Dexter\"},{\"key\":\"语言\",\"value\":\"中文\"},{\"key\":\"\",\"value\":\"空\"}]\n```") if len(got) != 2 { t.Fatalf("应解析出 2 条(过滤空 key),got %d: %v", len(got), got) } if got[0].Key != "称呼" || got[0].Value != "Dexter" { t.Errorf("解析错: %v", got[0]) } if parsePrefs("不是 JSON") != nil { t.Error("非 JSON 应返回 nil") } } func TestParseProfile(t *testing.T) { m := parseProfile("- 称呼:Dexter\n- 语言: 中文\n\n- 职业:律师") if m["称呼"] != "Dexter" || m["语言"] != "中文" || m["职业"] != "律师" { t.Errorf("画像解析错: %v", m) } if len(parseProfile("")) != 0 { t.Error("空画像应得空 map") } } func TestFilterNewPrefs(t *testing.T) { existing := map[string]string{"称呼": "Dexter", "语言": "中文"} in := []Pref{ {"称呼", "Dexter"}, // 已有且相同 → 跳 {"语言", "英文"}, // 已有但变了 → 留 {"职业", "律师"}, // 新 → 留 {"职业", "工程师"}, // 同批重复 key → 跳(保留首个) } got := filterNewPrefs(in, existing) if len(got) != 2 { t.Fatalf("应剩 2 条(语言变更 + 新职业),got %d: %v", len(got), got) } if got[0].Key != "语言" || got[0].Value != "英文" || got[1].Key != "职业" || got[1].Value != "律师" { t.Errorf("过滤结果不符: %v", got) } }