5.8.1 recently started failing 2 tests in op/cproto.t, on pop(), shift();
this only happens on one box, ie RH-7.2, not RH-9, and I havent tried a make distclean, so I havent reported it to p5p.
Instead I decided that some false laziness was in order, and I should go digging.
But, I thought it would be handy to run only those 2 tests, ie:
[EMAIL PROTECTED] t]$ ./perl op/cproto.t 130 178
which when run, gives:
....(debugging elided) 1..234 not ok 130 - pop # Failed test (../lib/Test/More.pm at line 332) not ok 178 - shift # Failed test (../lib/Test/More.pm at line 332) WHOA! Somehow you got a different number of results than tests ran! This should never happen! Please contact the author immediately! END failed--call queue aborted, <DATA> line 234.
I did this by hacking horribly on Test::Builder so that it
1. reads @ARGV to know what test numbers to run. (130, 178 above)
*yes, action at a distance*, but it allows Test::More users to get selective,
nominally w/o breaking tests
( not quite - failures now 11, not 2, using the patch)
2. skips tests that arent in @ARGV, if @ARGV;
3. <contrite sincerity='low' ulterior-motive='flame-retardance'>
I moved the is_*() functions into a subclass, then either package-aliased them
or eval'd a new baseclass function which conditionally calls the sub-class one.
It should be faster than just wrapping funcs with conditionals, and felt less like
cut-paste programming...
Interestingly, I had to clone the BEGIN {require threads} block into the sub-class
package too.
also, I used our $Level, from 5.6, cuz it fixed localization probs between base and subclass.
</contrite>
Im certain the implementation is *unsuitable*, but Id like to advocate some
cmdline option which would allow constraining the test-list to the 'interesting' ones.
It could be helpful when using debugger on tests (ive had issues with stepping thru
<DATA> sets in the past (charnames,iirc), though not with this test)
./perl op/cproto.t -testonly=130,178
Anyway, patch is attached for your amusement
--jimc
ps. make distclean would have been quicker ;-)
30,31c30 < #use vars qw($Level); < our $Level; --- > use vars qw($Level); 278,292d276 < package Test::Builder::Funcs; < < BEGIN { < use Config; < if( $] >= 5.008 && $Config{useithreads} ) { < require threads; < require threads::shared; < threads::shared->import; < } < else { < *share = sub { 0 }; < *lock = sub { 0 }; < } < } < 384d367 < #$Level = $Test::Builder::Level + 1; 401d383 < #local $Level = $Test::Builder::Level + 1; 460d441 < # local $Level = $Test::Builder::Level + 1; 477d457 < # local $Level = $Test::Builder::Level + 1; 515d494 < # local $Level = $Test::Builder::Level + 1; 521a501 > local $Level = $Level + 1; 570d549 < # local $Level = $Test::Builder::Level + 1; 621d599 < # local $Level = $Test::Builder::Level + 1; 646,688d623 < < our @TestOnly = @ARGV; < < package Test::Builder; < < { # unless (@ARGV) { < # no test-list args given, run all tests normally. < # basically, we'll insure that above sub-class functions are 'exported' up < no strict 'refs', 'subs'; < foreach my $sub (keys %Test::Builder::Funcs::) { < next unless *{'Test::Builder::Funcs::'.$sub}{CODE}; < unless (@TestOnly) { < print "Funcs::$sub\n"; < *{'Test::Builder::'.$sub} = *{'Test::Builder::Funcs::'.$sub}{CODE}; < } else { < next if *{'Test::Builder::'.$sub}{CODE}; < my $proto = prototype('Test::Builder::Funcs::'.$sub); < print __PACKAGE__, "::$sub ($proto)\n"; < my $code = qq{ < #share (\$Curr_Test); < sub $sub { < unless (grep {\$_ == \$Curr_Test+1} [EMAIL PROTECTED]) { < print "ok - skipping \$Curr_Test per cmdln args\\n"; < \$Curr_Test++; < return 1; < } < goto &{Test::Builder::Funcs::$sub}; < }; < }; < print "compiling: $code\n"; < eval "$code"; < warn $@ if $@; < } < } < # check it < foreach my $sub (keys %Test::Builder::) { < next unless *{'Test::Builder::Funcs::'.$sub}{CODE}; < next unless *{'Test::Builder::'.$sub}{CODE}; < print "defined $sub\n"; < < } < } <