CGI-Minimal

 view release on metacpan or  search on metacpan

t/02_encodings.t  view on Meta::CPAN

    my $null_string = CGI::Minimal->dehtmlize;
    unless (defined $null_string) {
        return 'dehtmlize failed to upgrade an undefined value to an defined string';
    }
    unless ('' eq $null_string) {
        return 'dehtmlize failed to upgrade an undefined value to an empty string';
    }

    $null_string = CGI::Minimal->htmlize;
    unless (defined $null_string) {
        return 'htmlize failed to upgrade an undefined value to an defined string';
    }
    unless ('' eq $null_string) {
        return 'htmlize failed to upgrade an undefined value to an empty string';
    }

    return '';
}

###############################################################
# Test URL encoding/decoding per RFC 2396                     #
# RFC2396 _requires_ escaping all characters                  #
# with the exceptions of a-zA-Z0-9-_.!~*'()                   #
#                                                             #
# It permits 'overencoding' characters, and                   #
# in fact we do encode ~!*'()                                 #
###############################################################

sub test_url_encoding {
    my @encoding_table = ();
    foreach my $character_number(0..255) {
        my $character = chr($character_number);
        $character =~ s/([\000-\377])/"\%".unpack("H",$1).unpack("h",$1)/egs;
        push (@encoding_table, $character);
    }
    
    my @failed_encoding_code_points = ();
    foreach my $character_number (0..255) {
        my $character = chr($character_number);
        my $encoded_form = CGI::Minimal->url_encode($character);
        if ($character =~ m/[-_.a-zA-Z0-9]/) {
            unless ($encoded_form eq $character) {
                push (@failed_encoding_code_points, $character_number);
                warn("Mis-match 1\n");
            }
        } else {
            unless ($encoded_form eq $encoding_table[$character_number]) {
                push (@failed_encoding_code_points, $character_number);
                warn("Mis-match 2 - expected $encoding_table[$character_number] got $encoded_form\n");
            }

        }
        if (0 < @failed_encoding_code_points) {
            return "failed to handle encoding characters for decimal character points " . join(', ',@failed_encoding_code_points); 
        }
    }

    my @failed_decoding_code_points = ();
    for (my $counter = 0; $counter < 256; $counter++) {
        my $encoded_char = $encoding_table[$counter];
        my $decoded_char = CGI::Minimal->url_decode($encoded_char);
        unless (chr($counter) eq $decoded_char) {
            push (@failed_decoding_code_points, $encoded_char);
        }
    }
    unless (CGI::Minimal->url_decode('+') eq '') {
        push (@failed_decoding_code_points, '+');
    }
    if (0 < @failed_encoding_code_points) {
        return "failed to handle decoding " . join(' ',@failed_decoding_code_points); 
    }

    my $null_string = CGI::Minimal->url_decode;
    unless (defined $null_string) {
        return 'url_decode failed to upgrade an undefined value to an defined string';
    }
    unless ('' eq $null_string) {
        return 'url_decode failed to reify an undefined value as an empty string';
    }

    $null_string = CGI::Minimal->url_encode;
    unless (defined $null_string) {
        return 'url_encode failed to upgrade an undefined value to an defined string';
    }
    unless ('' eq $null_string) {
        return 'url_encode failed to upgrade an undefined value to an empty string';
    }

    return '';
}

###########################################################################################

sub run_tests {
    my ($test_subs,$do_tests) = @_;

    print @$do_tests[0],'..',@$do_tests[$#$do_tests],"\n";
    print STDERR "\n";
    my $n_failures = 0;
    foreach my $test (@$do_tests) {
        my $sub  = $test_subs->{$test}->{-code};
        my $desc = $test_subs->{$test}->{-desc};
        my $failure = '';
        eval { $failure = &$sub; };
        if ($@) {
            $failure = $@;
        }
        if ($failure ne '') {
            chomp $failure;
            print "not ok $test\n";
            print STDERR "    $desc - $failure\n";
            $n_failures++;
        } else {
            print "ok $test\n";
            print STDERR "    $desc - ok\n";

        }
    }
    
    print "END\n";
}



( run in 1.983 second using v1.01-cache-2.11-cpan-ceb78f64989 )