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;

my $parser = make_parser
    q{01106,"005  ","0050030","ホッカイドウ","サッポロシミナミク","ミナミ30ジョウニシ(8チョウメ)","北海道","札幌市南区","南三十条西(8丁目)",0,0,1,0,0,0},
    q{01207,"080  ","0800848","ホッカイドウ","オビヒロシ","ジユウガオカ(1、2チョウメ)","北海道","帯広市","自由が丘(1、2丁目)",1,0,1,0,0,0},
    q{01101,"060  ","0600042","ホッカイドウ","サッポロシチュウオウク","オオドオリニシ(1-19チョウメ)","北海道","札幌市中央区","大通西(1〜19丁目)",1,0,1,0,0,0},
    q{01207,"080  ","0800029","ホッカイドウ","オビヒロシ","ニシ19ジョウミナミ(35-38、41、42チョウメ)","北海道","帯広市","西十九条南(35〜38、41、42丁目)",1,0,1,0,0,0};

subtest 'single' => sub {
    my $row = $parser->fetch_obj;
    is($row->town, '南三十条西');
    is($row->town_kana, 'ミナミ30ジョウニシ');
    ok($row->has_subtown);
    is($row->subtown->[0], '8丁目');
    is($row->subtown_kana->[0], '8チョウメ');
};

subtest 'split' => sub {
    my $row = $parser->fetch_obj;
    is($row->town, '自由が丘');
    is($row->town_kana, 'ジユウガオカ');
    ok($row->has_subtown);
    is($row->subtown->[0], '1丁目');
    is($row->subtown_kana->[0], '1チョウメ');
    is($row->subtown->[1], '2丁目');
    is($row->subtown_kana->[1], '2チョウメ');
};

subtest 'range' => sub {
    my $row = $parser->fetch_obj;
    is($row->town, '大通西');
    is($row->town_kana, 'オオドオリニシ');
    ok($row->has_subtown);
    is_deeply($row->subtown, [
        '1丁目',
        '2丁目',
        '3丁目',
        '4丁目',
        '5丁目',
        '6丁目',
        '7丁目',
        '8丁目',
        '9丁目',
        '10丁目',
        '11丁目',
        '12丁目',
        '13丁目',
        '14丁目',
        '15丁目',
        '16丁目',
        '17丁目',
        '18丁目',
        '19丁目',
    ]);
    is_deeply($row->subtown_kana, [
        '1チョウメ',
        '2チョウメ',
        '3チョウメ',
        '4チョウメ',
        '5チョウメ',
        '6チョウメ',
        '7チョウメ',
        '8チョウメ',
        '9チョウメ',
        '10チョウメ',
        '11チョウメ',
        '12チョウメ',
        '13チョウメ',
        '14チョウメ',
        '15チョウメ',
        '16チョウメ',
        '17チョウメ',
        '18チョウメ',
        '19チョウメ',
    ]);
};

subtest 'mix' => sub {
    my $row = $parser->fetch_obj;
    is($row->town, '西十九条南');
    is($row->town_kana, 'ニシ19ジョウミナミ');
    ok($row->has_subtown);
    is_deeply($row->subtown, [
        '35丁目',
        '36丁目',
        '37丁目',
        '38丁目',
        '41丁目',
        '42丁目',
    ]);
    is_deeply($row->subtown_kana, [
        '35チョウメ',
        '36チョウメ',
        '37チョウメ',
        '38チョウメ',
        '41チョウメ',
        '42チョウメ',
    ]);
};

done_testing;