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

use v6;
require Test;

plan 21;

=pod

Very basic tests for CGI

=cut

use_ok('CGI');

is(header(),
    "Status: 200 OK
Content-Type: text/html

", 'got the header correctly');

is(redirect("http://www.yahoo.com"),
    "Status: 302 Found
Content-Type: 
Location: http://www.yahoo.com

", 'got the header correctly');

is(url_encode('this is a string to encode'), 'this%20is%20a%20string%20to%20encode', 'got the right encoded string');
is(url_decode('this+is+a+string+to+decode'), 'this is a string to decode', 'got the right decoded string');
is(url_decode('this%20is%20a%20string%20to%20decode'), 'this is a string to decode', 'got the right decoded string');

my $query_string = 'test=hello%20world;this%20is%20a%20number=1';

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

my @param_keys = param();
is(+@param_keys, 2, 'we have 2 parameters');
is(@param_keys[0], 'test', 'the first one is "test"');
is(@param_keys[1], 'this is a number', 'the second one is "this is a number"');

is(param(@param_keys[0]), 'hello world', 'the value for param "test" is correct');
is(param(@param_keys[1]), 1, 'the value for param "this is a number" is correct');

# these will all be undefined
is(query_string(), undef, 'the value returned is undef');
is(request_method(), undef, 'the value returned is undef');
is(content_type(), undef, 'the value returned is undef');
is(content_length(), undef, 'the value returned is undef');

# as with these
is(path_info(), undef, 'the value returned is undef');
is(request_uri(), undef, 'the value returned is undef');
is(referer(), undef, 'the value returned is undef');
is(document_root(), undef, 'the value returned is undef');

# but not this one
is(script_name(), $*PROGRAM_NAME, 'the value returned is that of $*PROGRAM_NAME');