1#!/usr/bin/env perl
2
3use strict;
4use warnings;
5
6use WgetFeature qw(iri);
7use HTTPTest;
8
9# " Kon'nichiwa <dot> Japan
10my $euc_jp_hostname = "\272\243\306\374\244\317.\306\374\313\334";
11my $punycoded_hostname = 'xn--v9ju72g90p.xn--wgv71a';
12my $escaped_hostname = "%ba%a3%c6%fc%a4%cf.%c6%fc%cb%dc";
13
14###############################################################################
15
16my $starter_file = <<EOF;
17<a href="http://$euc_jp_hostname/foo.txt">The link</a>
18<a href="http://$punycoded_hostname/foo2.txt">The second link</a>
19<a href="http://$escaped_hostname/foo3.txt">The third link</a>
20EOF
21
22my $result_file = <<EOF;
23Found me!
24EOF
25
26# code, msg, headers, content
27my %urls = (
28    "http://$punycoded_hostname/index.html" => {
29        code => "200",
30        msg => "Yes, please",
31        headers => {
32            'Content-Type' => 'text/html; charset=EUC-JP',
33        },
34        content => $starter_file,
35    },
36    "http://$punycoded_hostname/foo.txt" => {
37        code => "200",
38        msg => "Uh-huh",
39        headers => {
40            'Content-Type' => 'text/plain',
41        },
42        content => $result_file,
43    },
44    "http://$punycoded_hostname/foo2.txt" => {
45        code => "200",
46        msg => "Uh-huh2",
47        headers => {
48            'Content-Type' => 'text/plain',
49        },
50        content => $result_file,
51    },
52    "http://$punycoded_hostname/foo3.txt" => {
53        code => "200",
54        msg => "Uh-huh3",
55        headers => {
56            'Content-Type' => 'text/plain',
57        },
58        content => $result_file,
59    },
60    "http://$punycoded_hostname/robots.txt" => {
61        code => "200",
62        msg => "Uh-huh",
63        headers => {
64            'Content-Type' => 'text/plain',
65        },
66        content => '',
67    },
68);
69
70my $cmdline = $WgetTest::WGETPATH . " --iri -r"
71    . " -e http_proxy=localhost:{{port}} --local-encoding=EUC-JP"
72    . " http://$euc_jp_hostname/";
73
74my $expected_error_code = 0;
75
76my %expected_downloaded_files = (
77    "$punycoded_hostname/index.html" => {
78        content => $starter_file,
79    },
80    "$punycoded_hostname/foo.txt" => {
81        content => $result_file,
82    },
83    "$punycoded_hostname/foo2.txt" => {
84        content => $result_file,
85    },
86    "$punycoded_hostname/foo3.txt" => {
87        content => $result_file,
88    },
89    "$punycoded_hostname/robots.txt" => {
90        content => '',
91    },
92);
93
94###############################################################################
95
96my $the_test = HTTPTest->new (input => \%urls,
97                              cmdline => $cmdline,
98                              errcode => $expected_error_code,
99                              output => \%expected_downloaded_files);
100exit $the_test->run();
101
102# vim: et ts=4 sw=4
103