.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) .\" .\" 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 .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . 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 .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "TAP::Formatter::JUnit 3pm" .TH TAP::Formatter::JUnit 3pm "2022-07-03" "perl v5.34.0" "User Contributed Perl Documentation" .\" 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" TAP::Formatter::JUnit \- Harness output delegate for JUnit output .SH "SYNOPSIS" .IX Header "SYNOPSIS" On the command line, with \fIprove\fR: .PP .Vb 1 \& prove \-\-formatter TAP::Formatter::JUnit ... .Ve .PP Or, in your own scripts: .PP .Vb 6 \& use TAP::Harness; \& my $harness = TAP::Harness\->new( { \& formatter_class => \*(AqTAP::Formatter::JUnit\*(Aq, \& merge => 1, \& } ); \& $harness\->runtests(@tests); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBThis code is currently in alpha state and is subject to change.\fR .PP \&\f(CW\*(C`TAP::Formatter::JUnit\*(C'\fR provides JUnit output formatting for \f(CW\*(C`TAP::Harness\*(C'\fR. .PP By default (e.g. when run with \fIprove\fR), the \fIentire\fR test suite is gathered together into a single JUnit \s-1XML\s0 document, which is then displayed on \f(CW\*(C`STDOUT\*(C'\fR. You can, however, have individual JUnit \s-1XML\s0 files dumped for each individual test, by setting c<\s-1PERL_TEST_HARNESS_DUMP_TAP\s0> to a directory that you would like the JUnit \s-1XML\s0 dumped to. Note, that this will \fBalso\fR cause \&\f(CW\*(C`TAP::Harness\*(C'\fR to dump the original \s-1TAP\s0 output into that directory as well (but \&\s-1IMHO\s0 that's ok as you've now got the data in two parsable formats). .PP Timing information is included in the JUnit \s-1XML,\s0 \fIif\fR you specified \f(CW\*(C`\-\-timer\*(C'\fR when you ran \fIprove\fR. .PP In standard use, \*(L"passing TODOs\*(R" are treated as failure conditions (and are reported as such in the generated JUnit). If you wish to treat these as a \&\*(L"pass\*(R" and not a \*(L"fail\*(R" condition, setting \f(CW\*(C`ALLOW_PASSING_TODOS\*(C'\fR in your environment will turn these into pass conditions. .PP The JUnit output generated is partial to being grokked by Hudson (). That's the build tool I'm using at the moment and needed to be able to generate JUnit output for. .SH "ATTRIBUTES" .IX Header "ATTRIBUTES" .IP "testsuites" 4 .IX Item "testsuites" List-ref of test suites that have been executed. .IP "xml" 4 .IX Item "xml" An \f(CW\*(C`XML::Generator\*(C'\fR instance, to be used to generate \s-1XML\s0 output. .SH "METHODS" .IX Header "METHODS" .IP "\fBopen_test($test, \f(CB$parser\fB)\fR" 4 .IX Item "open_test($test, $parser)" Over-ridden \f(CW\*(C`open_test()\*(C'\fR method. .Sp Creates a \f(CW\*(C`TAP::Formatter::JUnit::Session\*(C'\fR session, instead of a console formatter session. .IP "\fBsummary($aggregate)\fR" 4 .IX Item "summary($aggregate)" Prints the summary report (in JUnit) after all tests are run. .IP "\fBadd_testsuite($suite)\fR" 4 .IX Item "add_testsuite($suite)" Adds the given \s-1XML\s0 test \f(CW$suite\fR to the list of test suites that we've executed and need to summarize. .SH "AUTHOR" .IX Header "AUTHOR" Graham TerMarsch .PP Many thanks to Andy Armstrong et al. for the \fBfabulous\fR set of tests in \&\f(CW\*(C`Test::Harness\*(C'\fR; they became the basis for the unit tests here. .PP Other thanks go out to those that have provided feedback, comments, or patches: .PP .Vb 7 \& Mark Aufflick \& Joe McMahon \& Michael Nachbaur \& Marc Abramowitz \& Colin Robertson \& Phillip Kimmey \& Dave Lambley .Ve .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright 2008\-2010, Graham TerMarsch. All Rights Reserved. .PP This is free software; you can redistribute it and/or modify it under the same terms as Perl itself. .SH "SEE ALSO" .IX Header "SEE ALSO" TAP::Formatter::Console, TAP::Formatter::JUnit::Session, , , .