9 require LWP::UserAgent;
12 use Carp qw(confess cluck);
14 use Sys::Hostname::Long;
18 my $URL_BASE="http://".hostname_long().":7680";
19 my $URL_VALIDATOR_BASE="http://validator.w3.org/check?uri=";
20 my $URL_VALIDATOR_BASE_LOCAL="http://localhost/cgi-bin/check.cgi?uri=";
26 "validate!",\$opt_validate,
30 my($first_pattern)=@ARGV;
36 my $UA=LWP::UserAgent->new();
39 my $first_seen=!$first_pattern;
40 My::ModPerlPm->list("sub"=>sub {
43 eval 'require '.$p->{"module"}.'; 1;'
44 or cluck "Error loading module ".$p->{"module"}.": $@";
45 my $HTML_TEST=eval '$'.$p->{"module"}.'::HTML_TEST;';
46 return if defined $HTML_TEST && !$HTML_TEST;
47 my $validate=$opt_validate;
48 $validate=0 if $HTML_TEST && $HTML_TEST eq "download";
49 my $HTML_TEST_QUERY_STRING=eval '$'.$p->{"module"}.'::HTML_TEST_QUERY_STRING;';
50 my $url=$URL_BASE.$p->{"url"}.(!$HTML_TEST_QUERY_STRING ? "" : "?".$HTML_TEST_QUERY_STRING);
51 my $url_matches=1 if $first_pattern && $url=~/$first_pattern/o;
52 die "Pattern amiguous on: $url\n" if $first_seen && $url_matches;
53 if (!$first_seen && !($first_seen=($url=~/$first_pattern/o))) {
59 $url=($opt_local ? $URL_VALIDATOR_BASE_LOCAL : $URL_VALIDATOR_BASE).uri_escape($url);
61 my $request=HTTP::Request->new("GET",$url);
62 $request->header("Cache-control"=>"no-cache");
63 # Do not: ...->request(...);
64 # as it would follow our tested 403 redirect responses.
65 my $response=$UA->simple_request($request);
66 my $HTML_TEST_RC=eval '$'.$p->{"module"}.'::HTML_TEST_RC;';
67 $HTML_TEST_RC=HTTP::Status::RC_OK() if !defined $HTML_TEST_RC;
68 if ($response->code()==$HTML_TEST_RC) {
70 local $_=$response->content();
71 my $valid=/\bclass="valid"\s*>/;
72 my $invalid=/\bclass="invalid"\s*>/;
73 die "\nUnexpected response: $url\n" if $valid==$invalid;
77 die "\n$url: ".$response->code()."\n";
78 }) for (0,($opt_validate ? 1 : ()));
80 die "Nothing seen for: $first_pattern\n" if !$first_seen;