Test::Count::FileMutator - modify a file in place


Test-Count documentation Contained in the Test-Count distribution.

Index


Code Index:

NAME

Top

Test::Count::FileMutator - modify a file in place

my $filter = Test::Count::Filter->new({%args});

%args may contain the following:

* filename

The filename of the file to mutate.

* assert_prefix_regex

Passed to Test::Count.

* plan_prefix_regex

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.

$filter->modify()

Modify the file in-place.

SYNOPSIS

Top

    use Test::Count::Parser;

    my $parser = Test::Count::Parser->new();

    $parser->update_assignments($string);

    $parser->update_count($string);

    my $value = $parser->get_count();

DESCRIPTION

Top

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.

FUNCTIONS

Top

$parser->update_assignments({'text' => $mytext,})

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.

$parser->update_count({'text' => $mytext,})

Adds the expression inside $mytext to the internal counter of the module. This is in order to count the tests.

my $count = $parser->get_count()

Get the total number of tests in the parser.

AUTHOR

Top

Shlomi Fish, http://www.shlomifish.org/ .

BUGS

Top

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.

SUPPORT

Top

You can find documentation for this module with the perldoc command.

    perldoc Test::Count

You can also look for information at:

* AnnoCPAN: Annotated CPAN documentation

http://annocpan.org/dist/Test::Count

* CPAN Ratings

http://cpanratings.perl.org/d/Test::Count

* RT: CPAN's request tracker

http://rt.cpan.org/NoAuth/Bugs.html?Dist=Test::Count

* Search CPAN

http://search.cpan.org/dist/Test::Count

SEE ALSO

Top

Test::Count, Test::Count::Parser

ACKNOWLEDGEMENTS

Top

COPYRIGHT & LICENSE

Top


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