Module-Generic
view release on metacpan or search on metacpan
t/13.header_value.t view on Meta::CPAN
use warnings;
subtest 'parse' => sub
{
my $tests =
[
{ test => q{foo=bar}, expect => [{ value => 'foo=bar' }] },
{ test => q{foo=val; Path=/}, expect => [{ value => q{foo=val}, path => "/" }] },
{ test => q{foo=val; Path=/; Secure}, expect => [{ value => q{foo=val}, path => "/", secure => undef }] },
{ test => q{foo=val; Expires=Mon, 01 Nov 2021 08:12:10 GMT}, expect => [{ value => q{foo=val}, expires => q{Mon, 01 Nov 2021 08:12:10 GMT} }] },
{ test => q{foo=val; Expires=Mon, 01 Nov 2021 08:12:10 GMT, bar=baz; Max-Age=3600}, expect => [{ value => q{foo=val}, expires => q{Mon, 01 Nov 2021 08:12:10 GMT} }, { value => q{bar=baz}, "max-age" => 3600 }] },
{ test => q{text/html; charset=utf-8}, expect => [{ value => q{text/html}, charset => 'utf-8' }] },
{ test => q{application/json; version=1.0; encoding=utf-8}, expect => [{ value => q{application/json}, version => '1.0', encoding => 'utf-8' }] },
];
foreach my $t ( @$tests )
{
my $res = Module::Generic::HeaderValue->new_from_multi( $t->{test}, { debug => $DEBUG });
ok( $res );
SKIP:
{
if( !defined( $res ) )
{
diag( "new_from_multi returned an error: ", Module::Generic::HeaderValue->error ) if( $DEBUG );
skip( "new_from_multi failed", 2 );
}
my $fail = ( $res->length == scalar( @{$t->{expect}} ) ) ? 0 : 1;
ok( !$fail, '# of elements found' );
skip( "wrong number of elements found", 1 ) if( $fail );
ELEM: for( my $i = 0; $i < scalar( @{$t->{expect}} ); $i++ )
{
my $def = $t->{expect}->[$i];
my $val = delete( $def->{value} );
my $elem = $res->[$i];
diag( "Value as string is '", $elem->value_as_string, "' vs test '$val'" ) if( $DEBUG );
$elem->value_as_string eq $val or ++$fail, last;
no warnings 'uninitialized';
foreach my $att ( sort( keys( %$def ) ) )
{
diag( "Does param '$att' exists? ", $elem->params->exists( $att ) ? 'yes' : 'no' ) if( $DEBUG );
$def->{ $att } eq $elem->param( $att ) or ++$fail, last ELEM;
}
}
if( $fail )
{
fail( $t->{test} );
}
else
{
pass( $t->{test} );
}
};
}
};
subtest 'stringify' => sub
{
my $tests =
[
{ value => 'site_prefs=lang%3Den-GB', params => { path => '/', expires => 'Monday, 01-Nov-2021 17:12:40 GMT', domain => 'www.example.com', secure => undef }, expect => 'site_prefs=lang%3Den-GB; domain=www.example.com; expires="Monday, 01-Nov-2021...
{ value => 'site_prefs=lang%3Den-GB', params => { path => '/', expires => 'Monday, 01-Nov-2021 17:12:40 GMT', domain => 'www.example.com' }, expect => 'site_prefs=lang%3Den-GB; domain=www.example.com; expires="Monday, 01-Nov-2021 17:12:40 GMT"; p...
];
foreach my $t ( @$tests )
{
my $expect = delete( $t->{expect} );
$t->{debug} = $DEBUG;
my $hv = Module::Generic::HeaderValue->new( delete( $t->{value} ) => $t );
my $res = $hv->as_string;
if( !defined( $res ) )
{
diag( "Error with as_string: ", $hv->error ) if( $DEBUG );
}
is( $res, $expect );
}
};
subtest 'Additional methods' => sub
{
my $hv = Module::Generic::HeaderValue->new( "foo=bar", debug => $DEBUG );
$hv->decode(1);
is( $hv->decode, 1, 'decode' );
$hv->encode(1);
is( $hv->encode, 1, 'encode' );
$hv->original( "foo=bar; baz=qux" );
is( $hv->original->scalar, "foo=bar; baz=qux", 'original' );
$hv->param( baz => "qux" );
is( $hv->param( "baz" ), "qux", 'param set/get' );
isa_ok( $hv->params, 'Module::Generic::Hash', 'params class' );
my $quoted = $hv->qstring( "Mon, 01 Nov 2021" );
is( $quoted, '"Mon, 01 Nov 2021"', 'qstring' );
$hv->reset;
is( $hv->original->scalar, "", 'reset' );
my $escaped = $hv->token_escape( "foo/bar" );
is( $escaped, "foo%2Fbar", 'token_escape' );
$hv->token_max(10);
is( $hv->token_max, 10, 'token_max' );
$hv->value_max(20);
is( $hv->value_max, 20, 'value_max' );
isa_ok( $hv->value, 'Module::Generic::Array', 'value class' );
is( $hv->value_as_string, "foo=bar", 'value_as_string' );
is( $hv->value_data, "bar", 'value_data' );
is( $hv->value_name, "foo", 'value_name' );
};
subtest 'Edge cases' => sub
{
no warnings;
my $hv = Module::Generic::HeaderValue->new( "foo=bar", debug => $DEBUG );
$hv->token_max(3);
$hv->param( long_token => "value" );
my $res = $hv->as_string;
ok( !defined( $res ), 'Token exceeds max length' );
$hv->token_max(0);
$hv->value_max(2);
$hv->param( short => "long_value" );
$res = $hv->as_string;
ok( !defined( $res ), 'Value exceeds max length' );
$hv->value_max(0);
my $quoted = $hv->qstring( "invalid\nvalue" );
ok( !defined( $quoted ), 'Invalid characters in qstring' );
( run in 0.726 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )