ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/Utilities/TestClass.pm
(Generate patch)

Comparing COMP/SCRAM/src/Utilities/TestClass.pm (file contents):
Revision 1.1 by williamc, Thu Jun 24 14:46:14 1999 UTC vs.
Revision 1.8 by williamc, Wed Jan 26 12:03:37 2000 UTC

# Line 3 | Line 3
3   #
4   # Interface
5   # ---------
6 < # new($module,testdatadir,project) : module example - Utilities/urlhandler
6 > # new($module,testdatadir) : module example - Utilities/urlhandler
7   # dotest(@args) : Start testing - arguments dependent on inheriting class
8   #
9   # newtest() : Initiate a testing sequence
10   # verify(actual_result_file, expected_result_file) : compare two files
11   # verifydir(dir) : Check existence of the directory
12 + # verifyexists(file) : Verify the existence of file
13   # datadir([dir]) : return the current data directory (set it to dir if supplied)
14 < # ------------------- Private Methods ----------------------------------
14 > # testfail(string) : report that current test has failed
15 > # testpass(string) : report that current test has passed
16   # newfilename() : return a new filename that can be opened etc.
17   # temparea() : return a directory for building temporary stuff
18   # newobject(@args) : Set up a new object to be tested
19   # testinterface($name,@args) : perform interface tests for $name with @args
20   # expect(string) : tell the testinterface of any expected return values
21   # clearexpect()  : Reset any expect variables.
22 + #cleantemp()    : delete the temporary area
23  
24 < package TestClass;
24 > package Utilities::TestClass;
25   require 5.004;
26   $bold  = "\033[1m";
27   $normal = "\033[0m";
# Line 29 | Line 32 | sub new {
32          my $fullmodule=shift;
33          chomp $fullmodule;
34          my $datadir=shift;
32        my $project=shift;
35  
36          # The usual Object blessing
37          $self={};
# Line 38 | Line 40 | sub new {
40          #some local working variables
41          my $testmodule;
42          my $module;
43 <        my $dir;
44 <        if ( $fullmodule=~/\// ) {
45 <          ($dir=$fullmodule)=~s/(.*\/)(.*)/$1/;
46 <        }
43 >        my $dir="";
44 > #       if ( $fullmodule=~/\// ) {
45 > #         ($dir=$fullmodule)=~s/(.*\/)(.*)/$1/;
46 > #       }
47 >        if ( $fullmodule=~/::/ ) {
48 >          ($dir=$fullmodule)=~s/(.*::)(.*)/$1/;
49 >        }
50          else { $dir="" }
51 <        ($testmodule=$fullmodule)=~s/(.*\/)(.*)/$1test\/test_$2/;
52 <        ($testmodule=$fullmodule)=~s/${dir}(.*)/${dir}test\/test_$1/;
51 >        ($testmodule=$fullmodule)=~s/(.*\/)(.*)/$1test::test_$2/;
52 >        ($testmodule=$fullmodule)=~s/${dir}(.*)/${dir}test::test_$1/;
53          ($module=$testmodule)=~s/.*\///g;
54  
50        # Data Initialisation
51        $self->{project}=$project;
55          $self->{class}=$module;
56          $self->{"datadir"}=$datadir;
57          $self->{filenumber}=0;
58 +        $self->{temparea}="/tmp/SCRAMtest++";
59 +        use File::Path;
60 +        mkpath ($self->{temparea},0, 0777);
61  
62          # Now setup a new testobject of the appropriate type
63 <        require $testmodule."\.pm";
63 >        eval "require $testmodule";
64 >        die $@ if $@;
65          $self->{testobj}=$module->_new($self, $fullmodule);
66  
67 +        # make sure the temparea is cleaned
68 +        use File::Path;
69 +        rmtree($self->temparea());
70 +
71          return $self;
72   }
73  
# Line 83 | Line 94 | sub newtest {
94          my $self=shift;
95          my $string=shift;
96          $self->{testnumber}++;
97 <        $self->_testout();
97 >        $self->_testout("");
98          $self->_testout("---------------------------* Test $self->{testnumber}".
99                                  " *------------------------------");
100          $self->_testout("|  $string ");
# Line 104 | Line 115 | sub verify {
115          open ( FILE1, "<$file1" ) or die "Cannot Read Test Output $file1 $!\n";
116          open ( FILE2, "<$file2" ) or die "Cannot Read Benchmark file ".
117                                                          "$file2 $!\n";
118 <        while ( $f1=<FILE1> ) {
119 <         $f2=<FILE2>;
120 <         if ( $f2 ne $f1 ) {
121 <           print "T:\n$f1\nB:$f2\n";
118 >        while ( $f1=<FILE2> ) {
119 >         $f2=<FILE1>;
120 >         if ( (!defined $f2 ) || ( ! defined $f1) || ($f2 ne $f1 )) {
121 >           #print "T:\n$f1\nB:$f2\n";
122             $same=0;
123           }
124          }
# Line 123 | Line 134 | sub verifydir {
134          my $name=shift;
135  
136          if ( -d "$name" ) {
137 <           $self->testpass();
137 >           $self->testpass("Directory $name exists - test passed");
138          }
139          else {
140             $self->testfail("Directory $name does not exist");
141          }
142   }
143  
144 + sub verifyexists {
145 +        my $self=shift;
146 +        my $name=shift;
147 +
148 +        if ( -e "$name" ) {
149 +           $self->testpass("$name exists - test passed");
150 +        }
151 +        else {
152 +           $self->testfail("$name does not exist");
153 +        }
154 + }
155 +
156   sub testfail {
157          my $self=shift;
158          my $string=shift;
# Line 196 | Line 219 | sub _new {
219  
220          # Data Initialisation
221          $self->{testclass}=$class;
222 <        $self->{classname}=$module;
222 >        ($self->{classname}=$module)=~s/::/\//g;
223          ($self->{class}=$module)=~s/.*\///g;
224          $self->{classfile}=$ENV{SCRAM_HOME}."/src/".$self->{classname}."\.pm";
202        $self->{testclassfile}=$path."/test/".$self->{testclass}."\.pm";
225          $self->init(@_);
226          $self->analyseInterface();
227          delete $self->{expect};
# Line 213 | Line 235 | sub testinterface {
235          my $self=shift;
236          my $subname=shift;
237          my $myreturn;
238 +        my $expected;
239  
240          $self->_checkdoc($subname);
241          $self->{inttest}{$subname}++;
242          $self->_testout(">Trying interface $subname ");
243          my $args=join ', ', @_;
244          $self->_testout( " (".$args.")" );
245 +        $num=0;
246          if ( exists $self->{expect} ) {
247 <          @myreturn=($self->{object}->$subname(@_));
248 <          if ( "@myreturn" eq $self->{expect} ) {
249 <            $self->testpass("OK - returned as expected");
250 <          }
251 <          else  {
252 <            $self->testfail("Expecting $self->{expect}, got @myreturn");
247 >         @mylist=eval { $self->{object}->$subname(@_); };
248 >          die "Test Failed $@\n" if $@;
249 >         if ( defined @mylist ) {
250 >         # size check
251 >         if ( $#mylist < $#{$self->{expect}} ) {
252 >                $self->testfail("not enough returned values");
253 >         }
254 >         foreach $myreturn ( @mylist ) {
255 >          if ( ! defined $myreturn ) {
256 >                print "Undefined Value Passed Back\n";
257            }
258 <          return @myreturn;
258 >          elsif ( $myreturn=~/HASH/ ) {
259 >             print "Hash Ref ".ref($myreturn)." returned\n";
260 >          }
261 >          elsif ( $myreturn=~/CODE/ ) {
262 >             print "Code Ref returned\n";
263 >          }
264 >          elsif ( $myreturn=~/ARRAY/ ) {
265 >            print "Array Ref returned\n";
266 >          }
267 >          else {
268 >            $expected=$self->{expect}[$num++];
269 >            if ( $myreturn eq $expected ) { #simple return case
270 >             $self->testpass("OK - returned as expected ($expected)");
271 >            }
272 >            else  {
273 >              $self->testfail("Expecting $expected, got ".
274 >                                                $myreturn);
275 >            }
276 >          }
277 >        } # end foreach block
278 >        }
279 >          return @mylist;
280          }
281          else {
282            return ($self->{object}->$subname(@_));
# Line 239 | Line 288 | sub testinterface {
288   #
289   sub expect {
290          my $self=shift;
242        my $string=shift;
291  
292 <        $self->{expect}=$string;
292 >        push @{$self->{expect}}, @_;
293   }
294  
295   sub clearexpect {
# Line 339 | Line 387 | sub analyseInterface {
387          }
388          close SRCIN;
389   }
390 +
391 + sub cleantemp {
392 +        my $self=shift;
393 +        use File::Path;
394 +        rmtree($self->temparea());
395 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines