One of our test frameworks at the BBC has difficulties using TODO testing due to the declarative nature of the tests being written in YAML. There is now a patch in RT which allows us fine-grained control over TODO tests. It basically lets us do things like this:
my $builder = Test::Builder->new; foreach my $test_case ($framework->cases) { if ( my $message = $test_case->todo ) { $builder->start_todo($message); $test_case->run; $builder->end_todo; } else { $test_case->run; } }
Going through our test framework and wrapping every possible test in an optional TODO is rather problematic, but trying to use a fully-qualified $TODO package variable (as documented in Test::Builder) is equally problematic as there are many packages, not all of which we know in advance. This allows us easily to mark as 'TODO' entire test cases.
We're implementing this today because lack of a feature like this is causing us much grief.
(As a needed side-effect, you can now nest TODO tests with this syntax).