The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::Base;
plan tests => 1 * blocks;

use utf8;
binmode Test::More->builder->$_ => ':utf8'
    for qw(output failure_output todo_output);

use Acme::Ikamusume;

filters { match => 'regexp' };

run {
    my $block = shift;
    
    my $output = Acme::Ikamusume->geso($block->input);
    my $title = $block->name ." input: ". $block->input;
    
    if ($block->match) {
        like($output, $block->match, $title);
    } else {
        is($output, $block->expected, $title);
    }
};

__DATA__
=== SYNOPSIS
--- input:    イカ娘です。あなたもperlで侵略しませんか?
--- expected: イカ娘でゲソ。お主もperlで侵略しなイカ?


=== IKA: replace
--- input:    以下のように
--- expected: イカのように
=== IKA: replace
--- input:    海からの使者、イカ娘でゲソ
--- expected: 海からの使者、イカ娘でゲソ
=== IKA: replace
--- input:    西瓜でゲソ
--- expected: すイカでゲソ
=== IKA: replace
--- input:    いかんでゲソ
--- expected: イカんでゲソ
=== IKA: replace
--- input:    ハイカラでゲソ
--- expected: ハイカラでゲソ
=== IKA: replace
--- input:    侵略しないか。
--- expected: 侵略しなイカ。
=== IKA: replace
--- input:    侵略じゃないか。
--- expected: 侵略じゃなイカ。
=== IKA: replace
--- input:    侵略しないかと
--- expected: 侵略しなイカと
=== IKA: replace
--- input:    徘徊完了
--- expected: はイカイカんりょうでゲソ
=== IKA: replace
--- input:    いい感じ無敵にススメ
--- expected: イーカんじ無敵にススメ
=== IKA: replace
--- input:    いー感じ無敵にススメ
--- expected: イーカんじ無敵にススメ
=== IKA: replace
--- input:    言い方
--- expected: イーカたでゲソ
=== IKA: replace
--- input:    いいか
--- expected: いイカ


=== IKA: IIKA
--- input:    いいか?
--- expected: いイカ?
=== IKA: IIKA
--- input:    いいですか?
--- expected: いイカ?
=== IKA: IIKA
--- input:    いいでしょうか?
--- expected: いイカ?


=== GESO: replace
--- input:    そうでげそ
--- expected: そうでゲソ
=== GESO: replace
--- input:    凧揚げ僧侶
--- expected: 凧あゲソうりょでゲソ


=== GESO: userdic
--- input:    イカ娘です。
--- expected: イカ娘でゲソ。
=== GESO: userdic
--- input:    イカ娘ですから、
--- expected: イカ娘でゲソから、
=== IKA: userdic
--- input:    イカ娘ですね。
--- expected: イカ娘じゃなイカ。
=== IKA: userdic
--- input:    イカ娘ですよね。
--- expected: イカ娘じゃなイカ。
=== IKA: usedic
--- input:    イカ娘でしょうか?
--- expected: イカ娘じゃなイカ?


