File Coverage

blib/lib/Test2.pm
Criterion Covered Total %
statement 6 6 100.0
branch n/a
condition n/a
subroutine 2 2 100.0
pod n/a
total 8 8 100.0


line stmt bran cond sub pod time code
1             package Test2;
2 1     1   23355 use strict;
  1         3  
  1         32  
3 1     1   6 use warnings;
  1         7  
  1         53  
4              
5             our $VERSION = '1.302181';
6              
7              
8             1;
9              
10             __END__
11              
12             =pod
13              
14             =encoding UTF-8
15              
16             =head1 NAME
17              
18             Test2 - Framework for writing test tools that all work together.
19              
20             =head1 DESCRIPTION
21              
22             Test2 is a new testing framework produced by forking L<Test::Builder>,
23             completely refactoring it, adding many new features and capabilities.
24              
25             =head2 WHAT IS NEW?
26              
27             =over 4
28              
29             =item Easier to test new testing tools.
30              
31             From the beginning Test2 was built with introspection capabilities. With
32             Test::Builder it was difficult at best to capture test tool output for
33             verification. Test2 Makes it easy with C<Test2::API::intercept()>.
34              
35             =item Better diagnostics capabilities.
36              
37             Test2 uses an L<Test2::API::Context> object to track filename, line number, and
38             tool details. This object greatly simplifies tracking for where errors should
39             be reported.
40              
41             =item Event driven.
42              
43             Test2 based tools produce events which get passed through a processing system
44             before being output by a formatter. This event system allows for rich plugin
45             and extension support.
46              
47             =item More complete API.
48              
49             Test::Builder only provided a handful of methods for generating lines of TAP.
50             Test2 took inventory of everything people were doing with Test::Builder that
51             required hacking it up. Test2 made public API functions for nearly all the
52             desired functionality people didn't previously have.
53              
54             =item Support for output other than TAP.
55              
56             Test::Builder assumed everything would end up as TAP. Test2 makes no such
57             assumption. Test2 provides ways for you to specify alternative and custom
58             formatters.
59              
60             =item Subtest implementation is more sane.
61              
62             The Test::Builder implementation of subtests was certifiably insane. Test2 uses
63             a stacked event hub system that greatly improves how subtests are implemented.
64              
65             =item Support for threading/forking.
66              
67             Test2 support for forking and threading can be turned on using L<Test2::IPC>.
68             Once turned on threading and forking operate sanely and work as one would
69             expect.
70              
71             =back
72              
73             =head1 GETTING STARTED
74              
75             If you are interested in writing tests using new tools then you should look at
76             L<Test2::Suite>. L<Test2::Suite> is a separate cpan distribution that contains
77             many tools implemented on Test2.
78              
79             If you are interested in writing new tools you should take a look at
80             L<Test2::API> first.
81              
82             =head1 NAMESPACE LAYOUT
83              
84             This describes the namespace layout for the Test2 ecosystem. Not all the
85             namespaces listed here are part of the Test2 distribution, some are implemented
86             in L<Test2::Suite>.
87              
88             =head2 Test2::Tools::
89              
90             This namespace is for sets of tools. Modules in this namespace should export
91             tools like C<ok()> and C<is()>. Most things written for Test2 should go here.
92             Modules in this namespace B<MUST NOT> export subs from other tools. See the
93             L</Test2::Bundle::> namespace if you want to do that.
94              
95             =head2 Test2::Plugin::
96              
97             This namespace is for plugins. Plugins are modules that change or enhance the
98             behavior of Test2. An example of a plugin is a module that sets the encoding to
99             utf8 globally. Another example is a module that causes a bail-out event after
100             the first test failure.
101              
102             =head2 Test2::Bundle::
103              
104             This namespace is for bundles of tools and plugins. Loading one of these may
105             load multiple tools and plugins. Modules in this namespace should not implement
106             tools directly. In general modules in this namespace should load tools and
107             plugins, then re-export things into the consumers namespace.
108              
109             =head2 Test2::Require::
110              
111             This namespace is for modules that cause a test to be skipped when conditions
112             do not allow it to run. Examples would be modules that skip the test on older
113             perls, or when non-essential modules have not been installed.
114              
115             =head2 Test2::Formatter::
116              
117             Formatters live under this namespace. L<Test2::Formatter::TAP> is the only
118             formatter currently. It is acceptable for third party distributions to create
119             new formatters under this namespace.
120              
121             =head2 Test2::Event::
122              
123             Events live under this namespace. It is considered acceptable for third party
124             distributions to add new event types in this namespace.
125              
126             =head2 Test2::Hub::
127              
128             Hub subclasses (and some hub utility objects) live under this namespace. It is
129             perfectly reasonable for third party distributions to add new hub subclasses in
130             this namespace.
131              
132             =head2 Test2::IPC::
133              
134             The IPC subsystem lives in this namespace. There are not many good reasons to
135             add anything to this namespace, with exception of IPC drivers.
136              
137             =head3 Test2::IPC::Driver::
138              
139             IPC drivers live in this namespace. It is fine to create new IPC drivers and to
140             put them in this namespace.
141              
142             =head2 Test2::Util::
143              
144             This namespace is for general utilities used by testing tools. Please be
145             considerate when adding new modules to this namespace.
146              
147             =head2 Test2::API::
148              
149             This is for Test2 API and related packages.
150              
151             =head2 Test2::
152              
153             The Test2:: namespace is intended for extensions and frameworks. Tools,
154             Plugins, etc should not go directly into this namespace. However extensions
155             that are used to build tools and plugins may go here.
156              
157             In short: If the module exports anything that should be run directly by a test
158             script it should probably NOT go directly into C<Test2::XXX>.
159              
160             =head1 SEE ALSO
161              
162             L<Test2::API> - Primary API functions.
163              
164             L<Test2::API::Context> - Detailed documentation of the context object.
165              
166             L<Test2::IPC> - The IPC system used for threading/fork support.
167              
168             L<Test2::Formatter> - Formatters such as TAP live here.
169              
170             L<Test2::Event> - Events live in this namespace.
171              
172             L<Test2::Hub> - All events eventually funnel through a hub. Custom hubs are how
173             C<intercept()> and C<run_subtest()> are implemented.
174              
175             =head1 CONTACTING US
176              
177             Many Test2 developers and users lurk on L<irc://irc.perl.org/#perl-qa> and
178             L<irc://irc.perl.org/#toolchain>. We also have a slack team that can be joined
179             by anyone with an C<@cpan.org> email address L<https://perl-test2.slack.com/>
180             If you do not have an C<@cpan.org> email you can ask for a slack invite by
181             emailing Chad Granum E<lt>exodist@cpan.orgE<gt>.
182              
183             =head1 SOURCE
184              
185             The source code repository for Test2 can be found at
186             F<http://github.com/Test-More/test-more/>.
187              
188             =head1 MAINTAINERS
189              
190             =over 4
191              
192             =item Chad Granum E<lt>exodist@cpan.orgE<gt>
193              
194             =back
195              
196             =head1 AUTHORS
197              
198             =over 4
199              
200             =item Chad Granum E<lt>exodist@cpan.orgE<gt>
201              
202             =back
203              
204             =head1 COPYRIGHT
205              
206             Copyright 2020 Chad Granum E<lt>exodist@cpan.orgE<gt>.
207              
208             This program is free software; you can redistribute it and/or
209             modify it under the same terms as Perl itself.
210              
211             See F<http://dev.perl.org/licenses/>
212              
213             =cut