Hi All.
I was impressed recently with py.test, a new-ish testing tool in the python world and wanted to snag one of their features for prove.
This patch adds a --session flag to prove that will make prove continually run and re-run any modified tests. Ideally, it would also re-run failed tests.
This is not designed as a replacement for a cron'd prove. The way i see it being used is in a terminal window adjacent to an editing session while trying to nail down a problem.
Thoughts?
-jason gessner
[EMAIL PROTECTED]23a24
> my $session = 0;
42a44
> 'session' => \$session,
80,87c82,121
< my @tests;
< @ARGV = File::Spec->curdir unless @ARGV;
< push( @tests, -d $_ ? all_in( $_ ) : $_ ) for map { glob } @ARGV;
<
< if ( @tests ) {
< shuffle(@tests) if $shuffle;
< if ( $dry ) {
< print join( "\n", @tests, "" );
---
> my @session_tests;
> my %test_mods;
>
> my $run_tests = 1;
>
> while ( $run_tests ) {
> my @tests;
>
> @ARGV = File::Spec->curdir unless @ARGV;
> push( @tests, -d $_ ? all_in( $_ ) : $_ ) for map { glob } @ARGV;
>
> if ( @tests ) {
> shuffle(@tests) if $shuffle;
> if ( $dry ) {
> print join( "\n", @tests, "" );
> } else {
> print "# ", scalar @tests, " tests to run\n" if
> $Test::Harness::debug;
>
> if ( $session ) {
> # if we are running in "session" mode, let's build our
> # list of tests out of the new files and modified files
> # only. The first run will have all of the files.
> my @sess_tests;
> foreach my $index ( 0 .. $#tests ) {
> if ( !exists $test_mods{$tests[$index]} || (stat
> $tests[$index])[9] > $test_mods{$tests[$index]} ) {
> push @sess_tests, $tests[$index];
> }
> }
> @tests = @sess_tests;
> }
>
> my $results = eval {runtests(@tests) } if @tests;
> }
> }
>
> if ( $session ) {
> sleep(5);
> foreach my $index ( 0 .. $#tests ) {
> $test_mods{$tests[$index]} = (stat $tests[$index])[9];
> }
89,90c123
< print "# ", scalar @tests, " tests to run\n" if $Test::Harness::debug;
< runtests(@tests);
---
> $run_tests = 0;
91a125
>
