The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Test2::Harness::Plugin - Base class for Test2::Harness plugins.

DESCRIPTION

This class holds the methods specific to Test2::Harness which is the backend. Most of the time you actually want to subclass App::Yath::Plugin which subclasses this class, and holds additional methods that apply to yath (the UI layer).

SYNOPSIS

You probably want to subclass App::Yath::Plugin instead. This class here mainly exists to separate concerns, but is not something you should use directly.

    package Test2::Harness::Plugin::MyPlugin;

    use parent 'Test2::Harness::Plugin';

    # ... Define methods

    1;

METHODS

$plugin->munge_search($input, $default_search, $settings)

$input is an arrayref of files and/or directories provided at the command line.

$default_search is an arrayref with the default files/directories pulled in when nothing is specified at the command ine.

$settings is an instance of Test2::Harness::Settings

$undef_or_inst = $plugin->claim_file($path, $settings)

This is a chance for a plugin to claim a test file early, before Test2::Harness takes care of it. If your plugin does not want to claim the file just return undef. To claim the file return an instance of Test2::Harness::TestFile created with $path.

$plugin->munge_files(\@tests, $settings)

This is an opportunity for your plugin to modify the data for any test file that will be run. The first argument is an arrayref of Test2::Harness::TestFile objects.

$plugin->inject_run_data(meta => $meta, fields => $fields, run => $run)

This is a callback that lets your plugin add meta-data or custom fields to the run event. The meta-data and fields are available in the event log, and are particularily useful to App::Yath::UI.

    sub inject_run_data {
        my $class  = shift;
        my %params = @_;

        my $meta   = $params{meta};
        my $fields = $params{fields};

        # Meta-data is a hash, each plugin should define its own key, and put
        # data under that key
        $meta->{MyPlugin}->{stuff} = "Stuff!";

        # Fields is an array of fields that a UI might want to display when showing the run.
        push @$fields => {name => 'MyPlugin', details => "Human Friendly Stuff", raw => "Less human friendly stuff", data => $all_the_stuff};

        return;
    }
$plugin->setup($settings)

This is a callback that lets you run setup logic when the runner starts. Note that in a persistent runner this is run once on startup, it is not run for each run command against the persistent runner.

$plugin->teardown($settings)

This is a callback that lets you run teardown logic when the runner stops. Note that in a persistent runner this is run once on termination, it is not run for each run command against the persistent runner.

@files = $plugin->changed_files($settings)

Get a list of files that have changed. Plugins are free to define what "changed" means. This may be used by the finder to determine what tests to run based on coverage data collected in previous runs.

$plugin->TO_JSON

This is here as a bare minimum serialization method. It returns the plugin class name.

SOURCE

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

MAINTAINERS

Chad Granum <exodist@cpan.org>

AUTHORS

Chad Granum <exodist@cpan.org>

COPYRIGHT

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/