Mercurial > pub > Impl
comparison Lib/IMPL/Test/Straps.pm @ 0:03e58a454b20
Создан репозитарий
| author | Sergey |
|---|---|
| date | Tue, 14 Jul 2009 12:54:37 +0400 |
| parents | |
| children | 16ada169ca75 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:03e58a454b20 |
|---|---|
| 1 package IMPL::Test::Straps; | |
| 2 use strict; | |
| 3 use warnings; | |
| 4 | |
| 5 use base qw(Test::Harness::Straps IMPL::Object IMPL::Object::Autofill IMPL::Object::Serializable); | |
| 6 use IMPL::Class::Property; | |
| 7 | |
| 8 __PACKAGE__->PassThroughArgs; | |
| 9 | |
| 10 BEGIN { | |
| 11 public property Executors => prop_all | prop_list; | |
| 12 } | |
| 13 | |
| 14 sub new { | |
| 15 my $class = shift; | |
| 16 my $this = $class->Test::Harness::Straps::new(); | |
| 17 | |
| 18 $this->callCTOR(@_); | |
| 19 | |
| 20 return $this; | |
| 21 } | |
| 22 | |
| 23 sub surrogate { | |
| 24 my $class = shift; | |
| 25 return $class->Test::Harness::Straps::new(); | |
| 26 } | |
| 27 | |
| 28 sub analyze_file { | |
| 29 my($self, $file) = @_; | |
| 30 | |
| 31 unless( -e $file ) { | |
| 32 $self->{error} = "$file does not exist"; | |
| 33 return; | |
| 34 } | |
| 35 | |
| 36 unless( -r $file ) { | |
| 37 $self->{error} = "$file is not readable"; | |
| 38 return; | |
| 39 } | |
| 40 | |
| 41 # *sigh* this breaks under taint, but open -| is unportable. | |
| 42 my $h = $self->ExecuteFile($file); | |
| 43 unless ($h) { | |
| 44 print "can't run $file. $!\n"; | |
| 45 return; | |
| 46 } | |
| 47 | |
| 48 my $results = $self->analyze_fh($file, $h); | |
| 49 my $exit = close $h; | |
| 50 | |
| 51 $results->set_wait($?); | |
| 52 if ( $? && $self->{_is_vms} ) { | |
| 53 $results->set_exit($?); | |
| 54 } | |
| 55 else { | |
| 56 $results->set_exit( Test::Harness::Straps::_wait2exit($?) ); | |
| 57 } | |
| 58 $results->set_passing(0) unless $? == 0; | |
| 59 | |
| 60 $self->_restore_PERL5LIB(); | |
| 61 | |
| 62 return $results; | |
| 63 } | |
| 64 | |
| 65 sub SelectExecutor { | |
| 66 my ($this,$file) = @_; | |
| 67 | |
| 68 return $_->{Executor} foreach grep $file =~ /$_->{Re}/i, $this->Executors; | |
| 69 } | |
| 70 | |
| 71 sub ExecuteFile { | |
| 72 my ($this,$file) = @_; | |
| 73 | |
| 74 if (my $executor = $this->SelectExecutor($file)) { | |
| 75 return $executor->Execute($file); | |
| 76 } | |
| 77 return undef; | |
| 78 } | |
| 79 | |
| 80 sub Execute { | |
| 81 my ($self,$file) = @_; | |
| 82 | |
| 83 local $ENV{PERL5LIB} = $self->_INC2PERL5LIB; | |
| 84 | |
| 85 open my $h,'-|',$self->_command_line($file) or return undef; | |
| 86 | |
| 87 return $h; | |
| 88 } | |
| 89 | |
| 90 1; |
