diff --git a/loader.go b/loader.go index b6f0f29..f1fbe06 100644 --- a/loader.go +++ b/loader.go @@ -132,9 +132,6 @@ func flattenWithGrammar(prefix string, data map[string]any, out map[string]Messa if gerund, ok := v["gerund"].(string); ok { forms.Gerund = gerund } - if forms.Past == "" || forms.Gerund == "" { - continue - } grammar.Verbs[core.Lower(verbName)] = forms continue } diff --git a/loader_test.go b/loader_test.go index be4a570..b51fdfe 100644 --- a/loader_test.go +++ b/loader_test.go @@ -208,11 +208,15 @@ func TestFlattenWithGrammar(t *testing.T) { if _, ok := grammar.Verbs["publish_draft"]; ok { t.Error("verb should be stored under explicit base, not JSON key") } - if _, ok := grammar.Verbs["partial_past"]; ok { - t.Error("incomplete verb entry with only past should be skipped") + if v, ok := grammar.Verbs["partial_past"]; !ok { + t.Error("incomplete verb entry with only past should be extracted") + } else if v.Past != "partialed" || v.Gerund != "" { + t.Errorf("partial_past forms = %+v, want Past only", v) } - if _, ok := grammar.Verbs["partial_gerund"]; ok { - t.Error("incomplete verb entry with only gerund should be skipped") + if v, ok := grammar.Verbs["partial_gerund"]; !ok { + t.Error("incomplete verb entry with only gerund should be extracted") + } else if v.Past != "" || v.Gerund != "partialing" { + t.Errorf("partial_gerund forms = %+v, want Gerund only", v) } if _, ok := messages["gram.verb.partial_past"]; ok { t.Error("gram.verb.partial_past should not be flattened into messages") diff --git a/service_test.go b/service_test.go index 94f915b..e99f960 100644 --- a/service_test.go +++ b/service_test.go @@ -348,6 +348,48 @@ func TestServiceSubjectCountPlurals(t *testing.T) { } } +func TestServiceLoadJSONPartialVerbForms(t *testing.T) { + svc, err := New() + if err != nil { + t.Fatalf("New() failed: %v", err) + } + + const lang = "zz" + prevDefault := Default() + prevGrammar := GetGrammarData(lang) + SetDefault(svc) + t.Cleanup(func() { + SetDefault(prevDefault) + SetGrammarData(lang, prevGrammar) + }) + + svc.currentLang = lang + + if err := svc.loadJSON(lang, []byte(`{ + "gram": { + "verb": { + "render": { "past": "rendered" }, + "stream": { "gerund": "streaming" } + } + } + }`)); err != nil { + t.Fatalf("loadJSON() failed: %v", err) + } + + if v, ok := GetGrammarData(lang).Verbs["render"]; !ok || v.Past != "rendered" || v.Gerund != "" { + t.Fatalf("partial past verb not loaded correctly: %+v", v) + } + if v, ok := GetGrammarData(lang).Verbs["stream"]; !ok || v.Past != "" || v.Gerund != "streaming" { + t.Fatalf("partial gerund verb not loaded correctly: %+v", v) + } + if got := PastTense("render"); got != "rendered" { + t.Fatalf("PastTense(render) = %q, want %q", got, "rendered") + } + if got := Gerund("stream"); got != "streaming" { + t.Fatalf("Gerund(stream) = %q, want %q", got, "streaming") + } +} + func TestServiceTemplatesSupportGrammarFuncs(t *testing.T) { svc, err := New() if err != nil {