.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" 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 .. .if !\nF .nr F 0 .if \nF>0 \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} .\} .\" .\" 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 "Fennec::Manual::CustomFennec 3pm" .TH Fennec::Manual::CustomFennec 3pm "2018-06-11" "perl v5.26.2" "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" Fennec::Manual::CustomFennec \- Customizing Fennec for you project. .SH "DESCRIPTION" .IX Header "DESCRIPTION" Fennec automatically loads several utilities for you. In addition it assumes you want to use Test::Builder. Subclassing Fennec will let you specify exactly what utilities you want, and what collector to use. This way you can use your subclass in each test file instead of copying \f(CW\*(C`use Fennec ( YOUR CONFIG OPTIONS )\*(C'\fR into each file. .SH "FENNEC SUBCLASS" .IX Header "FENNEC SUBCLASS" You can subclass Fennec and override the defaults sub to your specification. The defaults sub should return a list of Fennec import argument key-pairs. .PP My/Fennec.pm use strict; use warnings; .PP .Vb 1 \& use base \*(AqFennec\*(Aq; \& \& sub defaults { \& my $class = shift; \& my %params = $class\->SUPER::defaults; \& \& # Add a new autoloading utility with import arguments. \& push @{ $params\->{utils} } => \*(AqMy::Util\*(Aq; \& $params\->{\*(AqMy::Util\*(Aq} = [ \*(Aqutil\*(Aq => \*(Aqargs\*(Aq ]; \& \& # Default number of concurrent procs for the test to use. \& $params\->{parallel} = 3; \& \& return %params; \& } \& \& sub after_import { \& my $class = shift; \& my ($info) = @_; \& # $info is a hashref with the importer, runner, and importer meta \& # object, and some other fun things. \& \& # Example of adding cases to any Fennec test that uses this subclass: \& # The first arg to add case should be an array matching the return of \& # caller. The idea is to give us the start and end line, as well as \& # file name where the case is defined. normally the exports from \& # Test::Workflow provide that for you, but at this low\-level we need to \& # provide it ourselfs. Since we define the subs here, we give current \& # line/file. Use the importer for package name. \& $info\->{layer}\->add_case([$info\->{importer}, _\|_FILE_\|_, _\|_LINE_\|_], case_a => sub { $main::CASE_A = 1 }); \& $info\->{layer}\->add_case([$info\->{importer}, _\|_FILE_\|_, _\|_LINE_\|_], case_b => sub { $main::CASE_B = 1 }); \& } \& \& 1; .Ve .SH "CUSTOM COLLECTOR" .IX Header "CUSTOM COLLECTOR" The collector is responsible for 2 jobs: 1) In the parent process it is responsible for gathering all test results from the child processes. 2) In the child processes it is responsible for sending results to the parent process. .PP If \s-1TAP\s0 is not your thing, or you want to use Fennec with existing tests that do not use Test::Builder, you can create a custom collector to work for you. .PP Documentation for a custom Collector can be found in the Fennec::Collector \&\s-1POD.\s0 .SH "AUTHORS" .IX Header "AUTHORS" Chad Granum exodist7@gmail.com .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (C) 2013 Chad Granum .PP Fennec is free software; Standard perl license (\s-1GPL\s0 and Artistic). .PP Fennec is distributed in the hope that it will be useful, but \s-1WITHOUT ANY WARRANTY\s0; without even the implied warranty of \s-1MERCHANTABILITY\s0 or \s-1FITNESS FOR A PARTICULAR PURPOSE.\s0 See the license for more details.