The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use utf8;
use Test::More;
use t::Util;

sub run;

my $parser = make_parser
    q{07543,"97906","9790622","フクシマケン","フタバグントミオカマチ","ケガヤ(マエカワハラ232-244、311、312、337-862バンチ","福島県","双葉郡富岡町","毛萱(前川原232〜244、311、312、337〜862番地",1,1,0,0,0,0},
    q{07543,"97906","9790622","フクシマケン","フタバグントミオカマチ","トウキョウデンリョクフクシマダイ2ゲンシリョクハツデンショコウナイ)","福島県","双葉郡富岡町","〔東京電力福島第二原子力発電所構内〕)",1,1,0,0,0,0},

    q{01407,"04824","0482402","ホッカイドウ","ヨイチグンニキチョウ","オオエ(1チョウメ、2チョウメ<651、662、668バンチ>イガイ、3チョウメ5、1","北海道","余市郡仁木町","大江(1丁目、2丁目「651、662、668番地」以外、3丁目5、1",1,0,1,0,0,0},
    q{01407,"04824","0482402","ホッカイドウ","ヨイチグンニキチョウ","3-4、20、678、687バンチ)","北海道","余市郡仁木町","3−4、20、678、687番地)",1,0,1,0,0,0},

    q{01407,"04823","0482331","ホッカイドウ","ヨイチグンニキチョウ","オオエ(2チョウメ651、662、668バンチ、3チョウメ103、118、","北海道","余市郡仁木町","大江(2丁目651、662、668番地、3丁目103、118、",1,0,1,0,0,0},
    q{01407,"04823","0482331","ホッカイドウ","ヨイチグンニキチョウ","210、254、267、372、444、469バンチ)","北海道","余市郡仁木町","210、254、267、372、444、469番地)",1,0,1,0,0,0},

    q{02405,"033  ","0330071","アオモリケン","カミキタグンロクノヘマチ","イヌオトセ(ウチカナヤ、ウチヤマ、オカヌマ、カナザワ、カナヤ、カミサビシロ、キコシ、ゴンゲンサワ、","青森県","上北郡六戸町","犬落瀬(内金矢、内山、岡沼、金沢、金矢、上淋代、木越、権現沢、",1,1,0,0,0,0},
    q{02405,"033  ","0330071","アオモリケン","カミキタグンロクノヘマチ","シキ、シチヒャク、シモクボ<174ヲノゾク>、シモサビシロ、タカモリ、ヅメキ、ツボケザワ<2","青森県","上北郡六戸町","四木、七百、下久保「174を除く」、下淋代、高森、通目木、坪毛沢「2",1,1,0,0,0,0},
    q{02405,"033  ","0330071","アオモリケン","カミキタグンロクノヘマチ","5、637、641、643、647ヲノゾク>、ナカヤシキ、ヌマクボ、ネコハシ、ホリキリ","青森県","上北郡六戸町","5、637、641、643、647を除く」、中屋敷、沼久保、根古橋、堀切",1,1,0,0,0,0},
    q{02405,"033  ","0330071","アオモリケン","カミキタグンロクノヘマチ","サワ、ミナミタイ、ヤナギサワ、オオマガリ)","青森県","上北郡六戸町","沢、南平、柳沢、大曲)",1,1,0,0,0,0},

    q{03302,"02851","0285102","イワテケン","イワテグンクズマキマチ","クズマキ(ダイ40チワリ<57バンチ125、176ヲノゾク>-ダイ45","岩手県","岩手郡葛巻町","葛巻(第40地割「57番地125、176を除く」〜第45",1,1,0,0,0,0},
    q{03302,"02851","0285102","イワテケン","イワテグンクズマキマチ","チワリ)","岩手県","岩手郡葛巻町","地割)",1,1,0,0,0,0}
    ;

run '毛萱', 'ケガヤ', '4', ['前川原232〜244', '311', '312', '337〜862番地〔東京電力福島第二原子力発電所構内〕'], ['マエカワハラ232-244', '311', '312', '337-862バンチトウキョウデンリョクフクシマダイ2ゲンシリョクハツデンショコウナイ'];
run '大江', 'オオエ', '7', ['1丁目', '2丁目「651、662、668番地」以外', '3丁目5', '13-4', '20', '678', '687番地'], ['1チョウメ', '2チョウメ<651,662,668バンチ>イガイ', '3チョウメ5', '13-4', '20', '678', '687バンチ'];
run '大江', 'オオエ', '11', ['2丁目651', '662', '668番地', '3丁目103', '118', '210', '254', '267', '372', '444', '469番地'], ['2チョウメ651', '662', '668バンチ', '3チョウメ103', '118', '210', '254', '267', '372', '444', '469バンチ'];

do {
    my @args = @_;
    my $row = $parser->fetch_obj;
    is($row->town, '犬落瀬');
    is($row->town_kana, 'イヌオトセ');
    is(scalar(@{ $row->subtown }), 22);
    is($row->subtown->[0], '内金矢');
    is($row->subtown_kana->[0], 'ウチカナヤ');
    is($row->subtown->[10], '下久保「174を除く」');
    is($row->subtown_kana->[10], 'シモクボ<174ヲノゾク>');
    is($row->subtown->[14], '坪毛沢「25、637、641、643、647を除く」');
    is($row->subtown_kana->[14], 'ツボケザワ<25,637,641,643,647ヲノゾク>');
    is($row->subtown->[18], '堀切沢');
    is($row->subtown_kana->[18], 'ホリキリサワ');
    is($row->subtown->[21], '大曲');
    is($row->subtown_kana->[21], 'オオマガリ');
};

run '葛巻', 'クズマキ', '1', ['第40地割「57番地125、176を除く」〜第45地割'], ['ダイ40チワリ<57バンチ125,176ヲノゾク>-ダイ45チワリ'];



sub run {
    my @args = @_;
    my $row = $parser->fetch_obj;
    is($row->town, $args[0]);
    is($row->town_kana, $args[1]);
    if ($args[2]) {
        is(scalar(@{ $row->subtown }), $args[2]);
        for my $i (0..($args[2] - 1)){
            is($row->subtown->[$i], $args[3]->[$i]);
            is($row->subtown_kana->[$i], $args[4]->[$i]);
        }
    } else {
        is($row->subtown, undef);
    }
};

done_testing;