The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/pugs

use v6;
use Test;

plan 30;

=pod

More advanced tests for params

=cut

use CGI; pass "(dummy instead of broken use_ok)";

{
    my $query_string = 'multi=1;multi=2;multi=3';

    unpack_params($query_string);
    is(pack_params(), $query_string, 'packed the params correctly');

    my @param_keys = param();
    is(+@param_keys, 1, 'we have 1 parameter');
    is(@param_keys[0], 'multi', 'the first one is "multi"');

    my $list = param('multi');
    is(+$list, 3, 'we have three elements in the multi list');
    is($list[0], 1, 'the first element is 1');
    is($list[1], 2, 'the second element is 2');
    is($list[2], 3, 'the third element is 3');        
}

clear_params();

{
    my $query_string = 'first_name=Stevan;last_name=Little';

    unpack_params($query_string);
    is(pack_params(), $query_string, 'packed the params correctly');

    my @param_keys = param();
    is(+@param_keys, 2, 'we have 1 parameter');
    is(@param_keys[0], 'first_name', 'the first one is "first_name"');
    is(@param_keys[1], 'last_name', 'the first one is "last_name"');
    
    is(param('first_name'), 'Stevan', 'got the right value for first_name');       
    is(param('last_name'), 'Little', 'got the right value for last_name');
}

try { set_delimiter('!') };
ok $!, 'Setting qs delimiter to an invalid value should fail';
ok set_delimiter('&'), '... but setting it to a valid value should succeed';

clear_params();

{
    my $query_string = 'multi=1&multi=2&multi=3';

    unpack_params($query_string);
    is(pack_params(), $query_string, 'packed the params correctly');

    my @param_keys = param();
    is(+@param_keys, 1, 'we have 1 parameter');
    is(@param_keys[0], 'multi', 'the first one is "multi"');

    my $list = param('multi');
    is(+$list, 3, 'we have three elements in the multi list');
    is($list[0], 1, 'the first element is 1');
    is($list[1], 2, 'the second element is 2');
    is($list[2], 3, 'the third element is 3');        

    clear_params();

    $query_string = 'foo=1;foo=2;';
    unpack_params($query_string);
    is(pack_params(), 'foo=1&foo=2', 'Parms work even if the default delimiter is changed');
}

clear_params();

{
    my $query_string = 'first_name=Stevan&last_name=Little';

    unpack_params($query_string);
    is(pack_params(), $query_string, 'packed the params correctly');

    my @param_keys = param();
    is(+@param_keys, 2, 'we have 1 parameter');
    is(@param_keys[0], 'first_name', 'the first one is "first_name"');
    is(@param_keys[1], 'last_name', 'the first one is "last_name"');   
    
    is(param('first_name'), 'Stevan', 'got the right value for first_name');       
    is(param('last_name'), 'Little', 'got the right value for last_name');
}