← Index
NYTProf Performance Profile   « block view • line view • sub view »
For 05.Domain_and_Item.t
  Run on Tue May 4 17:21:41 2010
Reported on Tue May 4 17:23:25 2010

File /usr/local/lib/perl5/5.10.1/Test/Builder/Module.pm
Statements Executed 89
Statement Execution Time 1.21ms
Subroutines — ordered by exclusive time
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1116.67ms7.78msTest::Builder::Module::::BEGIN@5Test::Builder::Module::BEGIN@5
5152334µs510µsTest::Builder::Module::::builderTest::Builder::Module::builder
22239µs1.75msTest::Builder::Module::::importTest::Builder::Module::import
11116µs24µsTest::Builder::Module::::BEGIN@3Test::Builder::Module::BEGIN@3
1118µs8µsTest::Builder::Module::::_strip_importsTest::Builder::Module::_strip_imports
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
3330µs233µs
# spent 24µs (16+8) within Test::Builder::Module::BEGIN@3 which was called # once (16µs+8µs) by Test::More::BEGIN@23 at line 3
use strict;
# spent 24µs making 1 call to Test::Builder::Module::BEGIN@3 # spent 8µs making 1 call to strict::import
4
53339µs17.78ms
# spent 7.78ms (6.67+1.11) within Test::Builder::Module::BEGIN@5 which was called # once (6.67ms+1.11ms) by Test::More::BEGIN@23 at line 5
use Test::Builder;
# spent 7.78ms making 1 call to Test::Builder::Module::BEGIN@5
6
71498µsrequire Exporter;
817µsour @ISA = qw(Exporter);
9
101300nsour $VERSION = '0.94';
11114µs$VERSION = eval $VERSION; ## no critic (BuiltinFunctions::ProhibitStringyEval)
12
13
14=head1 NAME
15
16Test::Builder::Module - Base class for test modules
17
18=head1 SYNOPSIS
19
20 # Emulates Test::Simple
21 package Your::Module;
22
23 my $CLASS = __PACKAGE__;
24
25 use base 'Test::Builder::Module';
26 @EXPORT = qw(ok);
27
28 sub ok ($;$) {
29 my $tb = $CLASS->builder;
30 return $tb->ok(@_);
31 }
32
33 1;
34
35
36=head1 DESCRIPTION
37
38This is a superclass for Test::Builder-based modules. It provides a
39handful of common functionality and a method of getting at the underlying
40Test::Builder object.
41
42
43=head2 Importing
44
45Test::Builder::Module is a subclass of Exporter which means your
46module is also a subclass of Exporter. @EXPORT, @EXPORT_OK, etc...
47all act normally.
48
49A few methods are provided to do the C<use Your::Module tests => 23> part
50for you.
51
52=head3 import
53
54Test::Builder::Module provides an import() method which acts in the
55same basic way as Test::More's, setting the plan and controling
56exporting of functions and variables. This allows your module to set
57the plan independent of Test::More.
58
59All arguments passed to import() are passed onto
60C<< Your::Module->builder->plan() >> with the exception of
61C<import =>[qw(things to import)]>.
62
63 use Your::Module import => [qw(this that)], tests => 23;
64
65says to import the functions this() and that() as well as set the plan
66to be 23 tests.
67
68import() also sets the exported_to() attribute of your builder to be
69the caller of the import() function.
70
71Additional behaviors can be added to your import() method by overriding
72import_extra().
73
74=cut
75
76
# spent 1.75ms (39µs+1.71) within Test::Builder::Module::import which was called 2 times, avg 874µs/call: # once (36µs+1.71ms) by main::BEGIN@1 at line 1 of 05.Domain_and_Item.t # once (3µs+0s) by Test::More::BEGIN@23 at line 23 of Test/More.pm
sub import {
7721µs my($class) = shift;
78
79 # Don't run all this when loading ourself.
8025µs return 1 if $class eq 'Test::Builder::Module';
81
8212µs17µs my $test = $class->builder;
# spent 7µs making 1 call to Test::Builder::Module::builder
83
841700ns my $caller = caller;
85
8612µs15µs $test->exported_to($caller);
# spent 5µs making 1 call to Test::Builder::exported_to
87
8812µs112µs $class->import_extra( \@_ );
# spent 12µs making 1 call to Test::More::import_extra
8913µs18µs my(@imports) = $class->_strip_imports( \@_ );
# spent 8µs making 1 call to Test::Builder::Module::_strip_imports
90
9112µs1127µs $test->plan(@_);
# spent 127µs making 1 call to Test::Builder::plan
92
9319µs11.36ms $class->export_to_level( 1, $class, @imports );
# spent 1.36ms making 1 call to Exporter::export_to_level
94}
95
96
# spent 8µs within Test::Builder::Module::_strip_imports which was called # once (8µs+0s) by Test::Builder::Module::import at line 89
sub _strip_imports {
971400ns my $class = shift;
981100ns my $list = shift;
99
1001200ns my @imports = ();
1011100ns my @other = ();
1021100ns my $idx = 0;
1031600ns while( $idx <= $#{$list} ) {
1042600ns my $item = $list->[$idx];
105
1062400ns if( defined $item and $item eq 'import' ) {
107 push @imports, @{ $list->[ $idx + 1 ] };
108 $idx++;
109 }
110 else {
1112700ns push @other, $item;
112 }
113
1142800ns $idx++;
115 }
116
11711µs @$list = @other;
118
11913µs return @imports;
120}
121
122=head3 import_extra
123
124 Your::Module->import_extra(\@import_args);
125
126import_extra() is called by import(). It provides an opportunity for you
127to add behaviors to your module based on its import list.
128
129Any extra arguments which shouldn't be passed on to plan() should be
130stripped off by this method.
131
132See Test::More for an example of its use.
133
134B<NOTE> This mechanism is I<VERY ALPHA AND LIKELY TO CHANGE> as it
135feels like a bit of an ugly hack in its current form.
136
137=cut
138
139sub import_extra { }
140
141=head2 Builder
142
143Test::Builder::Module provides some methods of getting at the underlying
144Test::Builder object.
145
146=head3 builder
147
148 my $builder = Your::Class->builder;
149
150This method returns the Test::Builder object associated with Your::Class.
151It is not a constructor so you can call it as often as you like.
152
153This is the preferred way to get the Test::Builder object. You should
154I<not> get it via C<< Test::Builder->new >> as was previously
155recommended.
156
157The object returned by builder() may change at runtime so you should
158call builder() inside each function rather than store it in a global.
159
160 sub ok {
161 my $builder = Your::Class->builder;
162
163 return $builder->ok(@_);
164 }
165
166
167=cut
168
169
# spent 510µs (334+176) within Test::Builder::Module::builder which was called 51 times, avg 10µs/call: # 31 times (189µs+107µs) by Test::More::is at line 370 of Test/More.pm, avg 10µs/call # 10 times (73µs+35µs) by Test::More::ok at line 293 of Test/More.pm, avg 11µs/call # 7 times (56µs+27µs) by Test::More::isa_ok at line 576 of Test/More.pm, avg 12µs/call # 2 times (11µs+6µs) by Test::More::cmp_ok at line 474 of Test/More.pm, avg 8µs/call # once (5µs+1µs) by Test::Builder::Module::import at line 82
sub builder {
17051279µs51176µs return Test::Builder->new;
# spent 176µs making 51 calls to Test::Builder::new, avg 3µs/call
171}
172
17315µs1;