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