| Test-Count documentation | Contained in the Test-Count distribution. |
Test::Count::FileMutator - modify a file in place
%args may contain the following:
The filename of the file to mutate.
Passed to Test::Count.
The prefix regex for detecting a plan line: i.e: a line that specifies how many tests to run. Followed immediately by a sequence of digits containing the number of tests. The latter will be updated with the number of tests.
Can be a regex or a string.
Modify the file in-place.
use Test::Count::Parser;
my $parser = Test::Count::Parser->new();
$parser->update_assignments($string);
$parser->update_count($string);
my $value = $parser->get_count();
After initiating a parser one can input assignment expressions, and count update expressions. Both of them use arithmetic operations, integers, and Perl-like variable names.
At the end one should call $parser-get_count()> in order to get the
total number of tests.
Updates the parser's state based on the assignments in $mytext. For
example if $mytext is:
$myvar=500;$another_var=8+$myvar
Then at the end $myvar would be 500 and $another_var would be 508.
Adds the expression inside $mytext to the internal counter of the
module. This is in order to count the tests.
Get the total number of tests in the parser.
Shlomi Fish, http://www.shlomifish.org/ .
Please report any bugs or feature requests to
bug-test-count-parser at rt.cpan.org, or through the web interface at
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test::Count.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
You can find documentation for this module with the perldoc command.
perldoc Test::Count
You can also look for information at:
Copyright 2006 Shlomi Fish.
This program is released under the following license: MIT X11.
| Test-Count documentation | Contained in the Test-Count distribution. |
package Test::Count::FileMutator; use warnings; use strict; use base 'Test::Count::Base'; use Test::Count;
our $VERSION = '0.0702'; sub _counter { my $self = shift; if (@_) { $self->{'_counter'} = shift; } return $self->{'_counter'}; } sub _filename { my $self = shift; if (@_) { $self->{'_filename'} = shift; } return $self->{'_filename'}; } sub _plan_prefix_regex { my $self = shift; if (@_) { $self->{'_plan_prefix_regex'} = shift; } return $self->{'_plan_prefix_regex'}; } sub _assert_prefix_regex { my $self = shift; if (@_) { $self->{'_assert_prefix_regex'} = shift; } return $self->{'_assert_prefix_regex'}; }
sub _init { my $self = shift; my $args = shift; $args->{plan_prefix_regex} ||= qr{(?:(?:use Test.*\btests)|plan tests)\s*=>\s*}; # Remmed out because Test::Count handles it by itself. # if (defined($args->{assert_prefix_regex})) # { # $self->_assert_prefix_regex($args->{assert_prefix_regex}); # } $self->_plan_prefix_regex($args->{plan_prefix_regex}); $self->_filename($args->{filename}); $self->_counter(Test::Count->new($args)); return 0; }
sub modify { my $self = shift; my $ret = $self->_counter()->process(); my $count = $ret->{tests_count}; my $plan_re = $self->_plan_prefix_regex(); my @lines = @{$ret->{lines}}; open my $out_fh, ">", $self->_filename() or die "Could not open file '" . $self->_filename() . "' for writing - $!."; LINES_LOOP: while (my $l = shift(@lines)) { if ($l =~ s{^($plan_re)\d+}{$1$count} ) { print {$out_fh} $l; last LINES_LOOP; } else { print {$out_fh} $l; } } print {$out_fh} @lines; close($out_fh); return 0; }
sub update_assignments { my ($self, $args) = @_; return $self->_parser()->assignments($args->{text}); }
sub update_count { my ($self, $args) = @_; return $self->_parser()->update_count($args->{text}); }
sub get_count { my $self = shift; return $self->_parser()->{count}; }
1; # End of Test::Count::Parser