Class-Method-Modifiers-Fast
view release on metacpan or search on metacpan
inc/Test/Base.pm view on Meta::CPAN
606162636465666768697071727374757677787980my
$default_class
;
my
$default_object
;
my
$reserved_section_names
= {};
sub
default_object {
$default_object
||=
$default_class
->new;
return
$default_object
;
}
my
$import_called
= 0;
sub
import
() {
$import_called
= 1;
my
$class
= (
grep
/^-base$/i,
@_
)
?
scalar
(
caller
)
:
$_
[0];
if
(not
defined
$default_class
) {
$default_class
=
$class
;
}
# else {
# croak "Can't use $class after using $default_class"
# unless $default_class->isa($class);
inc/Test/Base.pm view on Meta::CPAN
126127128129130131132133134135136137138139140141142143144145146147148149150151152153}
sub
check_late {
if
(
$self
->{block_list}) {
my
$caller
= (
caller
(1))[3];
$caller
=~ s/.*:://;
croak
"Too late to call $caller()"
}
}
sub
find_my_self() {
my
$self
=
ref
(
$_
[0]) eq
$default_class
?
splice
(
@_
, 0, 1)
: default_object();
return
$self
,
@_
;
}
sub
blocks() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
croak
"Invalid arguments passed to 'blocks'"
if
@_
> 1;
croak
sprintf
(
"'%s' is invalid argument to blocks()"
,
shift
(
@_
))
if
@_
&&
$_
[0] !~ /^[a-zA-Z]\w*$/;
my
$blocks
=
$self
->block_list;
my
$section_name
=
shift
||
''
;
inc/Test/Base.pm view on Meta::CPAN
160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
return
(
@blocks
)
if
$self
->_filters_delay;
for
my
$block
(
@blocks
) {
$block
->run_filters
unless
$block
->is_filtered;
}
return
(
@blocks
);
}
sub
next_block() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
my
$list
=
$self
->_next_list;
if
(
@$list
== 0) {
$list
= [@{
$self
->block_list},
undef
];
$self
->_next_list(
$list
);
}
my
$block
=
shift
@$list
;
if
(
defined
$block
and not
$block
->is_filtered) {
$block
->run_filters;
}
return
$block
;
}
sub
first_block() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
$self
->_next_list([]);
$self
->next_block;
}
sub
filters_delay() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
$self
->_filters_delay(
defined
$_
[0] ?
shift
: 1);
}
sub
no_diag_on_only() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
$self
->_no_diag_on_only(
defined
$_
[0] ?
shift
: 1);
}
sub
delimiters() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
$self
->check_late;
my
(
$block_delimiter
,
$data_delimiter
) =
@_
;
$block_delimiter
||=
$self
->block_delim_default;
$data_delimiter
||=
$self
->data_delim_default;
$self
->block_delim(
$block_delimiter
);
$self
->data_delim(
$data_delimiter
);
return
$self
;
}
sub
spec_file() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
$self
->check_late;
$self
->_spec_file(
shift
);
return
$self
;
}
sub
spec_string() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
$self
->check_late;
$self
->_spec_string(
shift
);
return
$self
;
}
sub
filters() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
if
(
ref
(
$_
[0]) eq
'HASH'
) {
$self
->_filters_map(
shift
);
}
else
{
my
$filters
=
$self
->_filters;
push
@$filters
,
@_
;
}
return
$self
;
}
sub
filter_arguments() {
$Test::Base::Filter::arguments
;
}
sub
have_text_diff {
$Text::Diff::VERSION
>= 0.35 &&
$Algorithm::Diff::VERSION
>= 1.15;
}
sub
is($$;$) {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
my
(
$actual
,
$expected
,
$name
) =
@_
;
local
$Test::Builder::Level
=
$Test::Builder::Level
+ 1;
if
(
$ENV
{TEST_SHOW_NO_DIFFS} or
not
defined
$actual
or
not
defined
$expected
or
$actual
eq
$expected
or
not(
$self
->have_text_diff) or
$expected
!~ /\n./s
) {
Test::More::is(
$actual
,
$expected
,
$name
);
}
else
{
$name
=
''
unless
defined
$name
;
ok
$actual
eq
$expected
,
$name
.
"\n"
. Text::Diff::diff(\
$expected
, \
$actual
);
}
}
sub
run(&;$) {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
my
$callback
=
shift
;
for
my
$block
(@{
$self
->block_list}) {
$block
->run_filters
unless
$block
->is_filtered;
&{
$callback
}(
$block
);
}
}
my
$name_error
=
"Can't determine section names"
;
sub
_section_names {
inc/Test/Base.pm view on Meta::CPAN
287288289290291292293294295296297298299300301302303304305306307}
sub
_assert_plan {
plan(
'no_plan'
)
unless
$Have_Plan
;
}
sub
END {
run_compare()
unless
$Have_Plan
or
$DIED
or not
$import_called
;
}
sub
run_compare() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
$self
->_assert_plan;
my
(
$x
,
$y
) =
$self
->_section_names(
@_
);
local
$Test::Builder::Level
=
$Test::Builder::Level
+ 1;
for
my
$block
(@{
$self
->block_list}) {
next
unless
exists
(
$block
->{
$x
}) and
exists
(
$block
->{
$y
});
$block
->run_filters
unless
$block
->is_filtered;
if
(
ref
$block
->
$x
) {
is_deeply(
$block
->
$x
,
$block
->
$y
,
$block
->name ?
$block
->name : ());
inc/Test/Base.pm view on Meta::CPAN
309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
elsif
(
ref
$block
->
$y
eq
'Regexp'
) {
my
$regexp
=
ref
$y
?
$y
:
$block
->
$y
;
like(
$block
->
$x
,
$regexp
,
$block
->name ?
$block
->name : ());
}
else
{
is(
$block
->
$x
,
$block
->
$y
,
$block
->name ?
$block
->name : ());
}
}
}
sub
run_is() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
$self
->_assert_plan;
my
(
$x
,
$y
) =
$self
->_section_names(
@_
);
local
$Test::Builder::Level
=
$Test::Builder::Level
+ 1;
for
my
$block
(@{
$self
->block_list}) {
next
unless
exists
(
$block
->{
$x
}) and
exists
(
$block
->{
$y
});
$block
->run_filters
unless
$block
->is_filtered;
is(
$block
->
$x
,
$block
->
$y
,
$block
->name ?
$block
->name : ()
);
}
}
sub
run_is_deeply() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
$self
->_assert_plan;
my
(
$x
,
$y
) =
$self
->_section_names(
@_
);
for
my
$block
(@{
$self
->block_list}) {
next
unless
exists
(
$block
->{
$x
}) and
exists
(
$block
->{
$y
});
$block
->run_filters
unless
$block
->is_filtered;
is_deeply(
$block
->
$x
,
$block
->
$y
,
$block
->name ?
$block
->name : ()
);
}
}
sub
run_like() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
$self
->_assert_plan;
my
(
$x
,
$y
) =
$self
->_section_names(
@_
);
for
my
$block
(@{
$self
->block_list}) {
next
unless
exists
(
$block
->{
$x
}) and
defined
(
$y
);
$block
->run_filters
unless
$block
->is_filtered;
my
$regexp
=
ref
$y
?
$y
:
$block
->
$y
;
like(
$block
->
$x
,
$regexp
,
$block
->name ?
$block
->name : ()
);
}
}
sub
run_unlike() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
$self
->_assert_plan;
my
(
$x
,
$y
) =
$self
->_section_names(
@_
);
for
my
$block
(@{
$self
->block_list}) {
next
unless
exists
(
$block
->{
$x
}) and
defined
(
$y
);
$block
->run_filters
unless
$block
->is_filtered;
my
$regexp
=
ref
$y
?
$y
:
$block
->
$y
;
unlike(
$block
->
$x
,
$regexp
,
$block
->name ?
$block
->name : ()
);
}
}
sub
skip_all_unless_require() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
my
$module
=
shift
;
eval
"require $module; 1"
or Test::More::plan(
skip_all
=>
"$module failed to load"
);
}
sub
is_deep() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
Test::Deep::cmp_deeply(
@_
);
}
sub
run_is_deep() {
(
my
(
$self
),
@_
) = find_my_self(
@_
);
$self
->_assert_plan;
my
(
$x
,
$y
) =
$self
->_section_names(
@_
);
for
my
$block
(@{
$self
->block_list}) {
next
unless
exists
(
$block
->{
$x
}) and
exists
(
$block
->{
$y
});
$block
->run_filters
unless
$block
->is_filtered;
is_deep(
$block
->
$x
,
$block
->
$y
,
$block
->name ?
$block
->name : ()
);
}
inc/Test/Base.pm view on Meta::CPAN
504505506507508509510511512513514515516517518519520521522523524
else
{
$spec
=
do
{
no
warnings
'once'
;
<DATA>;
};
}
return
$spec
;
}
sub
_strict_warnings() {
my
$done
= 0;
Filter::Util::Call::filter_add(
sub
{
return
0
if
$done
;
my
(
$data
,
$end
) = (
''
,
''
);
while
(
my
$status
= Filter::Util::Call::filter_read()) {
return
$status
if
$status
< 0;
if
(/^__(?:END|DATA)__\r?$/) {
$end
=
$_
;
inc/Test/Base.pm view on Meta::CPAN
526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558
}
$data
.=
$_
;
$_
=
''
;
}
$_
=
"use strict;use warnings;$data$end"
;
$done
= 1;
}
);
}
sub
tie_output() {
my
$handle
=
shift
;
die
"No buffer to tie"
unless
@_
;
tie
$handle
,
'Test::Base::Handle'
,
$_
[0];
}
sub
no_diff {
$ENV
{TEST_SHOW_NO_DIFFS} = 1;
}
package
Test::Base::Handle;
sub
TIEHANDLE() {
my
$class
=
shift
;
bless
\
$_
[0],
$class
;
}
sub
PRINT {
$$self
.=
$_
for
@_
;
}
#===============================================================================
# Test::Base::Block
inc/Test/Base.pm view on Meta::CPAN
561562563564565566567568569570571572573574575576577578579580581#===============================================================================
package
Test::Base::Block;
our
@ISA
=
qw(Spiffy)
;
our
@EXPORT
=
qw(block_accessor)
;
sub
AUTOLOAD {
return
;
}
sub
block_accessor() {
my
$accessor
=
shift
;
no
strict
'refs'
;
return
if
defined
&$accessor
;
*$accessor
=
sub
{
my
$self
=
shift
;
if
(
@_
) {
Carp::croak
"Not allowed to set values for '$accessor'"
;
}
my
@list
= @{
$self
->{
$accessor
} || []};
return
wantarray
inc/Test/More.pm view on Meta::CPAN
114115116117118119120121122123124125126127128129130131132133134#line 426
sub
unlike ($$;$) {
my
$tb
= Test::More->builder;
return
$tb
->unlike(
@_
);
}
#line 471
sub
cmp_ok($$$;$) {
my
$tb
= Test::More->builder;
return
$tb
->cmp_ok(
@_
);
}
#line 506
sub
can_ok ($@) {
my
(
$proto
,
@methods
) =
@_
;
my
$class
=
ref
$proto
||
$proto
;
( run in 0.277 second using v1.01-cache-2.11-cpan-95122f20152 )