$Test::Selenium::Remote::Role::DoesTesting::VERSION
=
'0.2153'
;
requires
qw(func_list has_args)
;
has
_builder
=> (
is
=>
'lazy'
,
builder
=>
sub
{
return
Test::Builder->new() },
handles
=> [
qw/is_eq isnt_eq like unlike ok croak/
],
);
sub
_check_method {
my
$self
=
shift
;
my
$method
=
shift
;
my
$method_to_test
=
shift
;
$method
=
"get_$method"
;
my
@args
=
@_
;
my
$rv
;
try
{
my
$num_of_args
=
$self
->has_args(
$method
);
my
@r_args
=
splice
(
@args
, 0,
$num_of_args
);
$rv
=
$self
->
$method
(
@r_args
);
}
catch
{
$self
->croak(
$_
);
};
return
$self
->
$method_to_test
(
$rv
,
@args
);
}
sub
_check_ok {
my
$self
=
shift
;
my
$method
=
shift
;
my
@args
=
@_
;
my
(
$rv
,
$num_of_args
,
@r_args
);
try
{
$num_of_args
=
$self
->has_args(
$method
);
@r_args
=
splice
(
@args
, 0,
$num_of_args
);
$rv
=
$self
->
$method
(
@r_args
);
}
catch
{
$self
->croak(
$_
);
};
my
$default_test_name
=
$method
;
$default_test_name
.=
"'"
.
join
(
"' "
,
@r_args
) .
"'"
if
$num_of_args
> 0;
my
$test_name
=
pop
@args
//
$default_test_name
;
return
$self
->ok(
$rv
,
$test_name
);
}
sub
_build_sub {
my
$self
=
shift
;
my
$meth_name
=
shift
;
my
@func_args
;
my
$comparators
= {
is
=>
'is_eq'
,
isnt
=>
'isnt_eq'
,
like
=>
'like'
,
unlike
=>
'unlike'
,
};
my
@meth_elements
=
split
(
'_'
,
$meth_name
);
my
$meth
=
'_check_ok'
;
my
$meth_comp
=
pop
@meth_elements
;
if
(
$meth_comp
eq
'ok'
) {
push
@func_args
,
join
(
'_'
,
@meth_elements
);
}
else
{
if
(
defined
(
$comparators
->{
$meth_comp
} ) ) {
$meth
=
'_check_method'
;
push
@func_args
,
join
(
'_'
,
@meth_elements
),
$comparators
->{
$meth_comp
};
}
else
{
return
sub
{
my
$self
=
shift
;
$self
->croak(
"Sub $meth_name could not be defined"
);
}
}
}
return
sub
{
my
$self
=
shift
;
local
$Test::Builder::Level
=
$Test::Builder::Level
+ 2;
$self
->
$meth
(
@func_args
,
@_
);
};
}
1;