Test2:...Finder(3pm)
π NAME π
Test2::Harness::Finder β the library that goes and finds your test files, bestie πβ¨
πΈ DESCRIPTION πΈ
So like, the finder is the one who's responsible for locating the test files that should actually be run. That's its whole job. That's its moment. π
And plot twist: you can totally subclass the finder and tell yath to use your subclass instead. Main character energy fr fr.
β¨ SYNOPSIS β¨
π USING A CUSTOM FINDER
Okay so to use Test2::Harness::Finder::MyFinder:
$ yath test --finder MyFinder
And to use Another::Finder:
$ yath test --finder +Another::Finder
So the thing is, by default Test2::Harness::Finder:: gets prefixed onto your custom finder name. Use a + before the class name to prevent this (like, to stop the prefixing). π
π¦ SUBCLASSING
use parent 'Test2::Harness::Finder';
use Test2::Harness::TestFile;
# Custom finders may provide their own options if desired.
# This is optional.
use App::Yath::Options;
option foo => (
...
);
# This is the main method to override.
sub find_project_files {
my $self = shift;
my ($plugins, $settings, $search) = @_;
return [
Test2::Harness::TestFile->new(...),
Test2::Harness::TestFile->new(...),
...,
];
}
π METHODS π
These are the important state methods, plus utility methods for you to use in your subclasses. Slay.
$bool = $finder->multi_projectβ True if theyath projectscommand was used. Simple as that. β$arrayref = $finder->find_files($plugins, $settings)β This is the main method, periodt. It returns an arrayref ofTest2::Harness::TestFileinstances, and each one represents a single test to run. πβοΈ$pluginsis a list of plugins β some may be class names, others may be instances.$settingsis anTest2::Harness::Settingsinstance.
Note: In many cases it is better to override find_project_files() in your subclasses. iykyk
$durations = $finder->duration_dataβ This will fetch the durations data if any was provided. It's a hashref where the keys are relative test paths and the value is the duration of the file (SHORT,MEDIUMorLONG). β±οΈ
Note: The result is cached, so peep pull_durations() if you wanna refresh the data.
@reasons = $finder->exclude_file($test)β The input argument should be anTest2::Harness::Testinstance. This returns a list of human readible reasons a test file should be excluded. If the file should not be excluded, the list will be empty. π«- This is a utility method that verifies the file is not in an exclude list/pattern. The reasons are handed back to you in case you need to inform the user.
$bool = $finder->include_file($test)β The input argument should be anTest2::Harness::Testinstance. This is a convenience method wrapped aroundexclude_file(), and it returns true whenexclude_file()returns an empty list. π«Ά$arrayref = $finder->find_multi_project_files($plugins, $settings)$arrayref = $finder->find_project_files($plugins, $settings, $search)β These two do the heavy lifting forfind_files. πͺ- The default
find_files()implementation is literally this:
- The default
sub find_files {
my $self = shift;
my ($plugins, $settings) = @_;
return $self->find_multi_project_files($plugins, $settings) if $self->multi_project;
return $self->find_project_files($plugins, $settings, $self->search);
}
- Each one returns an arrayref of
Test2::Harness::TestFileinstances. - Note that
find_multi_project_files()usesfind_project_files()internall, once per project directory. $pluginsis a list of plugins β some may be class names, others may be instances.$settingsis anTest2::Harness::Settingsinstance.$searchis an arrayref of search paths.
$finder->munge_settings($settings, $options)β A callback that lets you munge settings and options. Go off. π§$finder->pull_durationsβ This will fetch the durations data if ant was provided. It's a hashref where the keys are relative test paths and the value is the duration of the file (SHORT,MEDIUMorLONG). π°οΈduration_data()is a cached version of this. This method will refresh the cache for the other one.
π FROM SETTINGS π
See App::Yath::Options::Finder for up to date documentation on these. π
$finder->default_search$finder->default_at_search$finder->durations$finder->maybe_durations$finder->exclude_files$finder->exclude_patterns$finder->no_long$finder->only_long$finder->search$finder->extensions
π 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/
okay and that's the whole page bestie, tysm for reading, mwah πβ¨ This was brought to you by perl v5.40.1, dated 2026-05-10, and manual page Test2:...Finder(3pm) β User Contributed Perl Documentation. Go find some tests, queen. π¦π
π¦ where this page comes from
- ubuntu stonking: libtest2-harness-perl 1.000172-1 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms