Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

TODO blocks for Test::XML, and in general

by nglenn (Beadle)
on Sep 04, 2012 at 16:56 UTC ( #991654=perlquestion: print w/ replies, xml ) Need Help??
nglenn has asked for the wisdom of the Perl Monks concerning the following question:

I'm trying to use Test::XML::XPath, and I need to user Test::More's TODO block. It doesn't seem to work as stated in the Test::More documentation; this doesn't work:

use Test::More; use Test::XML::XPath; plan tests=>1; TODO: { local $TODO = 'testing todo block'; like_xpath('<xml-bad/>', '/xml', 'test test'); }

Running prove with the above test placed in 'test.t' gives the following output, failing the suite instead of passing it:

t\test.t .. t\test.t .. 1/1 # Failed test 'test test' # at C:/strawberry/perl/site/lib/Test/XML/XPath.pm line 55. # input: <xml-bad/> # does not match: /xml # Looks like you failed 1 test of 1. t\test.t .. Dubious, test returned 1 (wstat 256, 0x100) Failed 1/1 subtests Test Summary Report ------------------- t\test.t (Wstat: 256 Tests: 1 Failed: 1) Failed test: 1 Non-zero exit status: 1 Files=1, Tests=1, 1 wallclock secs ( 0.19 usr + 0.14 sys = 0.33 CPU +) Result: FAIL

I wanted to try and write/send a patch for the module, but I realized I have no idea what I'm doing :) Looking at the source for Test::More, I do not understand how TODO blocks work. Looking at the source for Test::XML::XPath, I see that it uses Test::Builder and Test::More, but I have no idea how you would have to write the code to make it compliant with Test::More's TODO, TODO_skip, and SKIP blocks. Can anyone explain a) how the block functionality is implemented in Test::More and b) the proper way to write a testing module that preserves this functionality?

Comment on TODO blocks for Test::XML, and in general
Select or Download Code
Re: TODO blocks for Test::XML, and in general
by MidLifeXis (Monsignor) on Sep 04, 2012 at 17:15 UTC

    Can you add the actual output and what you expect the output to be? For example, on my machine, I get:

    #$ perl -MTest::More -e 'plan "no_plan";TODO:{local $TODO="foo bar"; f +ail("blog");}' not ok 1 - blog # TODO foo bar # Failed (TODO) test 'blog' # at -e line 1. 1..1

    This is a valid TODO test (and a harness would mark the test suite as passed, even though it looks like it has failed). I don't have Test::XML::XPath installed, so just in case this is more of a case of improper expectations, pasting what you are seeing might help.

    --MidLifeXis

      I updated it. Running with prove shows that the test causes the entire test suite to fail.

        Stupid question, but does my snippet above emit a TODO test?

        I also rebuilt the like_xpath routine after removing the lines making use of the XPath parser (see below). What output do you get from it?

        use strict; use warnings; use Carp; use Test::More; use Test::Builder; sub like_xpath { my ($input, $statement, $test_name) = @_; die "usage: like_xpath(xml,xpath[,name])" unless $input && $statement; my $Test = Test::Builder->new; my $ok = eval { # Hardcode a failure return 0; }; if ($@) { $Test->ok( 0, $test_name ); $Test->diag( " Parse Failure: $@" ); return 0; } else { ok( $ok, $test_name ); unless ( $ok ) { diag ( " input: $input" ); diag ( " does not match: $statement" ); } return $ok; } } plan tests=>1; TODO: { local $TODO = 'testing todo block'; like_xpath('<xml-bad/>', '/xml', 'test test'); }

        --MidLifeXis

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://991654]
Front-paged by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (8)
As of 2015-07-05 21:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (68 votes), past polls