package analyze
import (
"reflect"
"testing"
)
func TestFurigana(t *testing.T) {
cases := []struct {
surface, reading string
want []Seg
}{
{"食べる", "たべる", []Seg{{"食", "た"}, {"べる", ""}}},
{"今日", "きょう", []Seg{{"今日", "きょう"}}},
{"お茶", "おちゃ", []Seg{{"お", ""}, {"茶", "ちゃ"}}},
{"取り扱い", "とりあつかい", []Seg{{"取", "と"}, {"り", ""}, {"扱", "あつか"}, {"い", ""}}},
{"ありがとう", "ありがとう", []Seg{{"ありがとう", ""}}},
{"カタカナ語", "かたかなご", []Seg{{"カタカナ", ""}, {"語", "ご"}}},
{"日本", "", []Seg{{"日本", ""}}},
// kana that do not line up fall back to the whole word
{"可愛い", "かあいい", []Seg{{"可愛", "かあい"}, {"い", ""}}},
{"明日", "あした", []Seg{{"明日", "あした"}}},
}
for _, c := range cases {
if got := Furigana(c.surface, c.reading); !reflect.DeepEqual(got, c.want) {
t.Errorf("Furigana(%q, %q) = %v, want %v", c.surface, c.reading, got, c.want)
}
}
}
func TestBaseReading(t *testing.T) {
cases := []struct{ surface, base, reading, want string }{
{"食べ", "食べる", "たべ", "たべる"},
{"書か", "書く", "かか", "かく"},
{"高かっ", "高い", "たかかっ", "たかい"},
{"日本", "日本", "にほん", "にほん"},
{"来", "来る", "き", "くる"},
{"走っ", "走る", "はしっ", "はしる"},
}
for _, c := range cases {
if got := baseReading(c.surface, c.base, c.reading); got != c.want {
t.Errorf("baseReading(%q, %q, %q) = %q, want %q", c.surface, c.base, c.reading, got, c.want)
}
}
}