local m = require("Module:Hrkt-translit")
local t = require("Module:UnitTests")

local options
local function e(k, r)
	return t:equals(k, m.tr(k, "ja", nil, options), r)
end

function t:test_transliterate_kana()
	options = nil
	e("あ", "a")
	e("あぁ", "ā")
	e("ああ", "ā")
	e("あー", "ā")
	e("い", "i")
	e("いぃ", "yi")
	e("いい", "ī")
	e("いー", "ī")
	e("いぇ", "ye")
	e("う", "u")
	e("ゔ", "vu")
	e("うぁ", "wa")
	e("ゔぁ", "va")
	e("うぃ", "wi")
	e("ゔぃ", "vi")
	e("うぃぇ", "wye")
	e("ゔぃぇ", "vye")
	e("うぅ", "wu")
	e("うう", "ū")
	e("うー", "ū")
	e("うぇ", "we")
	e("ゔぇ", "ve")
	e("うぉ", "wo")
	e("ゔぉ", "vo")
	e("うゃ", "wya")
	e("ゔゃ", "vya")
	e("うゅ", "wyu")
	e("ゔゅ", "vyu")
	e("うょ", "wyo")
	e("ゔょ", "vyo")
	e("え", "e")
	e("えぃ", "ei")
	e("えい", "ei")
	e("えぇ", "ē")
	e("ええ", "ē")
	e("えー", "ē")
	e("お", "o")
	e("おぅ", "ō")
	e("おう", "ō")
	e("おぉ", "ō")
	e("おお", "ō")
	e("おー", "ō")
	e("か", "ka")
	e("が", "ga")
	e("かぁ", "kā")
	e("かあ", "kā")
	e("かー", "kā")
	e("がぁ", "gā")
	e("があ", "gā")
	e("がー", "gā")
	e("き", "ki")
	e("ぎ", "gi")
	e("きぃ", "kyi")
	e("きい", "kī")
	e("きー", "kī")
	e("ぎぃ", "gyi")
	e("ぎい", "gī")
	e("ぎー", "gī")
	e("きゃ", "kya")
	e("ぎゃ", "gya")
	e("きゃぁ", "kyā")
	e("きゃー", "kyā")
	e("きゃあ", "kyā")
	e("ぎゃぁ", "gyā")
	e("ぎゃー", "gyā")
	e("ぎゃあ", "gyā")
	e("きゅ", "kyu")
	e("ぎゅ", "gyu")
	e("きゅぅ", "kyū")
	e("きゅー", "kyū")
	e("きゅう", "kyū")
	e("ぎゅぅ", "gyū")
	e("ぎゅー", "gyū")
	e("ぎゅう", "gyū")
	e("きょ", "kyo")
	e("ぎょ", "gyo")
	e("きょぅ", "kyō")
	e("きょう", "kyō")
	e("ぎょぅ", "gyō")
	e("ぎょう", "gyō")
	e("きょぉ", "kyō")
	e("きょー", "kyō")
	e("きょお", "kyō")
	e("ぎょぉ", "gyō")
	e("ぎょー", "gyō")
	e("ぎょお", "gyō")
	e("く", "ku")
	e("ぐ", "gu")
	e("くぁ", "kwa")
	e("ぐぁ", "gwa")
	e("くぃ", "kwi")
	e("ぐぃ", "gwi")
	e("くぅ", "kwu")
	e("くう", "kū")
	e("くー", "kū")
	e("ぐぅ", "gwu")
	e("ぐう", "gū")
	e("ぐー", "gū")
	e("くぇ", "kwe")
	e("ぐぇ", "gwe")
	e("くぉ", "kwo")
	e("ぐぉ", "gwo")
	e("くゎ", "kwa")
	e("ぐゎ", "gwa")
	e("け", "ke")
	e("げ", "ge")
	e("けぃ", "kei")
	e("けい", "kei")
	e("げぃ", "gei")
	e("げい", "gei")
	e("けぇ", "kē")
	e("けえ", "kē")
	e("けー", "kē")
	e("げぇ", "gē")
	e("げえ", "gē")
	e("げー", "gē")
	e("こ", "ko")
	e("ご", "go")
	e("こぅ", "kō")
	e("こう", "kō")
	e("ごぅ", "gō")
	e("ごう", "gō")
	e("こぉ", "kō")
	e("こお", "kō")
	e("こー", "kō")
	e("ごぉ", "gō")
	e("ごお", "gō")
	e("ごー", "gō")
	e("さ", "sa")
	e("ざ", "za")
	e("さぁ", "sā")
	e("さあ", "sā")
	e("さー", "sā")
	e("ざぁ", "zā")
	e("ざあ", "zā")
	e("ざー", "zā")
	e("し", "shi")
	e("じ", "ji")
	e("しぃ", "shyi")
	e("しい", "shī")
	e("しー", "shī")
	e("じぃ", "jyi")
	e("じい", "jī")
	e("じー", "jī")
	e("しゃ", "sha")
	e("じゃ", "ja")
	e("しゃぁ", "shā")
	e("しゃー", "shā")
	e("しゃあ", "shā")
	e("じゃぁ", "jā")
	e("じゃー", "jā")
	e("じゃあ", "jā")
	e("しゅ", "shu")
	e("じゅ", "ju")
	e("しゅぅ", "shwu")
	e("しゅー", "shū")
	e("しゅう", "shū")
	e("じゅぅ", "jwu")
	e("じゅー", "jū")
	e("じゅう", "jū")
	e("しょ", "sho")
	e("じょ", "jo")
	e("しょぅ", "shō")
	e("しょう", "shō")
	e("じょぅ", "jō")
	e("じょう", "jō")
	e("しょぉ", "shō")
	e("しょー", "shō")
	e("しょお", "shō")
	e("じょぉ", "jō")
	e("じょー", "jō")
	e("じょお", "jō")
	e("す", "su")
	e("ず", "zu")
	e("すぁ", "swa")
	e("ずぁ", "zwa")
	e("すぃ", "si")
	e("ずぃ", "zi")
	e("すぃぇ", "sye")
	e("ずぃぇ", "zye")
	e("すぅ", "swu")
	e("すう", "sū")
	e("すー", "sū")
	e("ずぅ", "zwu")
	e("ずう", "zū")
	e("ずー", "zū")
	e("すぇ", "swe")
	e("ずぇ", "zwe")
	e("すぉ", "swo")
	e("ずぉ", "zwo")
	e("すゃ", "sya")
	e("ずゃ", "zya")
	e("すゅ", "syu")
	e("ずゅ", "zyu")
	e("すょ", "syo")
	e("ずょ", "zyo")
	e("すゎ", "swa")
	e("ずゎ", "zwa")
	e("せ", "se")
	e("ぜ", "ze")
	e("せぃ", "sei")
	e("せい", "sei")
	e("ぜぃ", "zei")
	e("ぜい", "zei")
	e("せぇ", "sē")
	e("せえ", "sē")
	e("せー", "sē")
	e("ぜぇ", "zē")
	e("ぜえ", "zē")
	e("ぜー", "zē")
	e("そ", "so")
	e("ぞ", "zo")
	e("そぅ", "sō")
	e("そう", "sō")
	e("ぞぅ", "zō")
	e("ぞう", "zō")
	e("そぉ", "sō")
	e("そお", "sō")
	e("そー", "sō")
	e("ぞぉ", "zō")
	e("ぞお", "zō")
	e("ぞー", "zō")
	e("た", "ta")
	e("だ", "da")
	e("たぁ", "tā")
	e("たあ", "tā")
	e("たー", "tā")
	e("だぁ", "dā")
	e("だあ", "dā")
	e("だー", "dā")
	e("ち", "chi")
	e("ぢ", "ji")
	e("ちぃ", "chyi")
	e("ちい", "chī")
	e("ちー", "chī")
	e("ぢぃ", "jyi")
	e("ぢい", "jī")
	e("ぢー", "jī")
	e("ちゃ", "cha")
	e("ぢゃ", "ja")
	e("ちゃぁ", "chā")
	e("ちゃー", "chā")
	e("ちゃあ", "chā")
	e("ぢゃぁ", "jā")
	e("ぢゃー", "jā")
	e("ぢゃあ", "jā")
	e("ちゅ", "chu")
	e("ぢゅ", "ju")
	e("ちゅぅ", "chwu")
	e("ちゅー", "chū")
	e("ちゅう", "chū")
	e("ぢゅぅ", "jwu")
	e("ぢゅー", "jū")
	e("ぢゅう", "jū")
	e("ちょ", "cho")
	e("ぢょ", "jo")
	e("ちょぅ", "chō")
	e("ちょう", "chō")
	e("ぢょぅ", "jō")
	e("ぢょう", "jō")
	e("ちょぉ", "chō")
	e("ちょー", "chō")
	e("ちょお", "chō")
	e("ぢょぉ", "jō")
	e("ぢょー", "jō")
	e("ぢょお", "jō")
	e("て", "te")
	e("で", "de")
	e("てぃ", "ti")
	e("てい", "tei")
	e("でぃ", "di")
	e("でい", "dei")
	e("てぃぇ", "tye")
	e("でぃぇ", "dye")
	e("てぇ", "tē")
	e("てえ", "tē")
	e("てー", "tē")
	e("でぇ", "dē")
	e("でえ", "dē")
	e("でー", "dē")
	e("てゃ", "tya")
	e("でゃ", "dya")
	e("てゅ", "tyu")
	e("でゅ", "dyu")
	e("てょ", "tyo")
	e("でょ", "dyo")
	e("と", "to")
	e("ど", "do")
	e("とぁ", "twa")
	e("どぁ", "dwa")
	e("とぃ", "twi")
	e("どぃ", "dwi")
	e("とぅ", "tu")
	e("とう", "tō")
	e("どぅ", "du")
	e("どう", "dō")
	e("とぅぉ", "two")
	e("どぅぉ", "dwo")
	e("とぇ", "twe")
	e("どぇ", "dwe")
	e("とぉ", "tō")
	e("とお", "tō")
	e("とー", "tō")
	e("どぉ", "dō")
	e("どお", "dō")
	e("どー", "dō")
	e("とゎ", "twa")
	e("どゎ", "dwa")