=== IKA/GESO DA = GESO
--- input:    イカ娘だ
--- expected: イカ娘でゲソ
=== IKA/GESO DA = GESO
--- input:    イカ娘だから
--- expected: イカ娘でゲソから
=== IKA/GESO DA = GESO
--- input:    イカ娘だが、
--- expected: イカ娘でゲソが、
=== IKA/GESO DA + ゼ終助詞 = IKA
--- reported: http://twitter.com/k_e_i_65/status/13634663557898240
--- input:    イカ娘だぜ
--- expected: イカ娘じゃなイカ
=== IKA/GESO DA + ゼ終助詞 = IKA
--- input:    イカ娘だぜよ
--- expected: イカ娘じゃなイカ
=== IKA/GESO DA + ゾ終助詞 = GESO
--- input:    イカ娘だぞ
--- expected: イカ娘でゲソ
=== IKA/GESO DA + ゾ終助詞 = GESO
--- input:    イカ娘だぞ
--- expected: イカ娘でゲソ
=== IKA/GESO DA + ゾ終助詞 = GESO
--- input:    イカ娘だぞい
--- expected: イカ娘でゲソ
=== IKA/GESO DA + ゾ終助詞 = GESO
--- input:    イカ娘だぞよ
--- expected: イカ娘でゲソ
=== IKA/GESO DA + ナ終助詞 = IKA
--- input:    イカ娘だな
--- expected: イカ娘じゃなイカ
=== IKA/GESO DA + ナ終助詞 = IKA
--- input:    イカ娘だなあ
--- expected: イカ娘じゃなイカ
=== IKA/GESO DA + ナ終助詞 = IKA
--- input:    イカ娘だなぁ
--- expected: イカ娘じゃなイカ
=== IKA/GESO DA + ナ終助詞 = IKA
--- input:    イカ娘だね
--- expected: イカ娘じゃなイカ
=== IKA/GESO DA + ナ終助詞 = IKA
--- input:    イカ娘だねえ
--- expected: イカ娘じゃなイカ
=== IKA/GESO DA + ナ終助詞 = IKA
--- input:    イカ娘だねぇ
--- expected: イカ娘じゃなイカ
=== IKA/GESO DA + ナ終助詞 = IKA
--- input:    イカ娘だのう
--- expected: イカ娘じゃなイカ
=== IKA/GESO DA + ヨ終助詞 = IKA
--- input:    イカ娘だよ
--- expected: イカ娘じゃなイカ
=== IKA/GESO DA + ヨ終助詞 = IKA
--- input:    イカ娘だよな
--- expected: イカ娘じゃなイカ
=== IKA/GESO DA + ヨ終助詞 = IKA
--- input:    イカ娘だよね
--- expected: イカ娘じゃなイカ
=== IKA/GESO DA + ワ終助詞 = IKA
--- input:    イカ娘だわ
--- expected: イカ娘じゃなイカ
=== IKA/GESO DA + ワ終助詞 = IKA
--- input:    イカ娘だわい
--- expected: イカ娘じゃなイカ
=== IKA/GESO DA + ワ終助詞 = IKA
--- input:    イカ娘だわね
--- expected: イカ娘じゃなイカ


=== IKA: userdic (+ IKA replace)
--- input:    イカ娘だろうか。
--- expected: イカ娘じゃなイカ。


=== GESO: userdic
--- input:    イカ娘である
--- expected: イカ娘でゲソ
=== GESO: userdic
--- input:    イカ娘であるが、
--- expected: イカ娘でゲソが、
=== GESO: userdic
--- input:    イカ娘で、あるが、
--- expected: イカ娘で、あるでゲソが、
=== IKA: userdic
--- input:    そうかな。
--- expected: そうじゃなイカ。
=== IKA: userdic
--- input:    そうかなと。
--- expected: そうじゃなイカと。


=== IKA/GESO: inflection 名詞+
--- input:    お店か
--- expected: お店じゃなイカ
=== IKA/GESO: inflection 副詞+
--- input:    まだか
--- expected: まだでゲソか
=== IKA/GESO: inflection 動詞(基本形)+
--- input:    走るか?
--- expected: 走るでゲソか?
=== IKA/GESO: inflection 動詞(その他)+
--- input:    走りませんか?
--- expected: 走らなイカ?
=== IKA/GESO: inflection です +
--- input:    イカ娘ですか?
--- expected: イカ娘じゃなイカ?


=== IKA: inflection 五段
--- input:    歩きませんか?
--- expected: 歩かなイカ?
=== IKA: inflection 五段
--- input:    泳ぎませんか?
--- expected: 泳がなイカ?
=== IKA: inflection 五段
--- input:    探しませんか?
--- expected: 探さなイカ?
=== IKA: inflection 五段
--- input:    勝ちませんか?
--- expected: 勝たなイカ?
=== IKA: inflection 五段
--- input:    死にませんか?
--- expected: 死ななイカ?
=== IKA: inflection 五段
--- input:    遊びませんか?
--- expected: 遊ばなイカ?
=== IKA: inflection 五段
--- input:    知りませんか?
--- expected: 知らなイカ?
=== IKA: inflection 五段
--- input:    笑いませんか?
--- expected: 笑わなイカ?

=== IKA: inflection 上一段
--- input:    いませんか?
--- expected: いなイカ?
=== IKA: inflection 上一段
--- input:    起きませんか?
--- expected: 起きなイカ?
=== IKA: inflection 上一段
--- input:    すぎませんか?
--- expected: すぎなイカ?
=== IKA: inflection 上一段
--- input:    閉じませんか?
--- expected: 閉じなイカ?
=== IKA: inflection 上一段
--- input:    落ちませんか?
--- expected: 落ちなイカ?
=== IKA: inflection 上一段
--- input:    浴びませんか?
--- expected: 浴びなイカ?
=== IKA: inflection 上一段
--- input:    しみませんか?
--- expected: しみなイカ?
=== IKA: inflection 上一段
--- input:    ふりませんか?
--- expected: ふらなイカ?

