On Fri, Jul 18, 2003 at 06:36:41PM +0100, Tony Bowden wrote:
> What's the current approach to turning perlbugs into tests?
> 
> Should they be done as TODOs? Is there a distinct set of test files for
> them? etc? Can they use Test::More?  etc. etc. etc.
> 
> e.g. http://bugs6.perl.org/rt2/Ticket/Display.html?id=5430
> 
> can have a fairly simple test like:
> 
>       package main;
>       eval '::is(__PACKAGE__, "main", "Package is main inside eval")';
>       package Foo;
>       eval '::is(__PACKAGE__, "Foo", "Package is Foo inside eval")';
> 
> But how we actually get that into the core somewhere?

Just stick it into the core as a normal TODO test.  This way we at least
know when it gets fixed and can close the bug.

In this case, t/op/eval.t.  Either Test::More can be used or t/test.pl, a 
similar interface that uses less Perl core features.  In the case of 
eval.t, use t/test.pl since its a pretty basic op.  There's some more
docs about this in perlhack.

Often, a test will not be written using Test::More or test.pl.  In that
case you can introduce new tests at the bottom and update the counter
manually using curr_test() so the old and new styles live together rather 
than having to rewrite the whole test.

--- t/op/eval.t 2003/07/19 04:13:11     1.1
+++ t/op/eval.t 2003/07/19 04:23:33
@@ -5,7 +5,8 @@
     @INC = '../lib';
 }
 
-print "1..91\n";
+require './test.pl';
+print "1..93\n";
 
 eval 'print "ok 1\n";';
 
@@ -381,7 +382,7 @@
     print DB::db5() == 3 ? 'ok' : 'not ok', " $test\n"; $test++;
     print db6()     == 4 ? 'ok' : 'not ok', " $test\n"; $test++;
 }
-require './test.pl';
+
 $NO_ENDING = 1;
 # [perl #19022] used to end up with shared hash warnings
 # The program should generate no output, so anything we see is on stderr
@@ -437,4 +438,15 @@
   print "$r$c" eq 'SS' ? "ok " : "# '$r$c' ne 'SS'\nnot ok ", $test++, "\n";
   eval $code;
   print   $c   eq 'V'  ? "ok " : "# '$c' ne 'V'\nnot ok ", $test++, "\n";
+}
+
+
+{
+  curr_test($test);
+  package main;
+  eval q{::is(__PACKAGE__, 'main', 'Package is main inside eval')};
+
+  local $TODO = 'Bug #5430';
+  package Foo;
+  eval q{::is(__PACKAGE__, 'Foo',  'Package is Foo inside eval')};
 }


TODO tests work fine in the core, but a normal 'make test' doesn't currently
report them.  'make test_harness' will, but they're still a little hard to
track down because the harnesses don't have much support for that part
at the moment.


-- 
"A Masterpiece."
"Well, better than average, maybe."

Reply via email to