GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Test2::Harness::Log::CoverageAggregator(3) User Contributed Perl Documentation Test2::Harness::Log::CoverageAggregator(3)

Test2::Harness::Log::CoverageAggregator - Module for aggregating coverage data from a stream of events.

This module takes a stream of events and produces aggregated coverage data.

    use Test2::Harness::Log::CoverageAggregator;

    my $agg = Test2::Harness::Log::CoverageAggregator->new();

    while (my $e = $log->next_event) {
        $agg->process_event($e);
    }

    # Get a structure like { source_file => { source_method => $touched_count, ... }, ...}
    my $touched_source = $agg->touched;

    # Get a structure like
    # {
    #     files => {total => 5,  tested => 2},
    #     subs  => {total => 20, tested => 12},
    #     untested => {files => \@file_list, subs => {file => \@sub_list, ...}},
    # }
    my $metrics = $agg->metrics;

If you implement these in a subclass they will be called for you at the proper times, making subclassing much easier. In most cases you can avoid overriding process_event().
$agg->start_test($test, $event)
This is called once per test when it starts.

Note: If a test is run more than once (re-run) it will start and stop again for each re-run. The event is also provided as an argument so that you can check for a try-id or similar in the event that re-runs matter to you.

$agg->stop_test($test, $event)
This is called once per test when it stops.

Note: If a test is run more than once (re-run) it will start and stop again for each re-run. The event is also provided as an argument so that you can check for a try-id or similar in the event that re-runs matter to you.

$agg->record_coverage($test, $coverage_data, $event)
This is called once per coverage event (there can be several in a test, specially if it forks or uses threads).

In most cases you probably want to leave this unimplemented and implement the "touch()" method instead of iterating over the coverage structure yourself.

$agg->touch(source => $file, sub => $sub, test => $test, manager_data => $mdata, event => $event)
Every touch applied to a source file (and sub) will trigger this method call.
source => $file
The source file that was touched
sub => $sub
The source subroutine that was touched. Note: This may be '<>' if the source file was opened via "open()" or '*' if code outside of a subroutine was executed by the test.
test => $test
The test file that did the touching.
manager_data => $mdata
If the test file makes use of a source manager to attach extra data to coverage, this is where that data will be. A good example would be test suites that use tools similar to Test::Class or Test::Class::Moose where all tests are run in methods and you want to track what test method does the touching. Please note that this level of coverage tracking is not automatic.
event => $event
The full event being processed.

$agg->process_event($event)
Process the event, aggregating any coverage info it may contain.
$touched = $add->touched()
Returns the following structure, which tells you how many times a specific source file's subroutines were called. There are also "special" subroutines '<>' and '*' which mean "file was opened via open" and "code outside of a subroutine".

    {
        source_file => {
            source_method => $touched_count,
            ...
        },
        ...
    }
    
$metrics = $agg->build_metrics()
$metrics = $agg->build_metrics(exclude_private => $BOOL)
Will build metrics, and include them in the output from "$agg->coverage()" next time it is called.

The "exclude_private" option, when set to true, will exclude any method that beings with an underscore from the coverage metrics and untested sub list.

Metrics:

    {
        files => {total => 20, tested => 18},
        subs  => {total => 80, tested => 70},

        untested => {
            files => \@file_list,
            subs => {
                file => \@sub_list,
                ...
            }
        },
    }
    

The source code repository for Test2-Harness can be found at http://github.com/Test-More/Test2-Harness/.

Chad Granum <exodist@cpan.org>

Chad Granum <exodist@cpan.org>

Copyright 2020 Chad Granum <exodist7@gmail.com>.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

See http://dev.perl.org/licenses/

2022-03-23 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.