]> git.saurik.com Git - apple/security.git/blobdiff - SecurityTests/regressions/inc/Test/Harness/Results.pm
Security-57031.1.35.tar.gz
[apple/security.git] / SecurityTests / regressions / inc / Test / Harness / Results.pm
diff --git a/SecurityTests/regressions/inc/Test/Harness/Results.pm b/SecurityTests/regressions/inc/Test/Harness/Results.pm
new file mode 100644 (file)
index 0000000..4b86bd7
--- /dev/null
@@ -0,0 +1,182 @@
+# -*- Mode: cperl; cperl-indent-level: 4 -*-
+package Test::Harness::Results;
+
+use strict;
+use vars qw($VERSION);
+$VERSION = '0.01_01';
+
+=head1 NAME
+
+Test::Harness::Results - object for tracking results from a single test file
+
+=head1 SYNOPSIS
+
+One Test::Harness::Results object represents the results from one
+test file getting analyzed.
+
+=head1 CONSTRUCTION
+
+=head2 new()
+
+    my $results = new Test::Harness::Results;
+
+Create a test point object.  Typically, however, you'll not create
+one yourself, but access a Results object returned to you by
+Test::Harness::Results.
+
+=cut
+
+sub new {
+    my $class = shift;
+    my $self  = bless {}, $class;
+
+    return $self;
+}
+
+=head1 ACCESSORS
+
+The following data points are defined:
+
+  passing           true if the whole test is considered a pass 
+                    (or skipped), false if its a failure
+
+  exit              the exit code of the test run, if from a file
+  wait              the wait code of the test run, if from a file
+
+  max               total tests which should have been run
+  seen              total tests actually seen
+  skip_all          if the whole test was skipped, this will 
+                      contain the reason.
+
+  ok                number of tests which passed 
+                      (including todo and skips)
+
+  todo              number of todo tests seen
+  bonus             number of todo tests which 
+                      unexpectedly passed
+
+  skip              number of tests skipped
+
+So a successful test should have max == seen == ok.
+
+
+There is one final item, the details.
+
+  details           an array ref reporting the result of 
+                    each test looks like this:
+
+    $results{details}[$test_num - 1] = 
+            { ok          => is the test considered ok?
+              actual_ok   => did it literally say 'ok'?
+              name        => name of the test (if any)
+              diagnostics => test diagnostics (if any)
+              type        => 'skip' or 'todo' (if any)
+              reason      => reason for the above (if any)
+            };
+
+Element 0 of the details is test #1.  I tried it with element 1 being
+#1 and 0 being empty, this is less awkward.
+
+
+Each of the following fields has a getter and setter method.
+
+=over 4
+
+=item * wait
+
+=item * exit
+
+=cut
+
+sub set_wait { my $self = shift; $self->{wait} = shift }
+sub wait {
+    my $self = shift;
+    return $self->{wait} || 0;
+}
+
+sub set_skip_all { my $self = shift; $self->{skip_all} = shift }
+sub skip_all {
+    my $self = shift;
+    return $self->{skip_all};
+}
+
+sub inc_max { my $self = shift; $self->{max} += (@_ ? shift : 1) }
+sub max {
+    my $self = shift;
+    return $self->{max} || 0;
+}
+
+sub set_passing { my $self = shift; $self->{passing} = shift }
+sub passing {
+    my $self = shift;
+    return $self->{passing} || 0;
+}
+
+sub inc_ok { my $self = shift; $self->{ok} += (@_ ? shift : 1) }
+sub ok {
+    my $self = shift;
+    return $self->{ok} || 0;
+}
+
+sub set_exit { 
+    my $self = shift; 
+    if ($^O eq 'VMS') {
+        eval {
+            use vmsish q(status);
+            $self->{exit} = shift;  # must be in same scope as pragma
+        }
+    }
+    else {
+        $self->{exit} = shift;
+    }
+}
+sub exit {
+    my $self = shift;
+    return $self->{exit} || 0;
+}
+
+sub inc_bonus { my $self = shift; $self->{bonus}++ }
+sub bonus {
+    my $self = shift;
+    return $self->{bonus} || 0;
+}
+
+sub set_skip_reason { my $self = shift; $self->{skip_reason} = shift }
+sub skip_reason {
+    my $self = shift;
+    return $self->{skip_reason} || 0;
+}
+
+sub inc_skip { my $self = shift; $self->{skip}++ }
+sub skip {
+    my $self = shift;
+    return $self->{skip} || 0;
+}
+
+sub inc_todo { my $self = shift; $self->{todo}++ }
+sub todo {
+    my $self = shift;
+    return $self->{todo} || 0;
+}
+
+sub inc_seen { my $self = shift; $self->{seen}++ }
+sub seen {
+    my $self = shift;
+    return $self->{seen} || 0;
+}
+
+sub set_details {
+    my $self = shift;
+    my $index = shift;
+    my $details = shift;
+
+    my $array = ($self->{details} ||= []);
+    $array->[$index-1] = $details;
+}
+
+sub details {
+    my $self = shift;
+    return $self->{details} || [];
+}
+
+1;