X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=lib%2FZOOM%2FIRSpy.pm;h=dbe569a3dcd58a9d4b72595f9e2b67100b7263ad;hb=ac3a873807507e0f454bbba908e90618593e3684;hp=aad702c337e40d7fc2895da6592c0ccfcc90d9d8;hpb=9f74222ecbca15c4ca23236b07c08c2ced5d2430;p=irspy-moved-to-github.git diff --git a/lib/ZOOM/IRSpy.pm b/lib/ZOOM/IRSpy.pm index aad702c..dbe569a 100644 --- a/lib/ZOOM/IRSpy.pm +++ b/lib/ZOOM/IRSpy.pm @@ -1,4 +1,4 @@ -# $Id: IRSpy.pm,v 1.31 2006-10-13 15:17:25 mike Exp $ +# $Id: IRSpy.pm,v 1.34 2006-10-18 10:22:54 mike Exp $ package ZOOM::IRSpy; @@ -338,7 +338,7 @@ sub check { my $task = $conn->next_task(); die "no next task queued for $conn" if !defined $task; - $conn->log("irspy_task", "starting task $task"); + $conn->log("irspy_task", "preparing task $task"); $conn->next_task(0); $conn->current_task($task); $task->run(); @@ -404,13 +404,18 @@ sub check { } elsif ($res == ZOOM::IRSpy::Status::TEST_GOOD || $res == ZOOM::IRSpy::Status::TEST_BAD) { my $x = ($res == ZOOM::IRSpy::Status::TEST_GOOD) ? "good" : "bad"; + $conn->log("irspy_task", "test ended during task $task ($x)"); $conn->log("irspy_test", "test completed ($x)"); $conn->current_task(0); $conn->next_task(0); if ($res == ZOOM::IRSpy::Status::TEST_BAD) { - ### Should skip over remaining sibling tests if TEST_BAD - ### Should count the number of skipped siblings - $nskipped += 1; + my $address = $conn->option('current_test_address'); + ($address, my $n) = $this->_last_sibling_test($address); + if (defined $address) { + $conn->log("irspy_test", "skipped $n tests"); + $conn->option(current_test_address => $address); + $nskipped += $n; + } } } } @@ -449,6 +454,7 @@ sub _gather_tests { } +# These next three should arguably be Node methods sub _next_test { my $this = shift(); my($address, $omit_child) = @_; @@ -473,6 +479,38 @@ sub _next_test { } +sub _last_sibling_test { + my $this = shift(); + my($address) = @_; + + return undef + if !defined $this->_next_sibling_test($address); + + my $nskipped = 0; + while (1) { + my $maybe = $this->_next_sibling_test($address); + last if !defined $maybe; + $nskipped++; + $this->log("irspy", "skipping $nskipped tests to '$address'"); + $address = $maybe; + } + + return ($address, $nskipped); +} + + +sub _next_sibling_test { + my $this = shift(); + my($address) = @_; + + my @components = split /:/, $address; + my $last = pop @components; + my $maybe = join(":", @components, $last+1); + return $maybe if $this->{tree}->select($maybe); + return undef; +} + + =head1 SEE ALSO ZOOM::IRSpy::Record,