=== IKA: inflection 下一段
--- input:    見えませんか?
--- expected: 見えなイカ?
=== IKA: inflection 下一段
--- input:    受けませんか?
--- expected: 受けなイカ?
=== IKA: inflection 下一段
--- input:    告げませんか?
--- expected: 告げなイカ?
=== IKA: inflection 下一段
--- input:    見せませんか?
--- expected: 見せなイカ?
=== IKA: inflection 下一段
--- input:    混ぜませんか?
--- expected: 混ぜなイカ?
=== IKA: inflection 下一段
--- input:    捨てませんか?
--- expected: 捨てなイカ?
=== IKA: inflection 下一段
--- input:    茹でませんか?
--- expected: 茹でなイカ?
=== IKA: inflection 下一段
--- input:    寝ませんか?
--- expected: 寝なイカ?
=== IKA: inflection 下一段
--- input:    経ませんか?
--- expected: 経なイカ?
=== IKA: inflection 下一段
--- input:    食べませんか?
--- expected: 食べなイカ?
=== IKA: inflection 下一段
--- input:    求めませんか?
--- expected: 求めなイカ?
=== IKA: inflection 下一段
--- input:    入れませんか?
--- expected: 入れなイカ?

=== IKA: inflection カ変
--- input:    来ませんか?
--- expected: 来なイカ?
=== IKA: inflection サ変
--- input:    しませんか?
--- expected: しなイカ?


=== IKA: inflection ましょう
--- input:    しましょう!
--- expected: しなイカ!
=== IKA: inflection ましょうよ
--- input:    しましょうよ!
--- expected: しなイカ!


=== GESO: eos EOS
--- input:    わかった
--- expected: わかったでゲソ

=== GESO: eos + 記号(句点)
--- input:    わかった。
--- expected: わかったでゲソ。
=== GESO: eos + 記号(括弧閉)
--- input:    (ふむふむ)
--- expected: (ふむふむでゲソ)
=== GESO: eos + 記号(一般GESO可)
--- input:    なんと? ああ びっくり!
--- expected: なんとでゲソ? ああでゲソ びっくりでゲソ!
=== GESO: eos + 記号(一般GESO可)
--- input:    ふむふむ…ふむふむ‥ふむふむ~
--- expected: ふむふむでゲソ…ふむふむでゲソ‥ふむふむでゲソ~
=== GESO: eos + 記号(一般GESO可)
--- input:    キャー☆ キャー★
--- expected: キャーでゲソ☆ キャーでゲソ★
=== GESO: eos + 記号 その他 no-op
--- input:    シンディー・ハリス※クラーク→マーティン&
--- expected: シンディー・ハリス※クラーク→マーティン&

=== GESO: eos + 記号 no-op
--- input:    今日は、いい天気。
--- expected: 今日は、いい天気でゲソ。

=== GESO: eos GESO/IKA no-op
--- input:    わかったでゲソ。
--- expected: わかったでゲソ。
=== GESO: eos GESO+IKA no-op
--- input:    いいじゃなイカ。
--- expected: いいじゃなイカ。

=== GESO: eos is その他 no-op
--- input:    かんたァ
--- expected: かんたァ
=== GESO: eos is フィラー
--- input:    えーっと
--- expected: えーっとでゲソ
=== GESO: eos is 感動詞
--- input:    へぇ
--- expected: へぇでゲソ
=== GESO: eos is 形容詞
--- input:    おかしい
--- expected: おかしいでゲソ
=== GESO: eos is 助詞 no-op
--- input:    人類へ
--- expected: 人類へ
=== GESO: eos is 助動詞
--- input:    そうすべし
--- expected: そうすべしでゲソ
=== GESO: eos is GESO/IKA + 助動詞
--- input:    ゲソね
--- expected: ゲソね
=== GESO: eos is 接続詞 no-op
--- input:    すると
--- expected: すると
=== GESO: eos is 接続詞 で no-op
--- input:    で
--- expected: で
=== GESO: eos is 接頭詞 no-op
--- input:    全。
--- expected: 全。
=== GESO: eos is 動詞
--- input:    泳ぐ
--- expected: 泳ぐでゲソ
=== GESO: eos is 副詞
--- input:    ひょっこり
--- expected: ひょっこりでゲソ
=== GESO: eos is 名詞
--- input:    海
--- expected: 海でゲソ
=== GESO: eos is 連体詞 no-op
--- input:    恐るべき、
--- expected: 恐るべき、


