Test::Baseのyamlフィルタで空配列を作るときの動作が理解できない
ある関数が空配列を返す事を期待したテストを書こうとしよう。
データはyaml形式で書くのが楽なので、そうする。
まずは、空配列の書き方を確かめよう。
use strict; use warnings; use Data::Dumper; use YAML::Syck; sub p { print Dumper shift } my $yaml = <<END; [] END p Load($yaml);
$VAR1 = [];
おk。じゃあテスト書こう。
use strict; use Test::Base; plan 'no_plan'; sub return_array_ref { [] } filters { i => [qw/return_array_ref/], e => [qw/yaml/], }; run_is_deeply; __END__ === 1st --- i --- e []
YAML Error: Expected separator '---' Code: YAML_PARSE_ERR_NO_SEPARATOR Line: 1 Document: 2 at /usr/lib/perl5/site_perl/5.8.5/YAML.pm line 33 # Looks like your test died before it could output anything.
え。また俺は間違えたのか。yaml形式すら書けなくなったのか。
そもそも間違ってるかもと疑って簡単な例を書いてみる。yamlのつもりで書いた部分がどう評価されるかdumperしてみる。
#!/bin/perl use strict; use Test::Base; plan 'no_plan'; sub return_array_ref { [] } filters { i => [qw/return_array_ref/], e => [qw/yaml dumper/], }; run_is_deeply; __END__ === 1st --- i --- e hoge: huga array: - one - two
not ok 1 - 1st # Failed test '1st' # at /usr/lib/perl5/site_perl/5.8.8/Test/Base.pm line 338. # Structures begin differing at: # $got = ARRAY(0x934dfe4) # $expected = '{ # 'array' => [ # 'one', # 'two' # ], # 'hoge' => 'huga' # } # ' 1..1 # Looks like you failed 1 test of 1.
yamlの書き方は間違ってないような気がする。
で、最初にしたかったことをするには、こう。
__END__ === 1st --- i --- e --- []
エラーメッセージ見て、こう書いたらいけんじゃね、と思ってやったらいけた。
何故だ。yamlフィルタは YAML::Load(shift) してるだけなのに。