diff --git a/grammar.go b/grammar.go index 2c5ff62..324bc26 100644 --- a/grammar.go +++ b/grammar.go @@ -658,12 +658,15 @@ func Quote(s string) string { // ArticlePhrase prefixes a noun phrase with the correct article. func ArticlePhrase(word string) string { - article := Article(word) - if article == "" || word == "" { + if word == "" { return "" } lang := currentLangForGrammar() word = renderWord(lang, word) + article := Article(word) + if article == "" { + return "" + } if strings.HasSuffix(article, "'") { return article + word } diff --git a/grammar_test.go b/grammar_test.go index 8db4a2a..e1e8740 100644 --- a/grammar_test.go +++ b/grammar_test.go @@ -521,6 +521,36 @@ func TestArticlePhrase_RespectsWordMap(t *testing.T) { } } +func TestArticlePhrase_UsesRenderedWordForArticleSelection(t *testing.T) { + prev := Default() + svc, err := New() + if err != nil { + t.Fatalf("New() failed: %v", err) + } + SetDefault(svc) + t.Cleanup(func() { + SetDefault(prev) + }) + + data := GetGrammarData("en") + if data == nil { + t.Fatal("GetGrammarData(\"en\") returned nil") + } + original, existed := data.Words["ssh"] + data.Words["ssh"] = "SSH" + t.Cleanup(func() { + if existed { + data.Words["ssh"] = original + return + } + delete(data.Words, "ssh") + }) + + if got, want := ArticlePhrase("ssh"), "an SSH"; got != want { + t.Fatalf("ArticlePhrase(%q) = %q, want %q", "ssh", got, want) + } +} + func TestArticlePhraseFrenchLocale(t *testing.T) { prev := Default() svc, err := New()