1# Tests adapted from
2# https://github.com/WaniKani/WanaKana/blob/master/test/tests.js
3
4use warnings;
5use strict;
6use Test::More;
7use Lingua::JA::Moji ':all';
8use utf8;
9binmode Test::More->builder->output, ":utf8";
10binmode Test::More->builder->failure_output, ":utf8";
11
12is (romaji2hiragana ("IROHANIHOHETO"), "いろはにほへと", "Even the colorful fregrant flowers");
13is (romaji2hiragana ("CHIRINURUWO"), "ちりぬるを", "Die sooner or later");
14is (romaji2hiragana ("WAKAYOTARESO"), "わかよたれそ", "Us who live in this world");
15is (romaji2hiragana ("TSUNENARAMU"), "つねならむ", "Cannot live forever, either.");
16is (romaji2hiragana ("UWINOOKUYAMA"), "うゐのおくやま", "This transient mountain with shifts and changes,)");
17is (romaji2hiragana ("KEFUKOETE"), "けふこえて", "Today we are going to overcome, and reach the world of enlightenment.");
18is (romaji2hiragana ("ASAKIYUMEMISHI"), "あさきゆめみし", "We are not going to have meaningless dreams");
19is (romaji2hiragana ("WEHIMOSESUN"), "ゑひもせすん", "nor become intoxicated with the fake world anymore");
20
21is (romaji2hiragana ("babba"),   "ばっば", "double B");
22#is (romaji2hiragana ("cacca"),   "cあっcあ", "double C");
23is (romaji2hiragana ("chaccha"), "ちゃっちゃ", "double Ch");
24is (romaji2hiragana ("dadda"),   "だっだ", "double D");
25is (romaji2hiragana ("gagga"),   "がっが", "double G");
26is (romaji2hiragana ("hahha"),   "はっは", "double H");
27is (romaji2hiragana ("kakka"),   "かっか", "double K");
28is (romaji2hiragana ("nanna"),   "なんな", "double N");
29is (romaji2hiragana ("pappa"),   "ぱっぱ", "double P");
30is (romaji2hiragana ("rarra"),   "らっら", "double R");
31is (romaji2hiragana ("sassa"),   "さっさ", "double S");
32is (romaji2hiragana ("shassha"), "しゃっしゃ", "double Sh");
33is (romaji2hiragana ("tatta"),   "たった", "double T");
34is (romaji2hiragana ("tsuttsu"), "つっつ", "double Ts");
35is (romaji2hiragana ("zazza"),   "ざっざ", "double Z");
36
37is (romaji2hiragana ("mamma"),   "まんま", "double M");
38is (romaji2hiragana ("mamma", { ime => 1 } ),   "まっま", "double M IME style");
39
40is (romaji2hiragana ("fuffu"),   "ふっふ", "double F");
41is (romaji2hiragana ("jajja"),   "じゃっじゃ", "double J");
42is (romaji2hiragana ("qaqqa"),   "くぁっくぁ", "double Q");
43is (romaji2hiragana ("vavva"),   "ゔぁっゔぁ", "double V");
44is (romaji2hiragana ("wawwa"),   "わっわ", "double W");
45is (romaji2hiragana ("yayya"),   "やっや", "double Y");
46
47is (romaji2hiragana ("aiueo"), romaji2hiragana ("AIUEO"), "cAse DoEsn'T MatTER for toHiragana ()");
48is (romaji2kana ("aiueo"), romaji2kana ("AIUEO"), "cAse DoEsn'T MatTER for toKatakana ()");
49
50is (romaji2hiragana ("n"), "ん", "Solo N");
51is (romaji2hiragana ("onn"), "おん", "double N");
52is (romaji2hiragana ("onna"), "おんな", "N followed by N* syllable");
53is (romaji2hiragana ("nnn"), "んん", "Triple N");
54
55is (romaji2hiragana ("onnna", { ime => 1 }, ), "おんな", "Triple N followed by N* syllable (IME mode)");
56is (romaji2hiragana ("nnnn"), "んん", "Quadruple N");
57
58is (romaji2hiragana ("nyan"), "にゃん", "nya -> にゃ");
59# The original behaviour of wanakana was wrong for an ime.
60is (romaji2hiragana ("nnnyann", { ime => 1 }), "んにゃん", "nnnyann -> んにゃん in IME mode");
61is (romaji2hiragana ("nnnyannn"), "んにゃんん", "nnnya -> んにゃ");
62
63my $opts = {wapuro => 1, style => 'hepburn'};
64
65is (kana2romaji("ワニカニ ガ スゴイ ダ", $opts), "wanikani ga sugoi da", "Convert katakana to romaji");
66is (kana2romaji("わにかに が すごい だ", $opts), "wanikani ga sugoi da", "Convert hiragana to romaji");
67is (kana2romaji("ワニカニ が すごい だ", $opts), "wanikani ga sugoi da", "Convert mixed kana to romaji");
68isnt (kana2romaji("わにかにがすごいだ", $opts), "wanikani ga sugoi da", "Spaces must be manually entered");
69
70# Don't think this is right (?)
71#    is (kana2romaji("ちりぬるを", $opts), "chirinuruwo", "Die sooner or later");
72is (kana2romaji("ちりぬるを", {%$opts, wo => 1}), "chirinuruwo",
73    "Die sooner or later");
74is (kana2romaji("ちりぬるを", {%$opts, wo => 0}), "chirinuruo",
75    "Die sooner or later");
76
77is (kana2romaji("いろはにほへと", $opts), "irohanihoheto", "Even the colorful fregrant flowers");
78is (kana2romaji("わかよたれそ", $opts), "wakayotareso", "Us who live in this world");
79is (kana2romaji("つねならむ", $opts), "tsunenaramu", "Cannot live forever, either.");
80is (kana2romaji("うゐのおくやま", $opts), "uwinookuyama", "This transient mountain with shifts and changes,)");
81is (kana2romaji("けふこえて", $opts), "kefukoete", "Today we are going to overcome, and reach the world of enlightenment.");
82is (kana2romaji("あさきゆめみし", $opts), "asakiyumemishi", "We are not going to have meaningless dreams");
83is (kana2romaji("ゑひもせすん", $opts), "wehimosesun", "nor become intoxicated with the fake world anymore");
84is (kana2romaji("きんにくまん", $opts), "kinnikuman", "Double and single n");
85is (kana2romaji("んんにんにんにゃんやん", $opts), "nnninninnyan'yan", "N extravaganza");
86done_testing ();
87exit;
88