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)
		}
	}
}
