suite check: реализована проверка целостности набора
- разбор документа по языку конвенций: шапка, области правил, блоки под метками - проверки формы правила, распространения, ссылок и самого suite.toml - словарь языка живёт в бинаре реестром «версия × естественный язык», темы и префиксы берутся только из манифеста
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
package lang_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.vakhrushev.me/av/convy/internal/lang"
|
||||
)
|
||||
|
||||
func TestLeadTakesLongestMatch(t *testing.T) {
|
||||
v, err := lang.Lookup(1, "ru")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cases := []struct {
|
||||
text string
|
||||
want string
|
||||
}{
|
||||
{"ДОЛЖЕН.", "ДОЛЖЕН"},
|
||||
{"НЕ ДОЛЖЕН.", "НЕ ДОЛЖЕН"},
|
||||
{"НЕ СЛЕДУЕТ.", "НЕ СЛЕДУЕТ"},
|
||||
{"СЛЕДУЕТ.", "СЛЕДУЕТ"},
|
||||
{"СНЯТО 2026-07-26.", "СНЯТО"},
|
||||
{"ПОЧЕМУ.", "ПОЧЕМУ"},
|
||||
{"", ""},
|
||||
{"Заголовок правила", ""},
|
||||
{"ДОЛЖЕНСТВОВАНИЕ", ""},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
got, ok := v.Lead(tc.text)
|
||||
if tc.want == "" {
|
||||
if ok {
|
||||
t.Errorf("Lead(%q) = %q, ждали, что слово не найдётся", tc.text, got)
|
||||
}
|
||||
continue
|
||||
}
|
||||
if !ok || got != tc.want {
|
||||
t.Errorf("Lead(%q) = %q, %v; ждали %q", tc.text, got, ok, tc.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestForeignExcludesOwnWords(t *testing.T) {
|
||||
foreign := lang.Foreign(1, "ru")
|
||||
if len(foreign) == 0 {
|
||||
t.Fatal("для русского словаря не нашлось ни одного чужого слова")
|
||||
}
|
||||
if code, ok := foreign["MUST"]; !ok || code != "en" {
|
||||
t.Errorf("MUST должно опознаваться как слово словаря en, получили %q, %v", code, ok)
|
||||
}
|
||||
v, err := lang.Lookup(1, "ru")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for word := range foreign {
|
||||
if _, own := v.Modal(word); own {
|
||||
t.Errorf("слово %q собственное, а попало в чужие", word)
|
||||
}
|
||||
if _, own := v.Mark(word); own {
|
||||
t.Errorf("метка %q собственная, а попала в чужие", word)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnknownVersionAndCode(t *testing.T) {
|
||||
if _, err := lang.Lookup(99, "ru"); err == nil {
|
||||
t.Error("неизвестная версия языка принята без ошибки")
|
||||
}
|
||||
if _, err := lang.Lookup(1, "xx"); err == nil {
|
||||
t.Error("неизвестный словарь принят без ошибки")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user