1use Test::More tests => 58; 2use strict; 3 4use CGI::Simple::Util qw(escape unescape); 5 6# ASCII order, ASCII codepoints, ASCII repertoire 7 8my %punct = ( 9 ' ' => '20', 10 '!' => '21', 11 '"' => '22', 12 '#' => '23', 13 '$' => '24', 14 '%' => '25', 15 '&' => '26', 16 '\'' => '27', 17 '(' => '28', 18 ')' => '29', 19 '*' => '2A', 20 '+' => '2B', 21 ',' => '2C', 22 # '-' => '2D', '.' => '2E' 23 '/' => '2F', 24 ':' => '3A', 25 ';' => '3B', 26 '<' => '3C', 27 '=' => '3D', 28 '>' => '3E', 29 '?' => '3F', 30 '[' => '5B', 31 '\\' => '5C', 32 ']' => '5D', 33 '^' => '5E', 34 # '_' => '5F', 35 '`' => '60', 36 '{' => '7B', 37 '|' => '7C', 38 '}' => '7D', 39 '~' => '7E', 40); 41 42# The sort order may not be ASCII on EBCDIC machines: 43 44foreach ( sort( keys( %punct ) ) ) { 45 my $escape = "AbC\%$punct{$_}dEF"; 46 my $cgi_escape = escape( "AbC$_" . "dEF" ); 47 is( $escape, $cgi_escape, "$escape ne $cgi_escape" ); 48 my $unescape = "AbC$_" . "dEF"; 49 my $cgi_unescape = unescape( "AbC\%$punct{$_}dEF" ); 50 is( $unescape, $cgi_unescape, "$unescape ne $cgi_unescape" ); 51} 52 53