use
constant
valid_macrostring_text
=>
'%{ir}.%{v}._spf.%{d2}'
;
=>
'1.0.168.192.in-addr._spf.example.com'
;
my
$test_resolver
= Net::DNS::Resolver::Programmable->new(
records
=> {}
);
my
$server
= Mail::SPF::Server->new(
dns_resolver
=>
$test_resolver
);
my
$request
= Mail::SPF::Request->new(
identity
=>
'foo.example.com'
,
ip_address
=>
'192.168.0.1'
);
BEGIN { use_ok(
'Mail::SPF::MacroString'
) }
{
my
$macrostring
=
eval
{ Mail::SPF::MacroString->new(
text
=> valid_macrostring_text,
server
=>
$server
,
request
=>
$request
) };
$@ eq
''
and isa_ok(
$macrostring
,
'Mail::SPF::MacroString'
,
'Early-context macro-string object'
)
or BAIL_OUT(
"Early-context macro-string instantiation failed: $@"
);
is(
$macrostring
->text, valid_macrostring_text,
'Early-context macro-string text()'
);
is(
$macrostring
->expand, valid_macrostring_expanded,
'Early-context macro-string expand()'
);
is(
$macrostring
, valid_macrostring_expanded,
'Early-context macro-string stringify() (+overloading)'
);
}
{
my
$macrostring
=
eval
{ Mail::SPF::MacroString->new(
text
=>
'%{ir}.%{v}._spf.%{d2}'
) };
$@ eq
''
and isa_ok(
$macrostring
,
'Mail::SPF::MacroString'
,
'Late-context macro-string object'
)
or BAIL_OUT(
"Late-context macro-string instantiation failed: $@"
);
is(
$macrostring
, valid_macrostring_text,
'Late-context macro-string context-less stringify() (+overloading)'
);
eval
{
$macrostring
->expand };
isa_ok($@,
'Mail::SPF::EMacroExpansionCtxRequired'
,
'Late-context macro-string context-less expand() illegal'
);
is(
$macrostring
->expand(
$server
,
$request
),
valid_macrostring_expanded,
'Late-context macro-string expand(context)'
);
is(
$macrostring
, valid_macrostring_text,
'Late-context macro-string context-less stringify() (+overloading) after expand(context)'
);
$macrostring
->context(
$server
,
$request
);
is(
$macrostring
->expand, valid_macrostring_expanded,
'Late-context macro-string context-ful expand()'
);
is(
$macrostring
, valid_macrostring_expanded,
'Late-context macro-string context-ful stringify() (+overloading)'
);
}