表題のものができました。
どういうことかというと、たとえば以下のようなテストを走らせると、
use strict; use warnings; use Test2::V0; use Test2::Plugin::MakeFailedTestTODO; ok 0; fail 'failed'; pass 'passed'; is 1, 0, 'multiline'; subtest 'foo' => sub { ok 0; }; done_testing;
テストが終わった後には以下のような内容に書き換えられて、同じテストを2回走らせると、落ちたテストが全部todoになっているのでpassします。
use strict; use warnings; use Test2::V0; use Test2::Plugin::MakeFailedTestTODO; todo 'by Test2::Plugin::MakeFailedTestTODO' => sub { ok 0; }; todo 'by Test2::Plugin::MakeFailedTestTODO' => sub { fail 'failed'; }; pass 'passed'; todo 'by Test2::Plugin::MakeFailedTestTODO' => sub { is 1, 0, 'multiline'; }; subtest 'foo' => sub { todo 'by Test2::Plugin::MakeFailedTestTODO' => sub { ok 0; }; }; done_testing;
PPIを使って落ちたテストに該当する文をパースして、todoを組み立てて書き戻す、というのをやっています。なので、複数行のテストでも、インデントの感じはよくないけどちゃんとtodoにできています。
便利なグッズができたと思ったのですが、当初これを使って解決しようと思っていた課題に対しては、もうちょっと簡単で良いアプローチがあるというのに気づいたので供養という形になります。今のところCPANizeの予定はありません。