package liner import ( "strconv" "testing" ) func accent(in []rune) []rune { var out []rune for _, r := range in { out = append(out, r) out = append(out, '\u0301') } return out } type testCase struct { s []rune glyphs int } var testCases = []testCase{ {[]rune("query"), 5}, {[]rune("私"), 2}, {[]rune("hello世界"), 9}, } func TestCountGlyphs(t *testing.T) { for _, testCase := range testCases { count := countGlyphs(testCase.s) if count != testCase.glyphs { t.Errorf("ASCII count incorrect. %d != %d", count, testCase.glyphs) } count = countGlyphs(accent(testCase.s)) if count != testCase.glyphs { t.Errorf("Accent count incorrect. %d != %d", count, testCase.glyphs) } } } func compare(a, b []rune, name string, t *testing.T) { if len(a) != len(b) { t.Errorf(`"%s" != "%s" in %s"`, string(a), string(b), name) return } for i := range a { if a[i] != b[i] { t.Errorf(`"%s" != "%s" in %s"`, string(a), string(b), name) return } } } func TestPrefixGlyphs(t *testing.T) { for _, testCase := range testCases { for i := 0; i <= len(testCase.s); i++ { iter := strconv.Itoa(i) out := getPrefixGlyphs(testCase.s, i) compare(out, testCase.s[:i], "ascii prefix "+iter, t) out = getPrefixGlyphs(accent(testCase.s), i) compare(out, accent(testCase.s[:i]), "accent prefix "+iter, t) } out := getPrefixGlyphs(testCase.s, 999) compare(out, testCase.s, "ascii prefix overflow", t) out = getPrefixGlyphs(accent(testCase.s), 999) compare(out, accent(testCase.s), "accent prefix overflow", t) out = getPrefixGlyphs(testCase.s, -3) if len(out) != 0 { t.Error("ascii prefix negative") } out = getPrefixGlyphs(accent(testCase.s), -3) if len(out) != 0 { t.Error("accent prefix negative") } } } func TestSuffixGlyphs(t *testing.T) { for _, testCase := range testCases { for i := 0; i <= len(testCase.s); i++ { iter := strconv.Itoa(i) out := getSuffixGlyphs(testCase.s, i) compare(out, testCase.s[len(testCase.s)-i:], "ascii suffix "+iter, t) out = getSuffixGlyphs(accent(testCase.s), i) compare(out, accent(testCase.s[len(testCase.s)-i:]), "accent suffix "+iter, t) } out := getSuffixGlyphs(testCase.s, 999) compare(out, testCase.s, "ascii suffix overflow", t) out = getSuffixGlyphs(accent(testCase.s), 999) compare(out, accent(testCase.s), "accent suffix overflow", t) out = getSuffixGlyphs(testCase.s, -3) if len(out) != 0 { t.Error("ascii suffix negative") } out = getSuffixGlyphs(accent(testCase.s), -3) if len(out) != 0 { t.Error("accent suffix negative") } } }