The parsing is completely rewritten, and passes all my test cases. The relative URI calculation ("relativeTo") is still the original code, and I'm noting some discrepancies with my test suite (see below). There are some more discrepancies with test cases from RFC2396, that I haven't yet looked into.
The source file and test suite can be found here: http://www.ninebynine.org/Software/HaskellUtils/Network/
It is not complete, but I'm hoping I have enough working to get the HXML toolbox running under Hugs/Windows. If there is any interest in adopting this as a more portable replacement for the current Network.URI module, I'll look into bringing it fully into line with the test suite.
#g --
Test results: [[ ### Failure in: Test Relative URIs:20:1 testRelative21(abs) expected: "file:/ex/x/q/r#" but got: "file:/ex/x/q/r" ### Failure in: Test Relative URIs:30:1 testRelative31(abs) expected: "file:/some/dir/#" but got: "file:/some/dir/" ### Failure in: Test Relative URIs:36:1 testRelative37(abs) expected: "mailto:local/[EMAIL PROTECTED]" but got: "mailto:local/local/[EMAIL PROTECTED]" ### Failure in: Test Relative URIs:45:1 testRelative50(abs) expected: "http://example/a/b/../../c" but got: "http://example/c" ### Failure in: Test Relative URIs:46:1 testRelative51(abs) expected: "http://example/a/b/c/../../" but got: "http://example/a/" ### Failure in: Test Relative URIs:47:1 testRelative52(abs) expected: "http://example/a/b/c/./" but got: "http://example/a/b/c/" ### Failure in: Test Relative URIs:48:1 testRelative53(abs) expected: "http://example/a/b/c/.././" but got: "http://example/a/b/" ### Failure in: Test Relative URIs:49:1 testRelative54(abs) expected: "http://example/a/b/c/d/../../../../e" but got: "http://example/e" ### Failure in: Test Relative URIs:50:1 testRelative55(abs) expected: "http://example/a/b/c/d/../.././../../e" but got: "http://example/e" ### Failure in: Test Relative URIs:62 testRelative76 expected: "mid:[EMAIL PROTECTED]/[EMAIL PROTECTED]" but got: "mid:[EMAIL PROTECTED]/[EMAIL PROTECTED]/[EMAIL PROTECTED]" Cases: 120 Tried: 120 Errors: 0 Failures: 10 ]]
The relevant test cases are, stated as: [test-name: base-uri expected-absuri relative-uri]
...
[testRelative21: "file:/ex/x/y" "file:/ex/x/q/r#" "q/r#"] (but got: "file:/ex/x/q/r")
In this case, the empty fragment has been incorrectly discarded -- I think this may be a bug in 'uriToString'
...
[testRelative31: "file:/some/dir/foo" "file:/some/dir/#" "./#"
(similar problem)
...
[testRelative37: "mailto:local/[EMAIL PROTECTED]" "mailto:local/[EMAIL PROTECTED]" "local/[EMAIL PROTECTED]"] (but got: "mailto:local/local/[EMAIL PROTECTED]")
In this case, it appears that relative path processing is being applied incorrectly to a non-hierarchical base URI.
...
[testRelative50: "ftp://example/x/y" "http://example/a/b/../../c" "http://example/c"]
[testRelative51: "ftp://example/x/y" "http://example/a/b/c/../../" "http://example/a/"]
[testRelative52: "ftp://example/x/y" "http://example/a/b/c/./" "http://example/a/b/c/"]
[testRelative53: "ftp://example/x/y" "http://example/a/b/c/.././" "http://example/a/b/"]
[testRelative54: "ftp://example/x/y" "http://example/a/b/c/d/../../../../e" "http://example/e"]
[testRelative55: "ftp://example/x/y" "http://example/a/b/c/d/../.././../../e" "http://example/e"]
These exercise some URI path-normalization code that I have in my original implementation. As far as I can tell, these are not problems with the GHC implementation.
...
[testRelative76: "mid:[EMAIL PROTECTED]/[EMAIL PROTECTED]" "[EMAIL PROTECTED]/[EMAIL PROTECTED]" "mid:[EMAIL PROTECTED]/[EMAIL PROTECTED]"] (but got: "mid:[EMAIL PROTECTED]/[EMAIL PROTECTED]/[EMAIL PROTECTED]")
This looks like another case of inappropriate relative path processing.
------------ Graham Klyne For email: http://www.ninebynine.org/#Contact
_______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
