5 our $VERSION = '1.302171';
18 Test2 - Framework for writing test tools that all work together.
22 Test2 is a new testing framework produced by forking L<Test::Builder>,
23 completely refactoring it, adding many new features and capabilities.
29 =item Easier to test new testing tools.
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()>.
35 =item Better diagnostics capabilities.
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
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.
47 =item More complete API.
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.
54 =item Support for output other than TAP.
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
60 =item Subtest implementation is more sane.
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.
65 =item Support for threading/forking.
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
73 =head1 GETTING STARTED
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.
79 If you are interested in writing new tools you should take a look at
82 =head1 NAMESPACE LAYOUT
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
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.
95 =head2 Test2::Plugin::
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.
102 =head2 Test2::Bundle::
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.
109 =head2 Test2::Require::
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.
115 =head2 Test2::Formatter::
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.
121 =head2 Test2::Event::
123 Events live under this namespace. It is considered acceptable for third party
124 distributions to add new event types in this namespace.
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
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.
137 =head3 Test2::IPC::Driver::
139 IPC drivers live in this namespace. It is fine to create new IPC drivers and to
140 put them in this namespace.
144 This namespace is for general utilities used by testing tools. Please be
145 considerate when adding new modules to this namespace.
149 This is for Test2 API and related packages.
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.
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>.
162 L<Test2::API> - Primary API functions.
164 L<Test2::API::Context> - Detailed documentation of the context object.
166 L<Test2::IPC> - The IPC system used for threading/fork support.
168 L<Test2::Formatter> - Formatters such as TAP live here.
170 L<Test2::Event> - Events live in this namespace.
172 L<Test2::Hub> - All events eventually funnel through a hub. Custom hubs are how
173 C<intercept()> and C<run_subtest()> are implemented.
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>.
185 The source code repository for Test2 can be found at
186 F<http://github.com/Test-More/test-more/>.
192 =item Chad Granum E<lt>exodist@cpan.orgE<gt>
200 =item Chad Granum E<lt>exodist@cpan.orgE<gt>
206 Copyright 2019 Chad Granum E<lt>exodist@cpan.orgE<gt>.
208 This program is free software; you can redistribute it and/or
209 modify it under the same terms as Perl itself.
211 See F<http://dev.perl.org/licenses/>