Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / amd64 / man / man3 / Test::Harness::Straps.3
CommitLineData
920dae64
AT
1.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32
2.\"
3.\" Standard preamble:
4.\" ========================================================================
5.de Sh \" Subsection heading
6.br
7.if t .Sp
8.ne 5
9.PP
10\fB\\$1\fR
11.PP
12..
13.de Sp \" Vertical space (when we can't use .PP)
14.if t .sp .5v
15.if n .sp
16..
17.de Vb \" Begin verbatim text
18.ft CW
19.nf
20.ne \\$1
21..
22.de Ve \" End verbatim text
23.ft R
24.fi
25..
26.\" Set up some character translations and predefined strings. \*(-- will
27.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28.\" double quote, and \*(R" will give a right double quote. | will give a
29.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
30.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
31.\" expand to `' in nroff, nothing in troff, for use with C<>.
32.tr \(*W-|\(bv\*(Tr
33.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
34.ie n \{\
35. ds -- \(*W-
36. ds PI pi
37. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
39. ds L" ""
40. ds R" ""
41. ds C` ""
42. ds C' ""
43'br\}
44.el\{\
45. ds -- \|\(em\|
46. ds PI \(*p
47. ds L" ``
48. ds R" ''
49'br\}
50.\"
51.\" If the F register is turned on, we'll generate index entries on stderr for
52.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53.\" entries marked with X<> in POD. Of course, you'll have to process the
54.\" output yourself in some meaningful fashion.
55.if \nF \{\
56. de IX
57. tm Index:\\$1\t\\n%\t"\\$2"
58..
59. nr % 0
60. rr F
61.\}
62.\"
63.\" For nroff, turn off justification. Always turn off hyphenation; it makes
64.\" way too many mistakes in technical documents.
65.hy 0
66.if n .na
67.\"
68.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69.\" Fear. Run. Save yourself. No user-serviceable parts.
70. \" fudge factors for nroff and troff
71.if n \{\
72. ds #H 0
73. ds #V .8m
74. ds #F .3m
75. ds #[ \f1
76. ds #] \fP
77.\}
78.if t \{\
79. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
80. ds #V .6m
81. ds #F 0
82. ds #[ \&
83. ds #] \&
84.\}
85. \" simple accents for nroff and troff
86.if n \{\
87. ds ' \&
88. ds ` \&
89. ds ^ \&
90. ds , \&
91. ds ~ ~
92. ds /
93.\}
94.if t \{\
95. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
101.\}
102. \" troff and (daisy-wheel) nroff accents
103.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110.ds ae a\h'-(\w'a'u*4/10)'e
111.ds Ae A\h'-(\w'A'u*4/10)'E
112. \" corrections for vroff
113.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115. \" for low resolution devices (crt and lpr)
116.if \n(.H>23 .if \n(.V>19 \
117\{\
118. ds : e
119. ds 8 ss
120. ds o a
121. ds d- d\h'-1'\(ga
122. ds D- D\h'-1'\(hy
123. ds th \o'bp'
124. ds Th \o'LP'
125. ds ae ae
126. ds Ae AE
127.\}
128.rm #[ #] #H #V #F C
129.\" ========================================================================
130.\"
131.IX Title "Test::Harness::Straps 3"
132.TH Test::Harness::Straps 3 "2001-09-21" "perl v5.8.8" "Perl Programmers Reference Guide"
133.SH "NAME"
134Test::Harness::Straps \- detailed analysis of test results
135.SH "SYNOPSIS"
136.IX Header "SYNOPSIS"
137.Vb 1
138\& use Test::Harness::Straps;
139.Ve
140.PP
141.Vb 1
142\& my $strap = Test::Harness::Straps->new;
143.Ve
144.PP
145.Vb 4
146\& # Various ways to interpret a test
147\& my %results = $strap->analyze($name, \e@test_output);
148\& my %results = $strap->analyze_fh($name, $test_filehandle);
149\& my %results = $strap->analyze_file($test_file);
150.Ve
151.PP
152.Vb 2
153\& # UNIMPLEMENTED
154\& my %total = $strap->total_results;
155.Ve
156.PP
157.Vb 3
158\& # Altering the behavior of the strap UNIMPLEMENTED
159\& my $verbose_output = $strap->dump_verbose();
160\& $strap->dump_verbose_fh($output_filehandle);
161.Ve
162.SH "DESCRIPTION"
163.IX Header "DESCRIPTION"
164\&\fB\s-1THIS\s0 \s-1IS\s0 \s-1ALPHA\s0 \s-1SOFTWARE\s0\fR in that the interface is subject to change
165in incompatible ways. It is otherwise stable.
166.PP
167Test::Harness is limited to printing out its results. This makes
168analysis of the test results difficult for anything but a human. To
169make it easier for programs to work with test results, we provide
170Test::Harness::Straps. Instead of printing the results, straps
171provide them as raw data. You can also configure how the tests are to
172be run.
173.PP
174The interface is currently incomplete. \fIPlease\fR contact the author
175if you'd like a feature added or something change or just have
176comments.
177.SH "CONSTRUCTION"
178.IX Header "CONSTRUCTION"
179.Sh "\fInew()\fP"
180.IX Subsection "new()"
181.Vb 1
182\& my $strap = Test::Harness::Straps->new;
183.Ve
184.PP
185Initialize a new strap.
186.Sh "$strap\->_init"
187.IX Subsection "$strap->_init"
188.Vb 1
189\& $strap->_init;
190.Ve
191.PP
192Initialize the internal state of a strap to make it ready for parsing.
193.SH "ANALYSIS"
194.IX Header "ANALYSIS"
195.ie n .Sh "$strap\->analyze( $name, \e@output_lines )"
196.el .Sh "$strap\->analyze( \f(CW$name\fP, \e@output_lines )"
197.IX Subsection "$strap->analyze( $name, @output_lines )"
198.Vb 1
199\& my %results = $strap->analyze($name, \e@test_output);
200.Ve
201.PP
202Analyzes the output of a single test, assigning it the given \f(CW$name\fR
203for use in the total report. Returns the \f(CW%results\fR of the test.
204See Results.
205.PP
206\&\f(CW@test_output\fR should be the raw output from the test, including
207newlines.
208.ie n .Sh "$strap\->analyze_fh( $name\fP, \f(CW$test_filehandle )"
209.el .Sh "$strap\->analyze_fh( \f(CW$name\fP, \f(CW$test_filehandle\fP )"
210.IX Subsection "$strap->analyze_fh( $name, $test_filehandle )"
211.Vb 1
212\& my %results = $strap->analyze_fh($name, $test_filehandle);
213.Ve
214.PP
215Like \f(CW\*(C`analyze\*(C'\fR, but it reads from the given filehandle.
216.ie n .Sh "$strap\->analyze_file( $test_file )"
217.el .Sh "$strap\->analyze_file( \f(CW$test_file\fP )"
218.IX Subsection "$strap->analyze_file( $test_file )"
219.Vb 1
220\& my %results = $strap->analyze_file($test_file);
221.Ve
222.PP
223Like \f(CW\*(C`analyze\*(C'\fR, but it runs the given \f(CW$test_file\fR and parses its
224results. It will also use that name for the total report.
225.ie n .Sh "$strap\->_command_line( $file )"
226.el .Sh "$strap\->_command_line( \f(CW$file\fP )"
227.IX Subsection "$strap->_command_line( $file )"
228Returns the full command line that will be run to test \fI$file\fR.
229.Sh "$strap\->\fI_command()\fP"
230.IX Subsection "$strap->_command()"
231Returns the command that runs the test. Combine this with \f(CW\*(C`_switches()\*(C'\fR
232to build a command line.
233.PP
234Typically this is \f(CW$^X\fR, but you can set \f(CW$ENV{HARNESS_PERL}\fR
235to use a different Perl than what you're running the harness under.
236This might be to run a threaded Perl, for example.
237.PP
238You can also overload this method if you've built your own strap subclass,
239such as a \s-1PHP\s0 interpreter for a PHP-based strap.
240.ie n .Sh "$strap\->_switches( $file )"
241.el .Sh "$strap\->_switches( \f(CW$file\fP )"
242.IX Subsection "$strap->_switches( $file )"
243Formats and returns the switches necessary to run the test.
244.ie n .Sh "$strap\->_cleaned_switches( @switches_from_user )"
245.el .Sh "$strap\->_cleaned_switches( \f(CW@switches_from_user\fP )"
246.IX Subsection "$strap->_cleaned_switches( @switches_from_user )"
247Returns only defined, non\-blank, trimmed switches from the parms passed.
248.Sh "$strap\->_INC2PERL5LIB"
249.IX Subsection "$strap->_INC2PERL5LIB"
250.Vb 1
251\& local $ENV{PERL5LIB} = $self->_INC2PERL5LIB;
252.Ve
253.PP
254Takes the current value of \f(CW@INC\fR and turns it into something suitable
255for putting onto \f(CW\*(C`PERL5LIB\*(C'\fR.
256.Sh "$strap\->\fI_filtered_INC()\fP"
257.IX Subsection "$strap->_filtered_INC()"
258.Vb 1
259\& my @filtered_inc = $self->_filtered_INC;
260.Ve
261.PP
262Shortens \f(CW@INC\fR by removing redundant and unnecessary entries.
263Necessary for OSes with limited command line lengths, like \s-1VMS\s0.
264.Sh "$strap\->\fI_restore_PERL5LIB()\fP"
265.IX Subsection "$strap->_restore_PERL5LIB()"
266.Vb 1
267\& $self->_restore_PERL5LIB;
268.Ve
269.PP
270This restores the original value of the \f(CW\*(C`PERL5LIB\*(C'\fR environment variable.
271Necessary on \s-1VMS\s0, otherwise a no\-op.
272.SH "Parsing"
273.IX Header "Parsing"
274Methods for identifying what sort of line you're looking at.
275.ie n .Sh """_is_diagnostic"""
276.el .Sh "\f(CW_is_diagnostic\fP"
277.IX Subsection "_is_diagnostic"
278.Vb 1
279\& my $is_diagnostic = $strap->_is_diagnostic($line, \e$comment);
280.Ve
281.PP
282Checks if the given line is a comment. If so, it will place it into
283\&\f(CW$comment\fR (sans #).
284.ie n .Sh """_is_header"""
285.el .Sh "\f(CW_is_header\fP"
286.IX Subsection "_is_header"
287.Vb 1
288\& my $is_header = $strap->_is_header($line);
289.Ve
290.PP
291Checks if the given line is a header (1..M) line. If so, it places how
292many tests there will be in \f(CW\*(C`$strap\->{max}\*(C'\fR, a list of which tests
293are todo in \f(CW\*(C`$strap\->{todo}\*(C'\fR and if the whole test was skipped
294\&\f(CW\*(C`$strap\->{skip_all}\*(C'\fR contains the reason.
295.ie n .Sh """_is_bail_out"""
296.el .Sh "\f(CW_is_bail_out\fP"
297.IX Subsection "_is_bail_out"
298.Vb 1
299\& my $is_bail_out = $strap->_is_bail_out($line, \e$reason);
300.Ve
301.PP
302Checks if the line is a \*(L"Bail out!\*(R". Places the reason for bailing
303(if any) in \f(CW$reason\fR.
304.ie n .Sh """_reset_file_state"""
305.el .Sh "\f(CW_reset_file_state\fP"
306.IX Subsection "_reset_file_state"
307.Vb 1
308\& $strap->_reset_file_state;
309.Ve
310.PP
311Resets things like \f(CW\*(C`$strap\->{max}\*(C'\fR , \f(CW\*(C`$strap\->{skip_all}\*(C'\fR,
312etc. so it's ready to parse the next file.
313.SH "Results"
314.IX Header "Results"
315The \f(CW%results\fR returned from \f(CW\*(C`analyze()\*(C'\fR contain the following
316information:
317.PP
318.Vb 2
319\& passing true if the whole test is considered a pass
320\& (or skipped), false if its a failure
321.Ve
322.PP
323.Vb 2
324\& exit the exit code of the test run, if from a file
325\& wait the wait code of the test run, if from a file
326.Ve
327.PP
328.Vb 4
329\& max total tests which should have been run
330\& seen total tests actually seen
331\& skip_all if the whole test was skipped, this will
332\& contain the reason.
333.Ve
334.PP
335.Vb 2
336\& ok number of tests which passed
337\& (including todo and skips)
338.Ve
339.PP
340.Vb 3
341\& todo number of todo tests seen
342\& bonus number of todo tests which
343\& unexpectedly passed
344.Ve
345.PP
346.Vb 1
347\& skip number of tests skipped
348.Ve
349.PP
350So a successful test should have max == seen == ok.
351.PP
352There is one final item, the details.
353.PP
354.Vb 2
355\& details an array ref reporting the result of
356\& each test looks like this:
357.Ve
358.PP
359.Vb 8
360\& $results{details}[$test_num - 1] =
361\& { ok => is the test considered ok?
362\& actual_ok => did it literally say 'ok'?
363\& name => name of the test (if any)
364\& diagnostics => test diagnostics (if any)
365\& type => 'skip' or 'todo' (if any)
366\& reason => reason for the above (if any)
367\& };
368.Ve
369.PP
370Element 0 of the details is test #1. I tried it with element 1 being
371#1 and 0 being empty, this is less awkward.
372.SH "EXAMPLES"
373.IX Header "EXAMPLES"
374See \fIexamples/mini_harness.plx\fR for an example of use.
375.SH "AUTHOR"
376.IX Header "AUTHOR"
377Michael G Schwern \f(CW\*(C`<schwern@pobox.com>\*(C'\fR, currently maintained by
378Andy Lester \f(CW\*(C`<andy@petdance.com>\*(C'\fR.
379.SH "SEE ALSO"
380.IX Header "SEE ALSO"
381Test::Harness