end

function t:test_transliterate_normal()
	options = nil
	e("アイェキキェ ヴィェウィフエ", "ayekikye vyewifue")
	e("しんい", "shin'i")
	e("かいしょないしぎょうしょで ひょうげんされる しゃくじとしての かんじを、きょくどに そうたいかした ものである", "kaishonaishigyōshode hyōgensareru shakujitoshiteno kanjio, kyokudoni sōtaikashita monodearu")
	e("しんかんせん", "shinkansen")
	-- ====
	e("こううん", "kōun")
	e("これはテストです。", "korehatesutodesu.")
	e("これ は テスト です。それ は。それ は", "kore wa tesuto desu. sore wa. sore wa")
	e("'''^ウィキペディア''' へ ^ようこそ", "'''Wikipedia''' e Yōkoso")
	e("^'''ウィキペディア''' へ ^ようこそ", "'''Wikipedia''' e Yōkoso")
	-- ====
	e("は うはう う は う は", "wa uhau u wa u wa")
	e("へ うへう う へ う へ", "e uheu u e u e")
	e(".は うはう う .は う .は", "ha uhau u ha u ha")
	e("は. うはう う は. う は.", "ha uhau u ha u ha")
	e("^これ ^は ^テスト ^です。^へ へ", "Kore Wa Tesuto Desu. E e") -- but what kind of sick monster capitalizes particles
	e("^ちょ% ^はっ%かい", "Cho Hakkai")
	e("てにをは", "tenioha")
	e("ぎゃく-ハーレム", "gyaku-hāremu")
	e("ねこ-は", "neko-ha")
	e("ねこ-'''は'''", "neko-'''ha'''")
	e("ねこ-は の", "neko-ha no")
	e("ねこ-'''は''' の", "neko-'''ha''' no")
	e("は", "ha")
	e("'''は'''", "'''ha'''")
	e("<u>は</u>", "<u>ha</u>")
	e("それ は ね", "sore wa ne")
	e("'''こんにち は'''", "'''konnichi wa'''")
	e("それ '''は''' ね", "sore '''wa''' ne")
	e("^へ へ。", "E e.")
	e("^へ へ。", "E e.")
	e("^へ へ x", "E e x")
	e("^へ へ x", "E e x")
	e("うぉ", "wo")
	e("は は では ^はっけん はっけん 「はっけん」 '''はっけん'''", "wa wa deha Hakken hakken “hakken” '''hakken'''")
	e("は は では ^はっけん はっけん 「はっけん」 '''はっけん'''", "wa wa deha Hakken hakken “hakken” '''hakken'''")
	-- ====
	e("ぎゃ ぎぃ ぎゅ ぎぇ ぎょ。くぁ くぃ くぅ くぇ くぉ", "gya gī gyu gye gyo. kwa kwi kū kwe kwo")
	e("うぁ うぃ うぅ うぇ うぉ。ヴぁ ヴぃ ヴ ヴぇ ヴぉ", "wa wi wu we wo. va vi vu ve vo")
	e("ふぁ ふぃ ふ ふぇ ふぉ", "fa fi fu fe fo")
	e("てぃ でぃ とぅ どぅ すぁ すぃ しぃ しぇ しょ ちぃ ぢぃ つぉ てぇ てゅ とぁ とぃ ふょ てょ", "ti di tu du sa si shī she sho chī jī tso tē tyu twa twi fyo tyo")
	e("ねぃ ぬゃ", "ni nya") -- ¯\_(ツ)_/¯
	e("ねぇ、", "nē,")
	e("シークヮーサー", "shīkwāsā")
	-- ====
	e("りゃくしょう じょうず つみき ツァーリ ちゅうか つづけて そっち がっしょう マッツァーリ", "ryakushō jōzu tsumiki tsāri chūka tsuzukete sotchi gasshō mattsāri")
	e("こー やって。ばっさり", "kō yatte. bassari")
	e("し を ぼっ.す", "shi o bo'su")
	e("が がー がーー がーーー がーーーー がーーーーー", "ga gā gaaa gaaaa gaaaaa gaaaaaa")
	e("じと じっと じっっと じっっっと じっっっっと じっっっっっと", "jito jitto jittto jitttto jittttto jitttttto")
	e("めっちゃ めっっちゃ めっっっちゃ", "metcha mettcha metttcha")
	e("あっ あーっ あぁーっ あああっっっ", "a' ā' aaa' āa'''")
	e("はええ", "haē")
	e("まてぇぇぇ", "mateeee")
	e("あっ と いう ま に", "a' to iu ma ni")
	e("あっ、まちがえた", "a', machigaeta")
	e("あっ. まちがえた", "a' machigaeta")
	e("あっ と いう ま に", "a' to iu ma ni")
	e("'''だまっ'''て", "'''damat'''te")
	e("いっ'''ぱつ''' の じゅうだん", "ip'''patsu''' no jūdan")
	e("'''ノン'''アポ", "'''non''''apo")
	e("んんと", "nnto")
	e("んーと", "nnto")
	-- ====
	e("せきヶはら", "sekigahara")
	e("せき'''ヶ'''はら", "seki'''ga'''hara")
	e("けんいち にちようび こんや", "ken'ichi nichiyōbi kon'ya")
	e("すゞき あゝ", "suzuki ā")
	e("ところゞゝゝ", "tokorodokoro")
	e("じゝ", "jishi")
	e("<u>ほっ</u>する", "<u>hos</u>suru")
	e("<u>みっ</u>つ", "<u>mit</u>tsu")
	e("<u>ち</u>", "<u>chi</u>")
	e("<u>めっ</u>ちゃ", "<u>met</u>cha")
	-- ====
	e("あ~ あ〜 あ〰", "a~ a~ a~")
	e("あ!!!!", "a!!!!")
	e("200%", "200%")
	-- ====
	e("jyouzu じょうず", "jyouzu jōzu")
	e("^トゥットゥルー♪ ^まゆしぃ☆です", "Tutturū♪ Mayushī☆desu")
	e("「^だって、すてき な まち です し、それ に なんと いって も この じょうひん な ふいんき!^'''ザ'''・お-じょう-さま!^くうき も バラ の かおり が する と いう かっ!」", "“Datte, suteki na machi desu shi, sore ni nanto itte mo kono jōhin na fuinki! '''Za''' o-jō-sama! Kūki mo bara no kaori ga suru to iu ka'!”")
	e("あっあ", "a'a")
	e("ウッーウッーウマウマ", "u'uu'uumauma")
	e("あ゙ あ゛", "'a 'a")
end

function t:test_transliterate_historical()
	options = {hist = true}
	e("づ", "du")
	e("ず", "zu")
	e("ぢ", "di")
	e("じ", "zi")
	e("きやう", "kyau")
	e("くゑ", "kwe")
	e("きよ", "kyo")
	e("くゐよく", "kwyoku")
	e("きよう", "kyou")
	-- ===
	e("すゐ", "swi")
	-- ====
	e("おお", "oo") -- [[Talk:公]]
	e("おう", "ou")
	e("はん", "fan")
	e("しよう", "syou")
	e("し.よう", "siyou")
	-- ====
	e("つ.ゑ", "tuwe")
	e("つ", "tu")
	e("ち", "ti")
	e("ちや", "tya")
end

function t:test_transliterate_no_diacritics()
	options = {no_diacritics = true}
	e("かいしょないしぎょうしょで ひょうげんされる しゃくじとしての かんじを、きょくどに そうたいかした ものである", "kaishonaishigyoushode hyougensareru shakujitoshiteno kanjio, kyokudoni soutaikashita monodearu")
end
 
return t