package eval import ( "math/rand" "strings" "testing" "github.com/kami/maven/internal/phraser" "github.com/kami/maven/internal/say" ) // TestFallbackPersona scores every line in every hand-written family on the // persona checks the nudges already pass. These lines are heard out loud and // they live in a JSON file now, so a reworded variant that says "рад" or "вы" // would otherwise reach him with nothing in between. // // Only the persona checks run. Mood and topic belong to a nudge, and these are // not nudges. func TestFallbackPersona(t *testing.T) { fb, err := phraser.LoadFallbacks(rand.NewSource(20260804)) if err != nil { t.Fatalf("LoadFallbacks: %v", err) } // No CheckHisGender. It reads a feminine verb near a second-person pronoun // as addressing him as a woman, which is right for a nudge and wrong here: // "не знаю — не нашла у тебя такой записи" is her own verb in her own // sentence. CheckFeminine still holds her side of the rule. persona := map[string]bool{ CheckLang: true, CheckFeminine: true, CheckAddress: true, CheckCringe: true, CheckLength: true, } ack, err := phraser.LoadAcks(rand.NewSource(20260804)) if err != nil { t.Fatalf("LoadAcks: %v", err) } qry, err := phraser.LoadQueries(rand.NewSource(20260804)) if err != nil { t.Fatalf("LoadQueries: %v", err) } variants := append(fb.Variants(), ack.Variants()...) variants = append(variants, qry.Variants()...) act, err := phraser.LoadActs(rand.NewSource(20260804)) if err != nil { t.Fatalf("LoadActs: %v", err) } variants = append(variants, act.Variants()...) sum, err := say.LoadSummaries(rand.NewSource(20260804)) if err != nil { t.Fatalf("LoadSummaries: %v", err) } variants = append(variants, sum.Variants()...) if len(variants) == 0 { t.Fatal("no variants — the file loaded empty") } for _, v := range variants { // The placeholders stand for his own words and carry no persona. body := v for _, ph := range []string{"{sources}", "{key}", "{value}", "{fn}", "{text}", "{when}", "{items}", "{location}", "{temp}", "{condition}", "{tail}", "{out}", "{name}", "{entity}", "{count}", "{word}", "{date}", "{line}", "{n}", "{day}", "{sat}", "{sun}", "{span}", "{gloss}", "{time}"} { body = strings.ReplaceAll(body, ph, "вода") } for _, r := range RunChecks(Case{}, body, "neutral") { if persona[r.Name] && !r.Pass { t.Errorf("%q fails %s: %s", v, r.Name, r.Detail) } } } }