#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from os.path import join, dirname, abspath
import sys
import unittest


rootDir = dirname(dirname(dirname(abspath(__file__))))
sys.path.insert(0, rootDir)

from pyglossary.plugins.ebook_kobo import (
	Writer,
)


class GetPrefixTest(unittest.TestCase):
	def case(self, word, prefix):
		w = Writer(None)
		self.assertEqual(
			w.get_prefix(word),
			prefix,
		)

	def test(self):
		# examples from https://pgaskin.net/dictutil/dicthtml/prefixes.html
		self.case("test", "te")
		self.case("a", "aa")
		self.case("Èe", "èe")
		self.case("multiple words", "mu")
		self.case("àççèñts", "àç")
		self.case("à", "àa")
		self.case("ç", "ça")
		self.case("", "11")
		self.case(" ", "11")
		self.case(" x", "xa")
		self.case(" 123", "11")
		self.case("x 23", "xa")
		self.case("д ", "д")
		self.case("дaд", "дa")
		self.case("未未", "未未")
		self.case("未", "未a")
		self.case("  未", "11")
		self.case(" 未", "未a")

		# the rest of test cases are from
		# https://github.com/pgaskin/dictutil/blob/master/kobodict/util_test.go

		# dicthtml-en
		self.case("a-", "11")
		self.case("-an", "11")
		self.case("GB", "gb")

		# dicthtml-fr
		self.case("ébahir", "éb")
		self.case("a1", "11")
		self.case("ô", "ôa")
		self.case("kébab", "ké")
		self.case("aérer", "aé")
		self.case("living-room", "li")

		# dicthtml-ja
		# Note, Kanji not currently implemented, so not testing (note, the logic
		# is in a separate function, anyways).
		# self.case("あ", "あ")
		# self.case("アークとう", "アー")

		# generated by dictword-test: spaces
		self.case("  ", "11")
		self.case("   ", "11")
		self.case("\t\t", "11")
		self.case("\t\f\t", "11")
		self.case("x ", "xa")
		self.case(" xx", "xa")

		# generated by dictword-test: spaces where trim/prefix order matters
		self.case("  x", "11")
		self.case("  xy", "11")
		self.case("  xyz", "11")
		self.case("x z", "xa")

		# generated by dictword-test: cyrillic
		self.case(" д", "д")
		self.case(" дд", "д")
		self.case("д", "д")
		self.case("aд", "aд")
		self.case("дa", "дa")
		self.case("aдa", "aд")

		# generated by dictword-test: uppercase accented letters
		self.case("Ȅe", "ȅe")
		self.case("eȄ", "eȅ")
		self.case("Ȅ", "ȅa")
		self.case("Ȅ!", "11")

		# generated by dictword-test: cjk
		self.case("x未", "x未")
		self.case("未x", "未x")
		self.case("xy未", "xy")
		self.case("还没", "还没")

		# generated by dictword-test: misc
		self.case("!", "11")
		self.case("!!", "11")
		self.case("!!!", "11")
		self.case("x!", "11")
		self.case("x!!", "11")
		self.case("xx!", "xx")
		self.case("xxx!", "xx")
		self.case("  !", "11")
		self.case(" !!", "11")
		self.case(" !!!", "11")
		self.case(" !", "11")
		self.case("  !!", "11")
		self.case("   !!!", "11")
		self.case(" x!", "xa")
		self.case(" x!!", "xa")
		self.case(" xx!", "xa")
		self.case(" xxx!", "xa")

		# synthetic
		self.case("x\x00y", "xa")
		self.case("\x00xy", "11")


if __name__ == "__main__":
	unittest.main()
