1Test2::Harness::Finder(U3s)er Contributed Perl DocumentatTieosnt2::Harness::Finder(3)
2
3
4
6 Test2::Harness::Finder - Library that searches for test files
7
9 The finder is responsible for locating test files that should be run.
10 You can subclass the finder and instruct yath to use your subclass.
11
13 USING A CUSTOM FINDER
14 To use Test2::Harness::Finder::MyFinder:
15
16 $ yath test --finder MyFinder
17
18 To use Another::Finder
19
20 $ yath test --finder +Another::Finder
21
22 By default "Test2::Harness::Finder::" is prefixed onto your custom
23 finder, use '+' before the class name or prevent this.
24
25 SUBCLASSING
26 use parent 'Test2::Harness::Finder';
27 use Test2::Harness::TestFile;
28
29 # Custom finders may provide their own options if desired.
30 # This is optional.
31 use App::Yath::Options;
32 option foo => (
33 ...
34 );
35
36 # This is the main method to override.
37 sub find_project_files {
38 my $self = shift;
39 my ($plugins, $settings, $search) = @_;
40
41 return [
42 Test2::Harness::TestFile->new(...),
43 Test2::Harness::TestFile->new(...),
44 ...,
45 ];
46 }
47
49 These are important state methods, as well as utility methods for use
50 in your subclasses.
51
52 $bool = $finder->multi_project
53 True if the "yath projects" command was used.
54
55 $arrayref = $finder->find_files($plugins, $settings)
56 This is the main method. This method returns an arrayref of
57 Test2::Harness::TestFile instances, each one representing a single
58 test to run.
59
60 $plugins is a list of plugins, some may be class names, others may
61 be instances.
62
63 $settings is an Test2::Harness::Settings instance.
64
65 Note: In many cases it is better to override "find_project_files()"
66 in your subclasses.
67
68 $durations = $finder->duration_data
69 This will fetch the durations data if any was provided. This is a
70 hashref of relative test paths as keys where the value is the
71 duration of the file (SHORT, MEDIUM or LONG).
72
73 Note: The result is cached, see pull_durations() to refresh the
74 data.
75
76 @reasons = $finder->exclude_file($test)
77 The input argument should be an Test2::Harness::Test instance. This
78 will return a list of human readible reasons a test file should be
79 excluded. If the file should not be excluded the list will be
80 empty.
81
82 This is a utility method that verifies the file is not in an
83 exclude list/pattern. The reasons are provided back in case you
84 need to inform the user.
85
86 $bool = $finder->include_file($test)
87 The input argument should be an Test2::Harness::Test instance. This
88 is a convenience method around "exclude_file()", it will return
89 true when "exclude_file()" returns an empty list.
90
91 $arrayref = $finder->find_multi_project_files($plugins, $settings)
92 $arrayref = $finder->find_project_files($plugins, $settings, $search)
93 These do the heavy lifting for "find_files"
94
95 The default "find_files()" implementation is this:
96
97 sub find_files {
98 my $self = shift;
99 my ($plugins, $settings) = @_;
100
101 return $self->find_multi_project_files($plugins, $settings) if $self->multi_project;
102 return $self->find_project_files($plugins, $settings, $self->search);
103 }
104
105 Each one returns an arrayref of Test2::Harness::TestFile instances.
106
107 Note that "find_multi_project_files()" uses "find_project_files()"
108 internall, once per project directory.
109
110 $plugins is a list of plugins, some may be class names, others may
111 be instances.
112
113 $settings is an Test2::Harness::Settings instance.
114
115 $search is an arrayref of search paths.
116
117 $finder->munge_settings($settings, $options)
118 A callback that lets you munge settings and options.
119
120 $finder->pull_durations
121 This will fetch the durations data if ant was provided. This is a
122 hashref of relative test paths as keys where the value is the
123 duration of the file (SHORT, MEDIUM or LONG).
124
125 duration_data() is a cached version of this. This method will
126 refresh the cache for the other.
127
128 FROM SETTINGS
129 See App::Yath::Options::Finder for up to date documentation on these.
130
131 $finder->default_search
132 $finder->default_at_search
133 $finder->durations
134 $finder->maybe_durations
135 $finder->exclude_files
136 $finder->exclude_patterns
137 $finder->no_long
138 $finder->only_long
139 $finder->search
140 $finder->extensions
141
143 The source code repository for Test2-Harness can be found at
144 http://github.com/Test-More/Test2-Harness/.
145
147 Chad Granum <exodist@cpan.org>
148
150 Chad Granum <exodist@cpan.org>
151
153 Copyright 2020 Chad Granum <exodist7@gmail.com>.
154
155 This program is free software; you can redistribute it and/or modify it
156 under the same terms as Perl itself.
157
158 See http://dev.perl.org/licenses/
159
160
161
162perl v5.34.1 2022-07-11 Test2::Harness::Finder(3)