#! /usr/local/bin/perl package Product::Driver; use strict; use warnings; use Moose; has counter => ( isa => 'Int', default => 0, reader => 'value' ); sub add_one { my ( $self ) = @_; return ++$self->{'counter'}; } sub subtract_one { my ( $self ) = @_; return --$self->{'counter'}; } sub add_number { my ( $self, $amount ) = @_; return $self->{'counter'} += $amount; } sub subtract_number { my ( $self, $amount ) = @_; return $self->{'counter'} -= $amount; } sub reset_counter { my ( $self ) = @_; return $self->{'counter'} = 0; } 1; #### #! /usr/local/bin/perl package ScriptRunner; use strict; use warnings; use Product::Driver; use MooseX::Singleton; has driver => ( isa => 'Product::Driver' ); #Not yet implemented #has recorder => ( does => 'Tester::Recorder', required => 1 ); sub BUILD { my ( $self ) = @_; $self->_init_driver(); } sub _init_driver { my $self = ref($_[0]) ? shift : ScriptRunner->new(); $self->{'driver'} = Product::Driver->new(); } sub close_driver { my $self = ref($_[0]) ? shift : ScriptRunner->new(); $self->{'driver'} = undef; } sub start_driver { my $self = ref($_[0]) ? shift : ScriptRunner->new(); if ( $self->{'driver'} == undef ) { $self->_init_driver(); } } sub restart_driver { my $self = ref($_[0]) ? shift : ScriptRunner->new(); $self->close_driver(); $self->start_driver(); } sub check_success { my ( $self ) = ScriptRunner->new(); my $val = ( $_[0] ne '' ) ? $_[0] : 0; my $msg = $_[1] ? $_[1] : "Unknown Event"; # Eventually, instead of printing the result, there would be a # recorder module that would be available to record the test # results in some convenient, meaningful way. But for now... printf "%-20s%s\n", $val ? "PASSED TEST" : "FAILED TEST", $msg; } sub add_one { my ( $self ) = ScriptRunner->new(); return $self->{'driver'}->add_one; } sub add_number { my ( $self ) = ScriptRunner->new(); my ( $amount ) = @_; return $self->{'driver'}->add_number($amount); } sub subtract_one { my ( $self ) = ScriptRunner->new(); return $self->{'driver'}->subtract_one; } sub subtract_number { my ( $self ) = ScriptRunner->new(); my ( $amount ) = @_; return $self->{'driver'}->subtract_number($amount); } sub value { my ( $self ) = ScriptRunner->new(); return $self->{'driver'}->value; } sub reset_counter { my ( $self ) = ScriptRunner->new(); return $self->{'driver'}->reset_counter; } sub do_script { my $self = ref($_[0]) ? shift : ScriptRunner->new(); my ( $file ) = @_; if ( ! -f $file ) { die "$file not found!" } my $res = do $file; if ( $@ ) { die "Can't do $file\n", $@ } return $res; } 1; #### #! /usr/local/bin/perl use strict; use warnings; use lib "./lib"; use ScriptRunner; my $runner = ScriptRunner->new(); # Do any necessary environmental setup here. Since this is # just a demo, there's nothing really to do. foreach my $f ( @ARGV ) { print "Running script file: $f\n"; $runner->do_script($f) } #### my $string = ''; $string .= add_one(); $string .= " "; $string .= add_number(50); $string .= " "; $string .= subtract_one(); $string .= " "; $string .= subtract_number(45); $string .= " "; $string .= value(); check_success ( $string eq "1 51 50 5 5", "This is a comment" ); return ( $string );