summaryrefslogtreecommitdiffstats
path: root/upstream/mageia-cauldron/man3pm/Test2.3pm
blob: 02618ec4af6edf60b6e34d0c57552f95aa5aea10 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
.\" -*- mode: troff; coding: utf-8 -*-
.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
.ie n \{\
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds C`
.    ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\"
.\" If the F register is >0, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
.nr rF 0
.if \n(.g .if rF .nr rF 1
.if (\n(rF:(\n(.g==0)) \{\
.    if \nF \{\
.        de IX
.        tm Index:\\$1\t\\n%\t"\\$2"
..
.        if !\nF==2 \{\
.            nr % 0
.            nr F 2
.        \}
.    \}
.\}
.rr rF
.\" ========================================================================
.\"
.IX Title "Test2 3pm"
.TH Test2 3pm 2023-11-28 "perl v5.38.2" "Perl Programmers Reference Guide"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH NAME
Test2 \- Framework for writing test tools that all work together.
.SH DESCRIPTION
.IX Header "DESCRIPTION"
Test2 is a new testing framework produced by forking Test::Builder,
completely refactoring it, adding many new features and capabilities.
.SS "WHAT IS NEW?"
.IX Subsection "WHAT IS NEW?"
.IP "Easier to test new testing tools." 4
.IX Item "Easier to test new testing tools."
From the beginning Test2 was built with introspection capabilities. With
Test::Builder it was difficult at best to capture test tool output for
verification. Test2 Makes it easy with \f(CWTest2::API::intercept()\fR.
.IP "Better diagnostics capabilities." 4
.IX Item "Better diagnostics capabilities."
Test2 uses an Test2::API::Context object to track filename, line number, and
tool details. This object greatly simplifies tracking for where errors should
be reported.
.IP "Event driven." 4
.IX Item "Event driven."
Test2 based tools produce events which get passed through a processing system
before being output by a formatter. This event system allows for rich plugin
and extension support.
.IP "More complete API." 4
.IX Item "More complete API."
Test::Builder only provided a handful of methods for generating lines of TAP.
Test2 took inventory of everything people were doing with Test::Builder that
required hacking it up. Test2 made public API functions for nearly all the
desired functionality people didn't previously have.
.IP "Support for output other than TAP." 4
.IX Item "Support for output other than TAP."
Test::Builder assumed everything would end up as TAP. Test2 makes no such
assumption. Test2 provides ways for you to specify alternative and custom
formatters.
.IP "Subtest implementation is more sane." 4
.IX Item "Subtest implementation is more sane."
The Test::Builder implementation of subtests was certifiably insane. Test2 uses
a stacked event hub system that greatly improves how subtests are implemented.
.IP "Support for threading/forking." 4
.IX Item "Support for threading/forking."
Test2 support for forking and threading can be turned on using Test2::IPC.
Once turned on threading and forking operate sanely and work as one would
expect.
.SH "GETTING STARTED"
.IX Header "GETTING STARTED"
If you are interested in writing tests using new tools then you should look at
Test2::Suite. Test2::Suite is a separate cpan distribution that contains
many tools implemented on Test2.
.PP
If you are interested in writing new tools you should take a look at
Test2::API first.
.SH "NAMESPACE LAYOUT"
.IX Header "NAMESPACE LAYOUT"
This describes the namespace layout for the Test2 ecosystem. Not all the
namespaces listed here are part of the Test2 distribution, some are implemented
in Test2::Suite.
.SS Test2::Tools::
.IX Subsection "Test2::Tools::"
This namespace is for sets of tools. Modules in this namespace should export
tools like \f(CWok()\fR and \f(CWis()\fR. Most things written for Test2 should go here.
Modules in this namespace \fBMUST NOT\fR export subs from other tools. See the
"Test2::Bundle::" namespace if you want to do that.
.SS Test2::Plugin::
.IX Subsection "Test2::Plugin::"
This namespace is for plugins. Plugins are modules that change or enhance the
behavior of Test2. An example of a plugin is a module that sets the encoding to
utf8 globally. Another example is a module that causes a bail-out event after
the first test failure.
.SS Test2::Bundle::
.IX Subsection "Test2::Bundle::"
This namespace is for bundles of tools and plugins. Loading one of these may
load multiple tools and plugins. Modules in this namespace should not implement
tools directly. In general modules in this namespace should load tools and
plugins, then re-export things into the consumers namespace.
.SS Test2::Require::
.IX Subsection "Test2::Require::"
This namespace is for modules that cause a test to be skipped when conditions
do not allow it to run. Examples would be modules that skip the test on older
perls, or when non-essential modules have not been installed.
.SS Test2::Formatter::
.IX Subsection "Test2::Formatter::"
Formatters live under this namespace. Test2::Formatter::TAP is the only
formatter currently. It is acceptable for third party distributions to create
new formatters under this namespace.
.SS Test2::Event::
.IX Subsection "Test2::Event::"
Events live under this namespace. It is considered acceptable for third party
distributions to add new event types in this namespace.
.SS Test2::Hub::
.IX Subsection "Test2::Hub::"
Hub subclasses (and some hub utility objects) live under this namespace. It is
perfectly reasonable for third party distributions to add new hub subclasses in
this namespace.
.SS Test2::IPC::
.IX Subsection "Test2::IPC::"
The IPC subsystem lives in this namespace. There are not many good reasons to
add anything to this namespace, with exception of IPC drivers.
.PP
\fITest2::IPC::Driver::\fR
.IX Subsection "Test2::IPC::Driver::"
.PP
IPC drivers live in this namespace. It is fine to create new IPC drivers and to
put them in this namespace.
.SS Test2::Util::
.IX Subsection "Test2::Util::"
This namespace is for general utilities used by testing tools. Please be
considerate when adding new modules to this namespace.
.SS Test2::API::
.IX Subsection "Test2::API::"
This is for Test2 API and related packages.
.SS Test2::
.IX Subsection "Test2::"
The Test2:: namespace is intended for extensions and frameworks. Tools,
Plugins, etc should not go directly into this namespace. However extensions
that are used to build tools and plugins may go here.
.PP
In short: If the module exports anything that should be run directly by a test
script it should probably NOT go directly into \f(CW\*(C`Test2::XXX\*(C'\fR.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
Test2::API \- Primary API functions.
.PP
Test2::API::Context \- Detailed documentation of the context object.
.PP
Test2::IPC \- The IPC system used for threading/fork support.
.PP
Test2::Formatter \- Formatters such as TAP live here.
.PP
Test2::Event \- Events live in this namespace.
.PP
Test2::Hub \- All events eventually funnel through a hub. Custom hubs are how
\&\f(CWintercept()\fR and \f(CWrun_subtest()\fR are implemented.
.SH "CONTACTING US"
.IX Header "CONTACTING US"
Many Test2 developers and users lurk on <irc://irc.perl.org/#perl\-qa> and
<irc://irc.perl.org/#toolchain>. We also have a slack team that can be joined
by anyone with an \f(CW\*(C`@cpan.org\*(C'\fR email address <https://perl\-test2.slack.com/>
If you do not have an \f(CW\*(C`@cpan.org\*(C'\fR email you can ask for a slack invite by
emailing Chad Granum <exodist@cpan.org>.
.SH SOURCE
.IX Header "SOURCE"
The source code repository for Test2 can be found at
\&\fIhttp://github.com/Test\-More/test\-more/\fR.
.SH MAINTAINERS
.IX Header "MAINTAINERS"
.IP "Chad Granum <exodist@cpan.org>" 4
.IX Item "Chad Granum <exodist@cpan.org>"
.SH AUTHORS
.IX Header "AUTHORS"
.PD 0
.IP "Chad Granum <exodist@cpan.org>" 4
.IX Item "Chad Granum <exodist@cpan.org>"
.PD
.SH COPYRIGHT
.IX Header "COPYRIGHT"
Copyright 2020 Chad Granum <exodist@cpan.org>.
.PP
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
.PP
See \fIhttp://dev.perl.org/licenses/\fR