$Test::Selenium::Remote::Role::DoesTesting::VERSION
=
'1.49'
;
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
_get_finder_key {
my
$self
=
shift
;
my
$finder_value
=
shift
;
foreach
my
$k
(
keys
%{
$self
->FINDERS } ) {
return
$k
if
(
$self
->FINDERS->{
$k
} eq
$finder_value
);
}
return
;
}
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
);
if
(
$method
=~ m/^find(_no|_child)?_element/ ) {
if
(
scalar
(
@r_args
) -
$num_of_args
== 1 ) {
push
@r_args
,
$self
->_get_finder_key(
$self
->default_finder );
}
else
{
if
(
scalar
(
@r_args
) ==
$num_of_args
) {
my
$finder
=
$r_args
[
$num_of_args
- 1 ];
my
@FINDERS
=
keys
( %{
$self
->FINDERS } );
unless
( any {
$finder
eq
$_
}
@FINDERS
) {
$r_args
[
$num_of_args
- 1 ] =
$self
->_get_finder_key(
$self
->default_finder );
push
@args
,
$finder
;
}
}
}
}
if
(
$method
eq
'find_no_element'
) {
my
$elements
=
$self
->find_elements(
@r_args
);
if
( @{
$elements
} ) {
$rv
=
$elements
->[0];
}
else
{
$rv
= 1;
}
}
else
{
$rv
=
$self
->
$method
(
@r_args
);
}
}
catch
{
if
(
$method
eq
'find_no_element'
) {
$rv
= 1;
}
else
{
$self
->croak(
$_
);
}
};
my
$test_name
=
pop
@args
;
if
( !
defined
$test_name
) {
$test_name
=
$num_of_args
> 0 ?
join
(
' '
,
$method
,
map
{
q{'$_'}
}
@r_args
)
:
$method
;
}
if
(
$method
eq
'find_no_element'
) {
if
( blessed(
$rv
) &&
$rv
->isa(
'Selenium::Remote::WebElement'
) ) {
$self
->croak(
$test_name
);
}
}
return
$self
->ok(
$rv
,
$test_name
);
}
sub
_build_sub {
my
$self
=
shift
;
my
$meth_name
=
shift
;
my
@meth_elements
=
split
'_'
,
$meth_name
;
my
$meth_comp
=
pop
@meth_elements
;
my
$meth_without_comp
=
join
'_'
,
@meth_elements
;
if
(
$meth_comp
eq
'ok'
) {
return
sub
{
my
$self
=
shift
;
local
$Test::Builder::Level
=
$Test::Builder::Level
+ 2;
return
$self
->_check_ok(
$meth_without_comp
,
@_
);
};
}
my
%comparators
= (
is
=>
'is_eq'
,
isnt
=>
'isnt_eq'
,
like
=>
'like'
,
unlike
=>
'unlike'
,
);
if
( !
exists
$comparators
{
$meth_comp
} ) {
return
sub
{
my
$self
=
shift
;
return
$self
->croak(
"Sub $meth_name could not be defined"
);
};
}
return
sub
{
my
$self
=
shift
;
local
$Test::Builder::Level
=
$Test::Builder::Level
+ 2;
return
$self
->_check_method(
$meth_without_comp
,
$comparators
{
$meth_comp
},
@_
);
};
}
1;