=== IKA: eos NAI
--- input:    そうじゃない
--- expected: そうじゃなイカ
=== IKA: eos NAI
--- input:    いいんじゃない?
--- expected: いいんじゃなイカ?


=== HTML tweak
--- input:    <p>君に届け</p>
--- expected: <p>お主に届けでゲソ</p>


=== EBI: accent
--- input: 海老蔵が入院した
--- match: 海老.+蔵が入院した
=== EBI: accent
--- input: えびな市
--- match: えび.+な市
=== EBI: accent
--- input: 今日はエビフライ
--- match: 今日はエビ.+フライ
=== EBI: accent
--- reportby: http://twitter.com/Yuichirou/status/13872045712482306
--- input: 名古屋と言えばエビフリャー
--- match: 名古屋と言えばエビ.+フリャー


=== formal MASU 基本形 to casual 五段
--- input:    今やります。
--- expected: 今やるでゲソ。
=== formal MASU 基本形 to casual 五段 + 助詞 / GESO eos
--- input:    言いますか。
--- expected: 言うでゲソか。
=== formal MASU 基本形 to casual 上一段
--- input:    います。
--- expected: いるでゲソ。
=== formal MASU 基本形 to casual 上一段 + 助詞 / GESO eos
--- input:    いますか。
--- expected: いるでゲソか。
=== formal MASU 基本形 to casual 下一段
--- input:    見えます。
--- expected: 見えるでゲソ。
=== formal MASU 基本形 to casual 下一段 + 助詞 / GESO eos
--- input:    見えますか。
--- expected: 見えるでゲソか。
=== formal MASU 基本形 to casual カ変
--- input:    来ます。
--- expected: 来るでゲソ。
=== formal MASU 基本形 to casual カ変 + 助詞 / GESO eos
--- input:    来ますか。
--- expected: 来るでゲソか。
=== formal MASU 基本形 to casual サ変
--- input:    します。
--- expected: するでゲソ。
=== formal MASU 基本形 to casual サ変 + 助詞 / GESO eos
--- input:    しますか。
--- expected: するでゲソか。

=== formal MASU 連用形 to casual 五段
--- input:    書きました。
--- expected: 書いたでゲソ。
--- SKIP
=== formal MASU 連用形 to casual 五段
--- input:    やりました。
--- expected: やったでゲソ。
--- SKIP
=== formal MASU 連用形 to casual 下一
--- input:    受けました。
--- expected: 受けたでゲソ。
=== formal MASU 連用形 to casual 上一
--- input:    起きました。
--- expected: 起きたでゲソ。
=== formal MASU 連用形 to casual カ変
--- input:    来ました。
--- expected: 来たでゲソ。
=== formal MASU 連用形 to casual サ変
--- input:    しました。
--- expected: したでゲソ。


=== formal to casual userdic
--- input:    そうでした。
--- expected: そうだったでゲソ。


=== IKA: IKAN
--- input:    いけないでしょ
--- expected: イカんでしょ
=== IKA: IKAN
--- input:    それはいけないですね
--- expected: それはイカんじゃなイカ
=== IKA: IKAN
--- input:    それはいけませんね
--- expected: それはイカんね


=== rephrase simply
--- input:    それはありません。
--- expected: それはないでゲソ。


=== no honorific
--- input:    栄子ちゃんです
--- expected: 栄子でゲソ
=== no honorific
--- input:    たけるくんです
--- expected: たけるでゲソ
=== no honorific
--- input:    千鶴さんです
--- expected: 千鶴でゲソ
=== no honorific / unknown
--- input:    Cindyさんです
--- expected: Cindyでゲソ
=== no honorific / myself
--- input:    イカ娘様と呼びませんか
--- expected: イカ娘様と呼ばなイカ


=== userdic: お主
--- input:    あなたは
--- expected: お主は
=== userdic: お主
--- input:    あんたは
--- expected: お主は
=== userdic: お主
--- input:    貴方は
--- expected: お主は
=== userdic: お主
--- input:    お前は
--- expected: お主は
=== userdic: お主
--- input:    おまえは
--- expected: お主は
=== userdic: お主
--- input:    そちは
--- expected: お主は
=== userdic: お主
--- input:    君は
--- expected: お主は
=== userdic: お主
--- input:    キミは
--- expected: お主は
=== userdic: お主
--- input:    きみは
--- expected: お主は

=== GESO: interjection
--- input:    あはははは
--- expected: ゲソソソ
--- SKIP