tokuhirom's blog.

'; DROP DATABASE database();

カタカナにあるけどひらがなにない文字

unicode の表から起こすと、下記のようになっているようだ。

name hex char
KATAKANA LETTER VA U+30F7
KATAKANA LETTER SMALL RE U+31FE
KATAKANA LETTER SMALL HU U+31F7
KATAKANA LETTER SMALL HI U+31F6
KATAKANA LETTER SMALL HE U+31F8
KATAKANA DIGRAPH KOTO U+30FF
KATAKANA LETTER SMALL SU U+31F2
KATAKANA LETTER SMALL HO U+31F9
KATAKANA LETTER SMALL SI U+31F1
KATAKANA LETTER SMALL RI U+31FC
KATAKANA LETTER VE U+30F9
KATAKANA LETTER SMALL TO U+31F3
KATAKANA LETTER SMALL KU U+31F0
KATAKANA LETTER VO U+30FA
KATAKANA LETTER SMALL RO U+31FF
KATAKANA LETTER SMALL RA U+31FB
KATAKANA LETTER SMALL MU U+31FA
KATAKANA LETTER SMALL HA U+31F5
KATAKANA LETTER VI U+30F8
KATAKANA LETTER SMALL RU U+31FD
KATAKANA LETTER SMALL NU U+31F4
KATAKANA MIDDLE DOT U+30FB
HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK U+FF9F
HALFWIDTH KATAKANA VOICED SOUND MARK U+FF9E
HALFWIDTH KATAKANA MIDDLE DOT U+FF65

今日の適当レビュー

■Before

use strict;
use warnings;
use Test::Base;
BEGIN {
    eval q[use Sledge::TestPages;];
    plan skip_all => "Sledge::TestPages required for testing base" if $@;
};
use t::TestPages;

plan tests => 1*blocks;

run {
    my $block = shift;

    $ENV{$block->input} = $block->expected;

    no strict 'refs';
    local *{"t::TestPages::dispatch_test"} = sub { ## no critic
        my $self = shift;

        is($self->session->session_id, $block->expected);
        $self->finished(1);
    };

    my $pages = t::TestPages->new;
    $pages->dispatch('test');
    delete $ENV{$block->input}; # clear env
};

__END__
=== agent is kddi
--- input chomp
HTTP_X_UP_SUBNO
--- expected chomp
SID_EZ_MOBILE_ID
=== agent is softbank
--- input chomp
HTTP_X_JPHONE_UID
--- expected chomp
SID_SB_MOBILE_ID

■AFTER

use Test::Base;
BEGIN {
    eval q[use Sledge::TestPages;];
    plan skip_all => "Sledge::TestPages required for testing base" if $@;
};
use t::TestPages;

plan tests => 1*blocks;

filters {
    input => [qw/yaml/],
};

run {
    my $block = shift;

    local %ENV = %{ $block->input };

    no strict 'refs';
    local *{"t::TestPages::dispatch_test"} = sub { ## no critic
        my $self = shift;

        is($self->session->session_id, $block->expected);
        $self->finished(1);
    };

    my $pages = t::TestPages->new;
    $pages->dispatch('test');
};

__END__

=== kddi
--- input
HTTP_USER_AGENT: UP.Browser/3.2.9.1-SA12 UP.Link/3.2
HTTP_X_UP_SUBNO: SID_EZ_MOBILE_ID
--- expected: SID_EZ_MOBILE_ID

=== softbank
--- input
HTTP_USER_AGENT: J-PHONE/3.0/J-T06_a
HTTP_X_JPHONE_UID: SID_SB_MOBILE_ID
--- expected: SID_SB_MOBILE_ID

■総括

  • input と expected が入力値と期待値じゃない
  • %ENV をまるっとかえたほうが綺麗
  • お掃除は local でひとつ
  • 毎回 chomp filter 明示的に書くと見栄えがわるい
  • それぞれのテストケースの間に空行をいれよう