← Index
NYTProf Performance Profile   « line view »
For t/bug-md-11.t
  Run on Fri Mar 8 13:27:24 2024
Reported on Fri Mar 8 13:30:22 2024

Filename/home/micha/.plenv/versions/5.38.2/lib/perl5/site_perl/5.38.2/Test/Builder/Module.pm
StatementsExecuted 39 statements in 317µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1115.89ms49.3msTest::Builder::Module::::BEGIN@5Test::Builder::Module::BEGIN@5
22223µs631µsTest::Builder::Module::::importTest::Builder::Module::import
11110µs12µsTest::Builder::Module::::BEGIN@3Test::Builder::Module::BEGIN@3
44210µs15µsTest::Builder::Module::::builderTest::Builder::Module::builder
1117µs7µsTest::Builder::Module::::_strip_importsTest::Builder::Module::_strip_imports
111300ns300nsTest::Builder::Module::::__ANON__Test::Builder::Module::__ANON__ (xsub)
0000s0sTest::Builder::Module::::import_extraTest::Builder::Module::import_extra
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Test::Builder::Module;
2
3219µs213µs
# spent 12µs (10+2) within Test::Builder::Module::BEGIN@3 which was called: # once (10µs+2µs) by Test::More::BEGIN@22 at line 3
use strict;
# spent 12µs making 1 call to Test::Builder::Module::BEGIN@3 # spent 2µs making 1 call to strict::import
4
52255µs249.3ms
# spent 49.3ms (5.89+43.4) within Test::Builder::Module::BEGIN@5 which was called: # once (5.89ms+43.4ms) by Test::More::BEGIN@22 at line 5
use Test::Builder;
# spent 49.3ms making 1 call to Test::Builder::Module::BEGIN@5 # spent 300ns making 1 call to Test::Builder::Module::__ANON__
6
71400nsrequire Exporter;
815µsour @ISA = qw(Exporter);
9
101200nsour $VERSION = '1.302198';
11
12
13=head1 NAME
14
15Test::Builder::Module - Base class for test modules
16
17=head1 SYNOPSIS
18
19 # Emulates Test::Simple
20 package Your::Module;
21
22 my $CLASS = __PACKAGE__;
23
24 use parent 'Test::Builder::Module';
25 @EXPORT = qw(ok);
26
27 sub ok ($;$) {
28 my $tb = $CLASS->builder;
29 return $tb->ok(@_);
30 }
31
32 1;
33
34
35=head1 DESCRIPTION
36
37This is a superclass for L<Test::Builder>-based modules. It provides a
38handful of common functionality and a method of getting at the underlying
39L<Test::Builder> object.
40
41
42=head2 Importing
43
44Test::Builder::Module is a subclass of L<Exporter> which means your
45module is also a subclass of Exporter. @EXPORT, @EXPORT_OK, etc...
46all act normally.
47
48A few methods are provided to do the C<< use Your::Module tests => 23 >> part
49for you.
50
51=head3 import
52
53Test::Builder::Module provides an C<import()> method which acts in the
54same basic way as L<Test::More>'s, setting the plan and controlling
55exporting of functions and variables. This allows your module to set
56the plan independent of L<Test::More>.
57
58All arguments passed to C<import()> are passed onto
59C<< Your::Module->builder->plan() >> with the exception of
60C<< import =>[qw(things to import)] >>.
61
62 use Your::Module import => [qw(this that)], tests => 23;
63
64says to import the functions C<this()> and C<that()> as well as set the plan
65to be 23 tests.
66
67C<import()> also sets the C<exported_to()> attribute of your builder to be
68the caller of the C<import()> function.
69
70Additional behaviors can be added to your C<import()> method by overriding
71C<import_extra()>.
72
73=cut
74
75
# spent 631µs (23+608) within Test::Builder::Module::import which was called 2 times, avg 315µs/call: # once (5µs+489µs) by Test::More::BEGIN@22 at line 22 of Test/More.pm # once (18µs+120µs) by main::BEGIN@5 at line 5 of /home/micha/Projekt/spreadsheet-parsexlsx/t/bug-md-11.t
sub import {
762900ns my($class) = shift;
77
7822µs4496µs Test2::API::test2_load() unless Test2::API::test2_in_preload();
# spent 486µs making 2 calls to Test2::API::test2_load, avg 243µs/call # spent 10µs making 2 calls to Test2::API::test2_in_preload, avg 5µs/call
79
80 # Don't run all this when loading ourself.
8122µs return 1 if $class eq 'Test::Builder::Module';
82
8312µs14µs my $test = $class->builder;
# spent 4µs making 1 call to Test::Builder::Module::builder
84
851500ns my $caller = caller;
86
871800ns12µs $test->exported_to($caller);
# spent 2µs making 1 call to Test::Builder::exported_to
88
891900ns113µs $class->import_extra( \@_ );
# spent 13µs making 1 call to Test::More::import_extra
9012µs17µs my(@imports) = $class->_strip_imports( \@_ );
# spent 7µs making 1 call to Test::Builder::Module::_strip_imports
91
9211µs11µs $test->plan(@_);
# spent 1µs making 1 call to Test::Builder::plan
93
941300ns local $Exporter::ExportLevel = $Exporter::ExportLevel + 1;
9514µs185µs $class->Exporter::import(@imports);
# spent 85µs making 1 call to Exporter::import
96}
97
98
# spent 7µs within Test::Builder::Module::_strip_imports which was called: # once (7µs+0s) by Test::Builder::Module::import at line 90
sub _strip_imports {
991100ns my $class = shift;
1001200ns my $list = shift;
101
1021100ns my @imports = ();
1031100ns my @other = ();
1041200ns my $idx = 0;
1051400ns while( $idx <= $#{$list} ) {
1061400ns my $item = $list->[$idx];
107
1081300ns if( defined $item and $item eq 'import' ) {
10912µs push @imports, @{ $list->[ $idx + 1 ] };
1101100ns $idx++;
111 }
112 else {
113 push @other, $item;
114 }
115
1161300ns $idx++;
117 }
118
1191900ns @$list = @other;
120
12113µs return @imports;
122}
123
124=head3 import_extra
125
126 Your::Module->import_extra(\@import_args);
127
128C<import_extra()> is called by C<import()>. It provides an opportunity for you
129to add behaviors to your module based on its import list.
130
131Any extra arguments which shouldn't be passed on to C<plan()> should be
132stripped off by this method.
133
134See L<Test::More> for an example of its use.
135
136B<NOTE> This mechanism is I<VERY ALPHA AND LIKELY TO CHANGE> as it
137feels like a bit of an ugly hack in its current form.
138
139=cut
140
141sub import_extra { }
142
143=head2 Builder
144
145Test::Builder::Module provides some methods of getting at the underlying
146Test::Builder object.
147
148=head3 builder
149
150 my $builder = Your::Class->builder;
151
152This method returns the L<Test::Builder> object associated with Your::Class.
153It is not a constructor so you can call it as often as you like.
154
155This is the preferred way to get the L<Test::Builder> object. You should
156I<not> get it via C<< Test::Builder->new >> as was previously
157recommended.
158
159The object returned by C<builder()> may change at runtime so you should
160call C<builder()> inside each function rather than store it in a global.
161
162 sub ok {
163 my $builder = Your::Class->builder;
164
165 return $builder->ok(@_);
166 }
167
168
169=cut
170
171
# spent 15µs (10+5) within Test::Builder::Module::builder which was called 4 times, avg 4µs/call: # once (4µs+2µs) by Test::More::ok at line 321 of Test/More.pm # once (3µs+900ns) by Test::Builder::Module::import at line 83 # once (2µs+1µs) by Test::More::done_testing at line 248 of Test/More.pm # once (1µs+600ns) by Test::More::import_extra at line 208 of Test/More.pm
sub builder {
172411µs45µs return Test::Builder->new;
# spent 5µs making 4 calls to Test::Builder::new, avg 1µs/call
173}
174
175=head1 SEE ALSO
176
177L<< Test2::Manual::Tooling::TestBuilder >> describes the improved
178options for writing testing modules provided by L<< Test2 >>.
179
180=cut
181
18213µs1;
 
# spent 300ns within Test::Builder::Module::__ANON__ which was called: # once (300ns+0s) by Test::Builder::Module::BEGIN@5 at line 5
sub Test::Builder::Module::__ANON__; # xsub