X-Git-Url: http://git.maemo.org/git/?p=dh-make-perl;a=blobdiff_plain;f=dev%2Fi386%2Fliburi-perl%2Fliburi-perl-1.35.dfsg.1%2Ft%2Fabs.t;fp=dev%2Fi386%2Fliburi-perl%2Fliburi-perl-1.35.dfsg.1%2Ft%2Fabs.t;h=e2dad70d4e0cf75df00ef6f029302c0e7046b7f8;hp=0000000000000000000000000000000000000000;hb=8977e561d8a9eae6959218b0306c9df2056a38a9;hpb=df794b845212301ea0d267c919232538bfef356a diff --git a/dev/i386/liburi-perl/liburi-perl-1.35.dfsg.1/t/abs.t b/dev/i386/liburi-perl/liburi-perl-1.35.dfsg.1/t/abs.t new file mode 100644 index 0000000..e2dad70 --- /dev/null +++ b/dev/i386/liburi-perl/liburi-perl-1.35.dfsg.1/t/abs.t @@ -0,0 +1,171 @@ +#!perl -w + +print "1..45\n"; + +# This test the resolution of abs path for all examples given +# in the "Uniform Resource Identifiers (URI): Generic Syntax" document. + +use URI; +$base = "http://a/b/c/d;p?q"; +$testno = 1; + +while () { + #next if 1 .. /^C\.\s+/; + #last if /^D\.\s+/; + next unless /\s+(\S+)\s*=\s*(.*)/; + my $uref = $1; + my $expect = $2; + $expect =~ s/\(current document\)/$base/; + #print "$uref => $expect\n"; + + my $bad; + my $u = URI->new($uref, $base); + if ($u->abs($base)->as_string ne $expect) { + $bad++; + my $abs = $u->abs($base)->as_string; + print qq(URI->new("$uref")->abs("$base") ==> "$abs"\n); + } + + # Let's test another version of the same thing + $u = URI->new($uref); + my $b = URI->new($base); + if ($u->abs($b,1) ne $expect && $uref !~ /^http:/) { + $bad++; + print qq(URI->new("$uref")->abs(URI->new("$base"), 1)\n); + } + + # Let's try the other way + $u = URI->new($expect)->rel($base)->as_string; + if ($u ne $uref) { + push(@rel_fail, qq($testno: URI->new("$expect", "$base")->rel ==> "$u" (not "$uref")\n)); + } + + print "not " if $bad; + print "ok ", $testno++, "\n"; +} + +if (@rel_fail) { + print "\n\nIn the following cases we did not get back to where we started with rel()\n"; + print @rel_fail; +} + + + +__END__ + +Network Working Group T. Berners-Lee, MIT/LCS +INTERNET-DRAFT R. Fielding, U.C. Irvine +draft-fielding-uri-syntax-02 L. Masinter, Xerox Corporation +Expires six months after publication date March 4, 1998 + + + Uniform Resource Identifiers (URI): Generic Syntax + +[...] + +C. Examples of Resolving Relative URI References + + Within an object with a well-defined base URI of + + http://a/b/c/d;p?q + + the relative URIs would be resolved as follows: + +C.1. Normal Examples + + g:h = g:h + g = http://a/b/c/g + ./g = http://a/b/c/g + g/ = http://a/b/c/g/ + /g = http://a/g + //g = http://g + ?y = http://a/b/c/d;p?y + g?y = http://a/b/c/g?y + #s = (current document)#s + g#s = http://a/b/c/g#s + g?y#s = http://a/b/c/g?y#s + ;x = http://a/b/c/;x + g;x = http://a/b/c/g;x + g;x?y#s = http://a/b/c/g;x?y#s + . = http://a/b/c/ + ./ = http://a/b/c/ + .. = http://a/b/ + ../ = http://a/b/ + ../g = http://a/b/g + ../.. = http://a/ + ../../ = http://a/ + ../../g = http://a/g + +C.2. Abnormal Examples + + Although the following abnormal examples are unlikely to occur in + normal practice, all URI parsers should be capable of resolving them + consistently. Each example uses the same base as above. + + An empty reference refers to the start of the current document. + + <> = (current document) + + Parsers must be careful in handling the case where there are more + relative path ".." segments than there are hierarchical levels in + the base URI's path. Note that the ".." syntax cannot be used to + change the authority component of a URI. + + ../../../g = http://a/../g + ../../../../g = http://a/../../g + + In practice, some implementations strip leading relative symbolic + elements (".", "..") after applying a relative URI calculation, based + on the theory that compensating for obvious author errors is better + than allowing the request to fail. Thus, the above two references + will be interpreted as "http://a/g" by some implementations. + + Similarly, parsers must avoid treating "." and ".." as special when + they are not complete components of a relative path. + + /./g = http://a/./g + /../g = http://a/../g + g. = http://a/b/c/g. + .g = http://a/b/c/.g + g.. = http://a/b/c/g.. + ..g = http://a/b/c/..g + + Less likely are cases where the relative URI uses unnecessary or + nonsensical forms of the "." and ".." complete path segments. + + ./../g = http://a/b/g + ./g/. = http://a/b/c/g/ + g/./h = http://a/b/c/g/h + g/../h = http://a/b/c/h + g;x=1/./y = http://a/b/c/g;x=1/y + g;x=1/../y = http://a/b/c/y + + All client applications remove the query component from the base URI + before resolving relative URIs. However, some applications fail to + separate the reference's query and/or fragment components from a + relative path before merging it with the base path. This error is + rarely noticed, since typical usage of a fragment never includes the + hierarchy ("/") character, and the query component is not normally + used within relative references. + + g?y/./x = http://a/b/c/g?y/./x + g?y/../x = http://a/b/c/g?y/../x + g#s/./x = http://a/b/c/g#s/./x + g#s/../x = http://a/b/c/g#s/../x + + Some parsers allow the scheme name to be present in a relative URI + if it is the same as the base URI scheme. This is considered to be + a loophole in prior specifications of partial URIs [RFC1630]. Its + use should be avoided. + + http:g = http:g + http: = http: + + +========================================================================== + +Some extra tests for good measure... + + #foo? = (current document)#foo? + ?#foo = http://a/b/c/d;p?#foo +