PHP版HTML::FillInForm大幅バージョンアップ

PHP版のHTML_FillInFormを大幅にバージョンアップしました。

今回はちゃんとテストコードを書いてみたんですが、漏れやバグありまくりで焦ったorz

やっぱりちゃんとテストコード書かないとダメダメですね・・・。

ってことで以下箇条書きで更新一覧を。

  • ソースの文字コードをutf8に変更
  • テストコードの追加
  • />に対応(17_xhtml.t.php)
  • type="textfield"に対応(13_textfield.t.php)
  • disable_fieldsオプションの追加(21_disable_fields.t.php)
  • HTML::FillInForm::Liteのescapeオプションの追加(22_escape_option.t.php)
  • selectedのmultipleに対応(04_select.t.php)
  • formのidに対応(11_target.t.php)
  • type省略時にtext扱いにならないバグ修正(09_default_type.t.php)
  • fillメソッドを複数回呼べるように変更(07_reuse.t.php)
  • checkboxのvalueのデフォルト値にonを追加(03_checkbox.t.php)
  • 値が複数ある場合のバグ修正(02_hidden.t.php)
  • 同名のnameが存在する場合のバグ修正(12_mult.t.php)

コメント欄で指摘されたものも含めてバグ修正や機能拡張など全部で12点。

あと、HTML::FillInForm::Liteのescapeオプションとか便利そうなものも追加しております。

テストコードに関しては「Index of /cota/archives/37/」から拝借。やっぱPerlのテストに慣れてるのでこれは便利。

ただ、is_deeply等サポートされてないものも結構あるのでちゃんとしたものが欲しいところ。誰か作ってくれないかなぁ。

あとテストを全体で動かすためにprove.phpってのを自作。カナリ適当に作ったんだけど折角だし以下にコードを張っときます。

<?php

$files = glob('*.t.php');

$max_length = 0;
foreach ( $files as $file ) {
    if ( strlen($file) > $max_length ) {
        $max_length = strlen($file);
    }
}
$max_length += 5;

print count($files)." files test start\n\n";
ob_flush();

$err_global = 0;
foreach ( $files as $file ) {
    print $file;
    print str_repeat('.',$max_length-strlen($file));
    $output = `php $file`;
    $data = preg_split('/^((?:not )?ok \d+)/sm',$output,-1,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
    $i = 0;
    $err = 0;
    foreach ( $data as $val ) {
        if ( preg_match('/^not ok \d+$/',$val) ) {  
            print "not ok". $data[$i+1];
            $err = 1;
            $err_global++;
        }
        $i++;
    }
    if (!$err) {
        print "ok\n";
    }
    ob_flush();
}

if ( $err_global ) {
    print "\n$err_global test error\n";
}
else {
    print "\ntest all ok";
}

prove.phpを動かすとカレントディレクトリに存在する*.t.phpを全て実行し、テストを完了させることができる。出力結果は以下のような感じになる。

[HTML_FillInForm-0.02\t]$ php prove.php

23 files test start

00_base.t.php.................ok
01_form.t.php.................ok
02_hidden.t.php...............ok
03_checkbox.t.php.............ok
04_select.t.php...............ok
05_textarea.t.php.............ok
06_radio.t.php................ok
07_reuse.t.php................ok
08_multiple_objects.t.php.....ok
09_default_type.t.php.........ok
10_escape.t.php...............ok
11_target.t.php...............ok
12_mult.t.php.................ok
13_textfield.t.php............ok
14_password.t.php.............ok
15_multiple_flields.t.php.....ok
16_ignore_fields.t.php........ok
17_xhtml.t.php................ok
18_ignore_fdat.t.php..........ok
19_extra.t.php................ok
20_scalarref.t.php............ok
21_disable_fields.t.php.......ok
22_escape_option.t.php........ok

test all ok

かなりそれっぽい出力でしょう?><

ってことで。


ソースはCodeRepos
http://coderepos.org/share/browser/lang/php/HTML_FillInForm

tarはこちら↓
HTML_FillInForm