# Tests for the uri module. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 2000 by Zveno Pty Ltd. # # RCS: @(#) $Id: uri.test,v 1.25 2011/03/23 04:39:54 andreas_kupries Exp $ # ------------------------------------------------------------------------- source [file join \ [file dirname [file dirname [file join [pwd] [info script]]]] \ devtools testutilities.tcl] testsNeedTcl 8.2 testsNeedTcltest 1.0 testing { useLocal uri.tcl uri } # ------------------------------------------------------------------------- # Quirk Option NoInitialSlash # ------------------------------------------------------------------------- # uri::split, uri::join # - Commands uri::split, uri::join have separate tests for each boolean # value of the quirk option NoInitialSlash. # - Tests *-0, *-1 use [::uri::setQuirkOption NoInitialSlash] values # 0, 1 respectively. # - For tests of uri::split, the results of tests *-1 remove the leading "/" # from the path, and define key pbare. # - Any other differences in the test script or the results are noted in the # test description with the words "differs from". # # uri::isrelative, uri::resolve, uri::canonicalize # - Command uri::isrelative does not involve option NoInitialSlash. # - Commands uri::resolve, uri::canonicalize should give results that are # independent of NoInitialSlash, and so do not have separate tests for # each case. The non-default value of NoInitialSlash can be tested by # setting the value of BaseValue(NoInitialSlash) below. # ------------------------------------------------------------------------- # ------------------------------------------------------------------------- # Quirk Options NoExtraKeys and (for Windows) HostAsDriveLetter # ------------------------------------------------------------------------- # Some tests will fail if these options are set true. # Separate tests have not been written for these cases. # ------------------------------------------------------------------------- set BaseValue(NoInitialSlash) [::uri::setQuirkOption NoInitialSlash] # set BaseValue(NoInitialSlash) 1 ::uri::setQuirkOption NoInitialSlash $BaseValue(NoInitialSlash) # ::uri::setQuirkOption NoExtraKeys 0 # ::uri::setQuirkOption HostAsDriveLetter 0 # set ::tcl_platform(platform) windows # ::uri::setQuirkOption RemoveDoubleSlashes 1 # ------------------------------------------------------------------------- # Split tests test uri-1.0-0 {uri::split - http w/- nested query} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test.net/path/path2?query=url?otherquery] } {fragment {} host test.net path /path/path2 port {} pwd {} query query=url?otherquery scheme http user {}} test uri-1.1-0 {uri::split - http w/- query} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test.net/path/path2?query] } {fragment {} host test.net path /path/path2 port {} pwd {} query query scheme http user {}} test uri-1.2-0 {uri::split - https w/- query} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split https://test.net/path/path2?query] } {fragment {} host test.net path /path/path2 port {} pwd {} query query scheme https user {}} test uri-1.3-0 {uri::split - http w/- port} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test.net:8080] } {fragment {} host test.net path {} port 8080 pwd {} query {} scheme http user {}} test uri-1.4-0 {uri::split - https w/- port} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split https://test.net:8888] } {fragment {} host test.net path {} port 8888 pwd {} query {} scheme https user {}} test uri-1.5-0 {uri::split - ftp} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split ftp://ftp.test.net/path/to/resource] } {host ftp.test.net path /path/to/resource port {} pwd {} scheme ftp type {} user {}} test uri-1.6-0 {uri::split - ftp with userinfo} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split {ftp://user:passwd@localhost/a/b/c.d}] } {host localhost path /a/b/c.d port {} pwd passwd scheme ftp type {} user user} test uri-1.7-0 {uri::split - ftp with type} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split {ftp://localhost/a/b/c.d;type=i}] } {host localhost path /a/b/c.d port {} pwd {} scheme ftp type i user {}} test uri-1.8-0 {uri::split - ftp with port} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split {ftp://localhost:21/a/b/c.d}] } {host localhost path /a/b/c.d port 21 pwd {} scheme ftp type {} user {}} test uri-1.9-0 {uri::split - news with message-id} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split {news:87lm40t3v7.fsf@dedasys.com}] } {message-id 87lm40t3v7.fsf@dedasys.com scheme news} test uri-1.10-0 {uri::split - news with newsgroup-name} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split {news:comp.lang.tcl}] } {newsgroup-name comp.lang.tcl scheme news} test uri-1.11-0 {uri::split - ldap simple} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split {ldap://ldaphost}] } {attrs {} dn {} extensions {} filter {} host ldaphost port {} scheme ldap scope {}} test uri-1.12-0 {uri::split - ldaps with port} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split {ldaps://h:636/}] } {attrs {} dn {} extensions {} filter {} host h port 636 scheme ldaps scope {}} test uri-1.13-0 {uri::split - ldap search} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split {ldap://ldaphost/o=mycomp?uid,mail?sub?(uid=pda)}] } {attrs {uid mail} dn o=mycomp extensions {} filter (uid=pda) host ldaphost port {} scheme ldap scope sub} test uri-1.14-0 {uri::split - ldap search with implicit scope an attributes} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split {ldap://ldaphost:999/o=mycomp???(uid=pda)}] } {attrs {} dn o=mycomp extensions {} filter (uid=pda) host ldaphost port 999 scheme ldap scope {}} test uri-1.15-0 {uri::split - https with IPv6} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split {https://[2001:db8::7]:8080?foo=bar}] } {fragment {} host {[2001:db8::7]} path {} port 8080 pwd {} query foo=bar scheme https user {}} test uri-1.16-0 {uri::split - ftp with auth and IPv6} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split {ftp://user:pass@[2001:db8::7]/alt}] } {host {[2001:db8::7]} path /alt port {} pwd pass scheme ftp type {} user user} test uri-1.17-0 {uri::split - ldaps IPv6 search with port} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split {ldaps://[2001:db8::7]:987/o=mycomp?uid,mail?sub?(uid=pda)}] } {attrs {uid mail} dn o=mycomp extensions {} filter (uid=pda) host {[2001:db8::7]} port 987 scheme ldaps scope sub} test uri-1.18-0 {uri::split - http w/- valid hostname on local network} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test-host/path/path2?query] } {fragment {} host test-host path /path/path2 port {} pwd {} query query scheme http user {}} test uri-1.19-0 {uri::split - http w/- valid hostname on local network FQDN} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test-host./path/path2?query] } {fragment {} host test-host. path /path/path2 port {} pwd {} query query scheme http user {}} test uri-1.20-0 {uri::split - http w/- valid hostname on local network and port} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test-host:8080/path/path2?query] } {fragment {} host test-host path /path/path2 port 8080 pwd {} query query scheme http user {}} test uri-1.21-0 {uri::split - http w/- valid hostname on local network FQDN and port} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test-host.:8080/path/path2?query] } {fragment {} host test-host. path /path/path2 port 8080 pwd {} query query scheme http user {}} test uri-1.22-0 {uri::split - http w/- valid hostname "9" on local network} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://9/path/path2?query] } {fragment {} host 9 path /path/path2 port {} pwd {} query query scheme http user {}} test uri-1.23-0 {uri::split - http w/- valid hostname "9" on local network FQDN} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://9./path/path2?query] } {fragment {} host 9. path /path/path2 port {} pwd {} query query scheme http user {}} test uri-1.24-0 {uri::split - http w/- valid hostname "9" on local network and port} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://9:8080/path/path2?query] } {fragment {} host 9 path /path/path2 port 8080 pwd {} query query scheme http user {}} test uri-1.25-0 {uri::split - http w/- valid hostname "9" on local network FQDN and port} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://9.:8080/path/path2?query] } {fragment {} host 9. path /path/path2 port 8080 pwd {} query query scheme http user {}} test uri-1.26-0 {uri::split - http w/- valid hostname "0-9" on local network} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://0-9/path/path2?query] } {fragment {} host 0-9 path /path/path2 port {} pwd {} query query scheme http user {}} test uri-1.27-0 {uri::split - http w/- valid hostname "0-9" on local network FQDN} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://0-9./path/path2?query] } {fragment {} host 0-9. path /path/path2 port {} pwd {} query query scheme http user {}} test uri-1.28-0 {uri::split - http w/- valid hostname "0-9" on local network and port} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://0-9:8080/path/path2?query] } {fragment {} host 0-9 path /path/path2 port 8080 pwd {} query query scheme http user {}} test uri-1.29-0 {uri::split - http w/- valid hostname "0-9" on local network FQDN and port} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://0-9.:8080/path/path2?query] } {fragment {} host 0-9. path /path/path2 port 8080 pwd {} query query scheme http user {}} test uri-1.30-0 {uri::split - http w/- nested query and FQDN} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test.net./path/path2?query=url?otherquery] } {fragment {} host test.net. path /path/path2 port {} pwd {} query query=url?otherquery scheme http user {}} test uri-1.31-0 {uri::split - http w/- nested query and FQDN and port} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test.net.:8080/path/path2?query=url?otherquery] } {fragment {} host test.net. path /path/path2 port 8080 pwd {} query query=url?otherquery scheme http user {}} test uri-1.32-0 {uri::split - http w/- query test / in query} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test.net/path/path2?fetch=dir/file.txt] } {fragment {} host test.net path /path/path2 port {} pwd {} query fetch=dir/file.txt scheme http user {}} test uri-1.33-0 {uri::split - http w/- fragment test / ? in fragment} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test.net/path/path2?fetch=dir/file.txt#ab5/s?too] } {fragment ab5/s?too host test.net path /path/path2 port {} pwd {} query fetch=dir/file.txt scheme http user {}} test uri-1.34-0 {uri::split - http w/- fragment test {}# in fragment - illegal chars see [7b5c6cb477]} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test.net/path/path2?fetch=dir/file.txt#ab5/s?to#o{and}fg] } {fragment ab5/s?to#o{and}fg host test.net path /path/path2 port {} pwd {} query fetch=dir/file.txt scheme http user {}} test uri-1.35-0 {uri::split - http w/- fragment test {}# in fragment - illegal chars see [7b5c6cb477]} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test.net/path/path2#ab5/s?to#o{and}fg] } {fragment ab5/s?to#o{and}fg host test.net path /path/path2 port {} pwd {} query {} scheme http user {}} test uri-1.36-0 {uri::split - http w/- fragment test {}# in fragment - illegal chars see [7b5c6cb477]} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test.net/#ab5/s?to#o{and}fg] } {fragment ab5/s?to#o{and}fg host test.net path / port {} pwd {} query {} scheme http user {}} test uri-1.37-0 {uri::split - http w/- fragment test {}# in fragment - illegal chars see [7b5c6cb477]} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://test.net#ab5/s?to#o{and}fg] } {fragment ab5/s?to#o{and}fg host test.net path {} port {} pwd {} query {} scheme http user {}} test uri-1.38-0 {uri::split - relative URI} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split //test.net#ab5/s?to#o{and}fg] } {fragment ab5/s?to#o{and}fg host test.net path {} port {} pwd {} query {} scheme http user {}} test uri-1.39-0 {uri::split - relative URI} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split //test.net#ab5/s?to#o{and}fg https] } {fragment ab5/s?to#o{and}fg host test.net path {} port {} pwd {} query {} scheme https user {}} test uri-1.40-0 {uri::split - relative URI {}} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split {}] } {fragment {} host {} path {} port {} pwd {} query {} scheme http user {}} test uri-1.41-0 {uri::split - relative URI http cf bug 2798448} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split host.td] } {fragment {} host host.td path {} port {} pwd {} query {} scheme http user {}} test uri-1.42-0 {uri::split - relative URI http cf bug 2798448} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://host.td] } {fragment {} host host.td path {} port {} pwd {} query {} scheme http user {}} test uri-1.43-0 {uri::split - relative URI ftp cf bug 2798448} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split host.td ftp] } {host host.td path {} port {} pwd {} scheme ftp type {} user {}} test uri-1.44-0 {uri::split - relative URI ftp cf bug 2798448} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split ftp://host.td] } {host host.td path {} port {} pwd {} scheme ftp type {} user {}} test uri-1.45-0 {uri::split relative URI http/https/ftp path} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [::uri::split gone/away] } {fragment {} host gone path /away port {} pwd {} query {} scheme http user {}} test uri-1.46-0 {uri::split relative URI http/https/ftp path} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [::uri::split /gone/away] } {fragment {} host {} path /gone/away port {} pwd {} query {} scheme http user {}} test uri-1.47-0 {uri::split relative URI http/https/ftp path} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [::uri::split //gone/away] } {fragment {} host gone path /away port {} pwd {} query {} scheme http user {}} test uri-1.48-0 {uri::split relative URI http/https/ftp path} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [::uri::split ///gone/away] } {fragment {} host {} path /gone/away port {} pwd {} query {} scheme http user {}} test uri-1.49-0 {uri::split relative URI http/https/ftp path - result significantly differs from 1.49-1 - excess leading slashes are NOT removed} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [::uri::split ////gone/away] } {fragment {} host {} path //gone/away port {} pwd {} query {} scheme http user {}} test uri-1.50-0 {uri::split relative URI file path} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [::uri::split gone/away file] } {path gone/away scheme file} test uri-1.51-0 {uri::split relative URI file path} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [::uri::split /gone/away file] } {path /gone/away scheme file} test uri-1.52-0 {uri::split relative URI file path} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [::uri::split //gone/away file] } {host gone path /away scheme file} test uri-1.53-0 {uri::split relative URI file path} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [::uri::split ///gone/away file] } {path /gone/away scheme file} test uri-1.54-0 {uri::split relative URI file path - in scheme "file" excess leading slashes are retained} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [::uri::split ////gone/away file] } {path //gone/away scheme file} # --- test uri-1.0-1 {uri::split - http w/- nested query} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test.net/path/path2?query=url?otherquery] } {fragment {} host test.net path path/path2 pbare 0 port {} pwd {} query query=url?otherquery scheme http user {}} test uri-1.1-1 {uri::split - http w/- query} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test.net/path/path2?query] } {fragment {} host test.net path path/path2 pbare 0 port {} pwd {} query query scheme http user {}} test uri-1.2-1 {uri::split - https w/- query} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split https://test.net/path/path2?query] } {fragment {} host test.net path path/path2 pbare 0 port {} pwd {} query query scheme https user {}} test uri-1.3-1 {uri::split - http w/- port} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test.net:8080] } {fragment {} host test.net path {} pbare 1 port 8080 pwd {} query {} scheme http user {}} test uri-1.4-1 {uri::split - https w/- port} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split https://test.net:8888] } {fragment {} host test.net path {} pbare 1 port 8888 pwd {} query {} scheme https user {}} test uri-1.5-1 {uri::split - ftp} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split ftp://ftp.test.net/path/to/resource] } {host ftp.test.net path path/to/resource pbare 0 port {} pwd {} scheme ftp type {} user {}} test uri-1.6-1 {uri::split - ftp with userinfo} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split {ftp://user:passwd@localhost/a/b/c.d}] } {host localhost path a/b/c.d pbare 0 port {} pwd passwd scheme ftp type {} user user} test uri-1.7-1 {uri::split - ftp with type} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split {ftp://localhost/a/b/c.d;type=i}] } {host localhost path a/b/c.d pbare 0 port {} pwd {} scheme ftp type i user {}} test uri-1.8-1 {uri::split - ftp with port} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split {ftp://localhost:21/a/b/c.d}] } {host localhost path a/b/c.d pbare 0 port 21 pwd {} scheme ftp type {} user {}} test uri-1.9-1 {uri::split - news with message-id} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split {news:87lm40t3v7.fsf@dedasys.com}] } {message-id 87lm40t3v7.fsf@dedasys.com scheme news} test uri-1.10-1 {uri::split - news with newsgroup-name} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split {news:comp.lang.tcl}] } {newsgroup-name comp.lang.tcl scheme news} test uri-1.11-1 {uri::split - ldap simple} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split {ldap://ldaphost}] } {attrs {} dn {} extensions {} filter {} host ldaphost port {} scheme ldap scope {}} test uri-1.12-1 {uri::split - ldaps with port} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split {ldaps://h:636/}] } {attrs {} dn {} extensions {} filter {} host h port 636 scheme ldaps scope {}} test uri-1.13-1 {uri::split - ldap search} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split {ldap://ldaphost/o=mycomp?uid,mail?sub?(uid=pda)}] } {attrs {uid mail} dn o=mycomp extensions {} filter (uid=pda) host ldaphost port {} scheme ldap scope sub} test uri-1.14-1 {uri::split - ldap search with implicit scope an attributes} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split {ldap://ldaphost:999/o=mycomp???(uid=pda)}] } {attrs {} dn o=mycomp extensions {} filter (uid=pda) host ldaphost port 999 scheme ldap scope {}} test uri-1.15-1 {uri::split - https with IPv6} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split {https://[2001:db8::7]:8080?foo=bar}] } {fragment {} host {[2001:db8::7]} path {} pbare 1 port 8080 pwd {} query foo=bar scheme https user {}} test uri-1.16-1 {uri::split - ftp with auth and IPv6} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split {ftp://user:pass@[2001:db8::7]/alt}] } {host {[2001:db8::7]} path alt pbare 0 port {} pwd pass scheme ftp type {} user user} test uri-1.17-1 {uri::split - ldaps IPv6 search with port} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split {ldaps://[2001:db8::7]:987/o=mycomp?uid,mail?sub?(uid=pda)}] } {attrs {uid mail} dn o=mycomp extensions {} filter (uid=pda) host {[2001:db8::7]} port 987 scheme ldaps scope sub} test uri-1.18-1 {uri::split - http w/- valid hostname on local network} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test-host/path/path2?query] } {fragment {} host test-host path path/path2 pbare 0 port {} pwd {} query query scheme http user {}} test uri-1.19-1 {uri::split - http w/- valid hostname on local network FQDN} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test-host./path/path2?query] } {fragment {} host test-host. path path/path2 pbare 0 port {} pwd {} query query scheme http user {}} test uri-1.20-1 {uri::split - http w/- valid hostname on local network and port} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test-host:8080/path/path2?query] } {fragment {} host test-host path path/path2 pbare 0 port 8080 pwd {} query query scheme http user {}} test uri-1.21-1 {uri::split - http w/- valid hostname on local network FQDN and port} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test-host.:8080/path/path2?query] } {fragment {} host test-host. path path/path2 pbare 0 port 8080 pwd {} query query scheme http user {}} test uri-1.22-1 {uri::split - http w/- valid hostname "9" on local network} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://9/path/path2?query] } {fragment {} host 9 path path/path2 pbare 0 port {} pwd {} query query scheme http user {}} test uri-1.23-1 {uri::split - http w/- valid hostname "9" on local network FQDN} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://9./path/path2?query] } {fragment {} host 9. path path/path2 pbare 0 port {} pwd {} query query scheme http user {}} test uri-1.24-1 {uri::split - http w/- valid hostname "9" on local network and port} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://9:8080/path/path2?query] } {fragment {} host 9 path path/path2 pbare 0 port 8080 pwd {} query query scheme http user {}} test uri-1.25-1 {uri::split - http w/- valid hostname "9" on local network FQDN and port} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://9.:8080/path/path2?query] } {fragment {} host 9. path path/path2 pbare 0 port 8080 pwd {} query query scheme http user {}} test uri-1.26-1 {uri::split - http w/- valid hostname "0-9" on local network} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://0-9/path/path2?query] } {fragment {} host 0-9 path path/path2 pbare 0 port {} pwd {} query query scheme http user {}} test uri-1.27-1 {uri::split - http w/- valid hostname "0-9" on local network FQDN} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://0-9./path/path2?query] } {fragment {} host 0-9. path path/path2 pbare 0 port {} pwd {} query query scheme http user {}} test uri-1.28-1 {uri::split - http w/- valid hostname "0-9" on local network and port} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://0-9:8080/path/path2?query] } {fragment {} host 0-9 path path/path2 pbare 0 port 8080 pwd {} query query scheme http user {}} test uri-1.29-1 {uri::split - http w/- valid hostname "0-9" on local network FQDN and port} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://0-9.:8080/path/path2?query] } {fragment {} host 0-9. path path/path2 pbare 0 port 8080 pwd {} query query scheme http user {}} test uri-1.30-1 {uri::split - http w/- nested query and FQDN} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test.net./path/path2?query=url?otherquery] } {fragment {} host test.net. path path/path2 pbare 0 port {} pwd {} query query=url?otherquery scheme http user {}} test uri-1.31-1 {uri::split - http w/- nested query and FQDN and port} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test.net.:8080/path/path2?query=url?otherquery] } {fragment {} host test.net. path path/path2 pbare 0 port 8080 pwd {} query query=url?otherquery scheme http user {}} test uri-1.32-1 {uri::split - http w/- query test / in query} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test.net/path/path2?fetch=dir/file.txt] } {fragment {} host test.net path path/path2 pbare 0 port {} pwd {} query fetch=dir/file.txt scheme http user {}} test uri-1.33-1 {uri::split - http w/- fragment test / ? in fragment} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test.net/path/path2?fetch=dir/file.txt#ab5/s?too] } {fragment ab5/s?too host test.net path path/path2 pbare 0 port {} pwd {} query fetch=dir/file.txt scheme http user {}} test uri-1.34-1 {uri::split - http w/- fragment test {}# in fragment - illegal chars see [7b5c6cb477]} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test.net/path/path2?fetch=dir/file.txt#ab5/s?to#o{and}fg] } {fragment ab5/s?to#o{and}fg host test.net path path/path2 pbare 0 port {} pwd {} query fetch=dir/file.txt scheme http user {}} test uri-1.35-1 {uri::split - http w/- fragment test {}# in fragment - illegal chars see [7b5c6cb477]} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test.net/path/path2#ab5/s?to#o{and}fg] } {fragment ab5/s?to#o{and}fg host test.net path path/path2 pbare 0 port {} pwd {} query {} scheme http user {}} test uri-1.36-1 {uri::split - http w/- fragment test {}# in fragment - illegal chars see [7b5c6cb477]} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test.net/#ab5/s?to#o{and}fg] } {fragment ab5/s?to#o{and}fg host test.net path {} pbare 0 port {} pwd {} query {} scheme http user {}} test uri-1.37-1 {uri::split - http w/- fragment test {}# in fragment - illegal chars see [7b5c6cb477]} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://test.net#ab5/s?to#o{and}fg] } {fragment ab5/s?to#o{and}fg host test.net path {} pbare 1 port {} pwd {} query {} scheme http user {}} test uri-1.38-1 {uri::split - relative URI} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split //test.net#ab5/s?to#o{and}fg] } {fragment ab5/s?to#o{and}fg host test.net path {} pbare 1 port {} pwd {} query {} scheme http user {}} test uri-1.39-1 {uri::split - relative URI} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split //test.net#ab5/s?to#o{and}fg https] } {fragment ab5/s?to#o{and}fg host test.net path {} pbare 1 port {} pwd {} query {} scheme https user {}} test uri-1.40-1 {uri::split - relative URI {}} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split {}] } {fragment {} host {} path {} pbare 1 port {} pwd {} query {} scheme http user {}} test uri-1.41-1 {uri::split - relative URI http cf bug 2798448} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split host.td] } {fragment {} host host.td path {} pbare 1 port {} pwd {} query {} scheme http user {}} test uri-1.42-1 {uri::split - relative URI http cf bug 2798448} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://host.td] } {fragment {} host host.td path {} pbare 1 port {} pwd {} query {} scheme http user {}} test uri-1.43-1 {uri::split - relative URI ftp cf bug 2798448} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split host.td ftp] } {host host.td path {} pbare 1 port {} pwd {} scheme ftp type {} user {}} test uri-1.44-1 {uri::split - relative URI ftp cf bug 2798448} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split ftp://host.td] } {host host.td path {} pbare 1 port {} pwd {} scheme ftp type {} user {}} test uri-1.45-1 {uri::split relative URI http/https/ftp path} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [::uri::split gone/away] } {fragment {} host gone path away pbare 0 port {} pwd {} query {} scheme http user {}} test uri-1.46-1 {uri::split relative URI http/https/ftp path} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [::uri::split /gone/away] } {fragment {} host {} path gone/away pbare 0 port {} pwd {} query {} scheme http user {}} test uri-1.47-1 {uri::split relative URI http/https/ftp path} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [::uri::split //gone/away] } {fragment {} host gone path away pbare 0 port {} pwd {} query {} scheme http user {}} test uri-1.48-1 {uri::split relative URI http/https/ftp path} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [::uri::split ///gone/away] } {fragment {} host {} path gone/away pbare 0 port {} pwd {} query {} scheme http user {}} test uri-1.49-1 {uri::split relative URI http/https/ftp path - result significantly differs from 1.49-0 - excess leading slashes are removed} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [::uri::split ////gone/away] } {fragment {} host {} path gone/away pbare 0 port {} pwd {} query {} scheme http user {}} test uri-1.50-1 {uri::split relative URI file path} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [::uri::split gone/away file] } {path gone/away scheme file} test uri-1.51-1 {uri::split relative URI file path} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [::uri::split /gone/away file] } {path /gone/away scheme file} test uri-1.52-1 {uri::split relative URI file path} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [::uri::split //gone/away file] } {host gone path /away scheme file} test uri-1.53-1 {uri::split relative URI file path} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [::uri::split ///gone/away file] } {path /gone/away scheme file} test uri-1.54-1 {uri::split relative URI file path - in scheme "file" excess leading slashes are retained} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [::uri::split ////gone/away file] } {path //gone/away scheme file} # ------------------------------------------------------------------------- test uri-2.1-0 {uri::join - http} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme http path / host www.w3.org } http://www.w3.org/ test uri-2.2-0 {uri::join - https} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https path / host www.w3.org } https://www.w3.org/ test uri-2.3-0 {uri::join - http w/- query} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme http query abc=def&ghi=jkl host www.test.net path /path/ } http://www.test.net/path/?abc=def&ghi=jkl test uri-2.4-0 {uri::join - https w/- query} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host www.test.net path /path/ } https://www.test.net/path/?abc=def&ghi=jkl test uri-2.5-0 {uri::join - http w/- port} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme http port 8080 host www.test.net path /path/ } http://www.test.net:8080/path/ test uri-2.6-0 {uri::join - https w/- port} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https port 8888 host www.test.net path /path/ } https://www.test.net:8888/path/ test uri-2.7-0 {uri::join - ftp} { ::uri::setQuirkOption NoInitialSlash 0 uri::join host ftp.test.net path /my/file scheme ftp } ftp://ftp.test.net/my/file test uri-2.8-0 {uri::join - identity function} { ::uri::setQuirkOption NoInitialSlash 0 eval uri::join [uri::split http://www.w3.org/XML/?abc=def] } http://www.w3.org/XML/?abc=def test uri-2.9-0 {uri::join - ftp userinfo check} { ::uri::setQuirkOption NoInitialSlash 0 eval uri::join scheme ftp host localhost port 21 path /filename user user pwd passwd } {ftp://user:passwd@localhost:21/filename} test uri-2.10-0 {uri::join - ftp userinfo check with no passwd} { ::uri::setQuirkOption NoInitialSlash 0 eval uri::join scheme ftp host localhost path /filename user user } {ftp://user@localhost/filename} test uri-2.11-0 {uri::join - ftp path prefix} { ::uri::setQuirkOption NoInitialSlash 0 eval uri::join scheme ftp host localhost path a/b/c.d } ftp://localhost/a/b/c.d test uri-2.12-0 {uri::join - ftp w/- image type} { ::uri::setQuirkOption NoInitialSlash 0 eval uri::join scheme ftp host localhost path a/b/c.d type i } {ftp://localhost/a/b/c.d;type=i} test uri-2.13-0 {uri::join - ftp w/- ascii type} { ::uri::setQuirkOption NoInitialSlash 0 eval uri::join scheme ftp host localhost path a/b/c.d type a } {ftp://localhost/a/b/c.d;type=a} # I am not sure that this shouldn't produce an error. The semi-colon is # reserved so in this case with an invalid suffix the semi-colon should # probably be quoted. [PT] test uri-2.14-0 {uri::join - ftp w/- invalid type} { ::uri::setQuirkOption NoInitialSlash 0 eval uri::join scheme ftp host localhost path a/b/c.d type X } {ftp://localhost/a/b/c.d;type=X} test uri-2.15-0 {uri::join - news message-id} { ::uri::setQuirkOption NoInitialSlash 0 eval uri::join scheme news message-id 87lm40t3v7.fsf@dedasys.com } {news:87lm40t3v7.fsf@dedasys.com} test uri-2.16-0 {uri::join - news newsgroup-name} { ::uri::setQuirkOption NoInitialSlash 0 eval uri::join scheme news newsgroup-name comp.lang.tcl } {news:comp.lang.tcl} test uri-2.17-0 {uri::join - ldap simple} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme ldap host ldaphost } {ldap://ldaphost} test uri-2.18-0 {uri::join - ldaps with default port} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme ldaps host ldaphost port 636 } {ldaps://ldaphost} test uri-2.19-0 {uri::join - ldaps with port} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme ldaps host ldaphost port 999 } {ldaps://ldaphost:999} test uri-2.20-0 {uri::join - ldap search} { # I should use "attrs {uid mail}" and not "attrs uid,mail" # but this is a perverse effect of the "eval" command ::uri::setQuirkOption NoInitialSlash 0 uri::join attrs uid,mail dn o=mycomp filter (uid=pda) host ldaphost scheme ldap scope sub } {ldap://ldaphost/o=mycomp?uid,mail?sub?(uid=pda)} test uri-2.21-0 {uri::join - ldap search with implicit scope an attributes} { ::uri::setQuirkOption NoInitialSlash 0 uri::join dn o=mycomp filter (uid=pda) host ldaphost port 999 scheme ldap } {ldap://ldaphost:999/o=mycomp???(uid=pda)} test uri-2.22-0 {uri::join - https w/- query user pwd frag} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host www.test.net path /path/ user user pwd passwd fragment f } https://user:passwd@www.test.net/path/?abc=def&ghi=jkl#f test uri-2.23-0 {uri::join - https w/- query user pwd frag FQDN} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host www.test.net. path /path/ user user pwd passwd fragment f } https://user:passwd@www.test.net./path/?abc=def&ghi=jkl#f test uri-2.24-0 {uri::join - https w/- query user pwd frag port} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host www.test.net path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@www.test.net:8080/path/?abc=def&ghi=jkl#f test uri-2.25-0 {uri::join - https w/- query user pwd frag FQDN port} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host www.test.net. path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@www.test.net.:8080/path/?abc=def&ghi=jkl#f test uri-2.26-0 {uri::join - https w/- query user pwd frag valid hostname on local network} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host test-host path /path/ user user pwd passwd fragment f } https://user:passwd@test-host/path/?abc=def&ghi=jkl#f test uri-2.27-0 {uri::join - https w/- query user pwd frag valid hostname on local network FQDN} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host test-host. path /path/ user user pwd passwd fragment f } https://user:passwd@test-host./path/?abc=def&ghi=jkl#f test uri-2.28-0 {uri::join - https w/- query user pwd frag valid hostname on local network port} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host test-host path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@test-host:8080/path/?abc=def&ghi=jkl#f test uri-2.29-0 {uri::join - https w/- query user pwd frag valid hostname on local network FQDN port} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host test-host. path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@test-host.:8080/path/?abc=def&ghi=jkl#f test uri-2.30-0 {uri::join - https w/- query user pwd frag valid hostname "9" on local network} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host 9 path /path/ user user pwd passwd fragment f } https://user:passwd@9/path/?abc=def&ghi=jkl#f test uri-2.31-0 {uri::join - https w/- query user pwd frag valid hostname "9" on local network FQDN} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host 9. path /path/ user user pwd passwd fragment f } https://user:passwd@9./path/?abc=def&ghi=jkl#f test uri-2.32-0 {uri::join - https w/- query user pwd frag valid hostname "9" on local network port} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host 9 path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@9:8080/path/?abc=def&ghi=jkl#f test uri-2.33-0 {uri::join - https w/- query user pwd frag valid hostname "9" on local network FQDN port} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host 9. path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@9.:8080/path/?abc=def&ghi=jkl#f test uri-2.34-0 {uri::join - https w/- query user pwd frag valid hostname "0-9" on local network} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host 0-9 path /path/ user user pwd passwd fragment f } https://user:passwd@0-9/path/?abc=def&ghi=jkl#f test uri-2.35-0 {uri::join - https w/- query user pwd frag valid hostname "0-9" on local network FQDN} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host 0-9. path /path/ user user pwd passwd fragment f } https://user:passwd@0-9./path/?abc=def&ghi=jkl#f test uri-2.36-0 {uri::join - https w/- query user pwd frag valid hostname "0-9" on local network port} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host 0-9 path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@0-9:8080/path/?abc=def&ghi=jkl#f test uri-2.37-0 {uri::join - https w/- query user pwd frag valid hostname "0-9" on local network FQDN port} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme https query abc=def&ghi=jkl host 0-9. path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@0-9.:8080/path/?abc=def&ghi=jkl#f test uri-2.38-0 {uri::join -- scheme file, do not use first segment of path as host} { ::uri::setQuirkOption NoInitialSlash 0 ::uri::join path b/c/d scheme file } file:///b/c/d test uri-2.39-0 {uri::join -- scheme file, usual case} { ::uri::setQuirkOption NoInitialSlash 0 ::uri::join path /b/c/d scheme file } file:///b/c/d test uri-2.40-0 {uri::join -- scheme file, trimleft excess "/", do not use first segment of path as host} { ::uri::setQuirkOption NoInitialSlash 0 ::uri::join path //b/c/d scheme file } file:////b/c/d # file:///b/c/d test uri-2.41-0 {uri::join -- scheme file, trimleft excess "/", do not use first segment of path as host} { ::uri::setQuirkOption NoInitialSlash 0 ::uri::join path ///b/c/d scheme file } file://///b/c/d # file:///b/c/d test uri-2.42-0 {uri::join -- scheme file, trimleft excess "/", do not use first segment of path as host} { ::uri::setQuirkOption NoInitialSlash 0 ::uri::join path ////b/c/d scheme file } file://////b/c/d # file:///b/c/d test uri-2.43-0 {uri::join -- with uri::split, identity function preserves user:pwd for http} { ::uri::setQuirkOption NoInitialSlash 0 eval ::uri::join [::uri::split http://anonymous:passw0rd@core.tcl.tk] } http://anonymous:passw0rd@core.tcl.tk test uri-2.44-0 {uri::join -- with uri::split, identity function preserves user:pwd and port for http} { ::uri::setQuirkOption NoInitialSlash 0 eval ::uri::join [::uri::split http://anonymous:passw0rd@core.tcl.tk:8080/foo] } http://anonymous:passw0rd@core.tcl.tk:8080/foo test uri-2.45-0 {uri::join -- with uri::split, identity function preserves user:pwd and port for http FQDN} { ::uri::setQuirkOption NoInitialSlash 0 eval ::uri::join [::uri::split http://anonymous:passw0rd@core.tcl.tk.:8080/foo] } http://anonymous:passw0rd@core.tcl.tk.:8080/foo test uri-2.46-0 {uri::join - http - pbare is irrelevant - result differs from 2.46.1} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme http path {} host www.w3.org } http://www.w3.org test uri-2.47-0 {uri::join - http - pbare is irrelevant} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme http path {} host www.w3.org pbare 1 } http://www.w3.org test uri-2.48-0 {uri::join - http - pbare is irrelevant - result differs from 2.48.1} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme http path {} host www.w3.org pbare 0 } http://www.w3.org test uri-2.49-0 {uri::join - http - pbare is irrelevant} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme http path / host www.w3.org } http://www.w3.org/ test uri-2.50-0 {uri::join - http - pbare is irrelevant} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme http path / host www.w3.org pbare 1 } http://www.w3.org/ test uri-2.51-0 {uri::join - http - pbare is irrelevant} { ::uri::setQuirkOption NoInitialSlash 0 uri::join scheme http path / host www.w3.org pbare 0 } http://www.w3.org/ # --- test uri-2.1-1 {uri::join - http} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme http path / host www.w3.org } http://www.w3.org/ test uri-2.2-1 {uri::join - https} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https path / host www.w3.org } https://www.w3.org/ test uri-2.3-1 {uri::join - http w/- query} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme http query abc=def&ghi=jkl host www.test.net path /path/ } http://www.test.net/path/?abc=def&ghi=jkl test uri-2.4-1 {uri::join - https w/- query} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host www.test.net path /path/ } https://www.test.net/path/?abc=def&ghi=jkl test uri-2.5-1 {uri::join - http w/- port} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme http port 8080 host www.test.net path /path/ } http://www.test.net:8080/path/ test uri-2.6-1 {uri::join - https w/- port} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https port 8888 host www.test.net path /path/ } https://www.test.net:8888/path/ test uri-2.7-1 {uri::join - ftp} { ::uri::setQuirkOption NoInitialSlash 1 uri::join host ftp.test.net path /my/file scheme ftp } ftp://ftp.test.net/my/file test uri-2.8-1 {uri::join - identity function} { ::uri::setQuirkOption NoInitialSlash 1 eval uri::join [uri::split http://www.w3.org/XML/?abc=def] } http://www.w3.org/XML/?abc=def test uri-2.9-1 {uri::join - ftp userinfo check} { ::uri::setQuirkOption NoInitialSlash 1 eval uri::join scheme ftp host localhost port 21 path /filename user user pwd passwd } {ftp://user:passwd@localhost:21/filename} test uri-2.10-1 {uri::join - ftp userinfo check with no passwd} { ::uri::setQuirkOption NoInitialSlash 1 eval uri::join scheme ftp host localhost path /filename user user } {ftp://user@localhost/filename} test uri-2.11-1 {uri::join - ftp path prefix} { ::uri::setQuirkOption NoInitialSlash 1 eval uri::join scheme ftp host localhost path a/b/c.d } ftp://localhost/a/b/c.d test uri-2.12-1 {uri::join - ftp w/- image type} { ::uri::setQuirkOption NoInitialSlash 1 eval uri::join scheme ftp host localhost path a/b/c.d type i } {ftp://localhost/a/b/c.d;type=i} test uri-2.13-1 {uri::join - ftp w/- ascii type} { ::uri::setQuirkOption NoInitialSlash 1 eval uri::join scheme ftp host localhost path a/b/c.d type a } {ftp://localhost/a/b/c.d;type=a} # I am not sure that this shouldn't produce an error. The semi-colon is # reserved so in this case with an invalid suffix the semi-colon should # probably be quoted. [PT] test uri-2.14-1 {uri::join - ftp w/- invalid type} { ::uri::setQuirkOption NoInitialSlash 1 eval uri::join scheme ftp host localhost path a/b/c.d type X } {ftp://localhost/a/b/c.d;type=X} test uri-2.15-1 {uri::join - news message-id} { ::uri::setQuirkOption NoInitialSlash 1 eval uri::join scheme news message-id 87lm40t3v7.fsf@dedasys.com } {news:87lm40t3v7.fsf@dedasys.com} test uri-2.16-1 {uri::join - news newsgroup-name} { ::uri::setQuirkOption NoInitialSlash 1 eval uri::join scheme news newsgroup-name comp.lang.tcl } {news:comp.lang.tcl} test uri-2.17-1 {uri::join - ldap simple} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme ldap host ldaphost } {ldap://ldaphost} test uri-2.18-1 {uri::join - ldaps with default port} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme ldaps host ldaphost port 636 } {ldaps://ldaphost} test uri-2.19-1 {uri::join - ldaps with port} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme ldaps host ldaphost port 999 } {ldaps://ldaphost:999} test uri-2.20-1 {uri::join - ldap search} { # I should use "attrs {uid mail}" and not "attrs uid,mail" # but this is a perverse effect of the "eval" command ::uri::setQuirkOption NoInitialSlash 1 uri::join attrs uid,mail dn o=mycomp filter (uid=pda) host ldaphost scheme ldap scope sub } {ldap://ldaphost/o=mycomp?uid,mail?sub?(uid=pda)} test uri-2.21-1 {uri::join - ldap search with implicit scope an attributes} { ::uri::setQuirkOption NoInitialSlash 1 uri::join dn o=mycomp filter (uid=pda) host ldaphost port 999 scheme ldap } {ldap://ldaphost:999/o=mycomp???(uid=pda)} test uri-2.22-1 {uri::join - https w/- query user pwd frag} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host www.test.net path /path/ user user pwd passwd fragment f } https://user:passwd@www.test.net/path/?abc=def&ghi=jkl#f test uri-2.23-1 {uri::join - https w/- query user pwd frag FQDN} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host www.test.net. path /path/ user user pwd passwd fragment f } https://user:passwd@www.test.net./path/?abc=def&ghi=jkl#f test uri-2.24-1 {uri::join - https w/- query user pwd frag port} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host www.test.net path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@www.test.net:8080/path/?abc=def&ghi=jkl#f test uri-2.25-1 {uri::join - https w/- query user pwd frag FQDN port} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host www.test.net. path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@www.test.net.:8080/path/?abc=def&ghi=jkl#f test uri-2.26-1 {uri::join - https w/- query user pwd frag valid hostname on local network} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host test-host path /path/ user user pwd passwd fragment f } https://user:passwd@test-host/path/?abc=def&ghi=jkl#f test uri-2.27-1 {uri::join - https w/- query user pwd frag valid hostname on local network FQDN} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host test-host. path /path/ user user pwd passwd fragment f } https://user:passwd@test-host./path/?abc=def&ghi=jkl#f test uri-2.28-1 {uri::join - https w/- query user pwd frag valid hostname on local network port} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host test-host path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@test-host:8080/path/?abc=def&ghi=jkl#f test uri-2.29-1 {uri::join - https w/- query user pwd frag valid hostname on local network FQDN port} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host test-host. path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@test-host.:8080/path/?abc=def&ghi=jkl#f test uri-2.30-1 {uri::join - https w/- query user pwd frag valid hostname "9" on local network} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host 9 path /path/ user user pwd passwd fragment f } https://user:passwd@9/path/?abc=def&ghi=jkl#f test uri-2.31-1 {uri::join - https w/- query user pwd frag valid hostname "9" on local network FQDN} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host 9. path /path/ user user pwd passwd fragment f } https://user:passwd@9./path/?abc=def&ghi=jkl#f test uri-2.32-1 {uri::join - https w/- query user pwd frag valid hostname "9" on local network port} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host 9 path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@9:8080/path/?abc=def&ghi=jkl#f test uri-2.33-1 {uri::join - https w/- query user pwd frag valid hostname "9" on local network FQDN port} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host 9. path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@9.:8080/path/?abc=def&ghi=jkl#f test uri-2.34-1 {uri::join - https w/- query user pwd frag valid hostname "0-9" on local network} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host 0-9 path /path/ user user pwd passwd fragment f } https://user:passwd@0-9/path/?abc=def&ghi=jkl#f test uri-2.35-1 {uri::join - https w/- query user pwd frag valid hostname "0-9" on local network FQDN} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host 0-9. path /path/ user user pwd passwd fragment f } https://user:passwd@0-9./path/?abc=def&ghi=jkl#f test uri-2.36-1 {uri::join - https w/- query user pwd frag valid hostname "0-9" on local network port} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host 0-9 path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@0-9:8080/path/?abc=def&ghi=jkl#f test uri-2.37-1 {uri::join - https w/- query user pwd frag valid hostname "0-9" on local network FQDN port} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme https query abc=def&ghi=jkl host 0-9. path /path/ user user pwd passwd fragment f port 8080 } https://user:passwd@0-9.:8080/path/?abc=def&ghi=jkl#f test uri-2.38-1 {uri::join -- scheme file, do not use first segment of path as host} { ::uri::setQuirkOption NoInitialSlash 1 ::uri::join path b/c/d scheme file } file:///b/c/d test uri-2.39-1 {uri::join -- scheme file, usual case} { ::uri::setQuirkOption NoInitialSlash 1 ::uri::join path /b/c/d scheme file } file:///b/c/d test uri-2.40-1 {uri::join -- scheme file, trimleft excess "/", do not use first segment of path as host} { ::uri::setQuirkOption NoInitialSlash 1 ::uri::join path //b/c/d scheme file } file:////b/c/d # file:///b/c/d test uri-2.41-1 {uri::join -- scheme file, trimleft excess "/", do not use first segment of path as host} { ::uri::setQuirkOption NoInitialSlash 1 ::uri::join path ///b/c/d scheme file } file://///b/c/d # file:///b/c/d test uri-2.42-1 {uri::join -- scheme file, trimleft excess "/", do not use first segment of path as host} { ::uri::setQuirkOption NoInitialSlash 1 ::uri::join path ////b/c/d scheme file } file://////b/c/d # file:///b/c/d test uri-2.43-1 {uri::join -- with uri::split, identity function preserves user:pwd for http} { ::uri::setQuirkOption NoInitialSlash 1 eval ::uri::join [::uri::split http://anonymous:passw0rd@core.tcl.tk] } http://anonymous:passw0rd@core.tcl.tk test uri-2.44-1 {uri::join -- with uri::split, identity function preserves user:pwd and port for http} { ::uri::setQuirkOption NoInitialSlash 1 eval ::uri::join [::uri::split http://anonymous:passw0rd@core.tcl.tk:8080/foo] } http://anonymous:passw0rd@core.tcl.tk:8080/foo test uri-2.45-1 {uri::join -- with uri::split, identity function preserves user:pwd and port for http FQDN} { ::uri::setQuirkOption NoInitialSlash 1 eval ::uri::join [::uri::split http://anonymous:passw0rd@core.tcl.tk.:8080/foo] } http://anonymous:passw0rd@core.tcl.tk.:8080/foo test uri-2.46-1 {uri::join - http - controlled by pbare - result differs from 2.46.0} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme http path {} host www.w3.org } http://www.w3.org/ test uri-2.47-1 {uri::join - http - controlled by pbare} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme http path {} host www.w3.org pbare 1 } http://www.w3.org test uri-2.48-1 {uri::join - http - controlled by pbare - result differs from 2.48.0} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme http path {} host www.w3.org pbare 0 } http://www.w3.org/ test uri-2.49-1 {uri::join - http - not controlled by pbare} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme http path / host www.w3.org } http://www.w3.org/ test uri-2.50-1 {uri::join - http - not controlled by pbare} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme http path / host www.w3.org pbare 1 } http://www.w3.org/ test uri-2.51-1 {uri::join - http - not controlled by pbare} { ::uri::setQuirkOption NoInitialSlash 1 uri::join scheme http path / host www.w3.org pbare 0 } http://www.w3.org/ # ------------------------------------------------------------------------- ::uri::setQuirkOption NoInitialSlash $BaseValue(NoInitialSlash) test uri-3.1 {uri::resolve - relative URL, base trailing slash} { uri::resolve http://www.w3.org/path/ test.html } http://www.w3.org/path/test.html test uri-3.2 {uri::resolve - relative URL path, base trailing slash} { uri::resolve http://www.w3.org/path/ relpath/test.html } http://www.w3.org/path/relpath/test.html test uri-3.3 {uri::resolve - relative URL, base no trailing slash} { uri::resolve http://www.w3.org/path test.html } http://www.w3.org/test.html test uri-3.4 {uri::resolve - relative URL path, base no trailing slash} { uri::resolve http://www.w3.org/path relpath/test.html } http://www.w3.org/relpath/test.html test uri-3.5 {uri::resolve - relative URL w/- query} { uri::resolve http://www.w3.org/path/ test.html?abc=def } http://www.w3.org/path/test.html?abc=def test uri-3.6 {uri::resolve - absolute URL} { uri::resolve http://www.w3.org/path/ http://test.net/test.html } http://test.net/test.html test uri-3.7 {uri::resolve - two queries - one sans path} { uri::resolve http://www.example.com/foo/bar.rvt?foo=bar ?shoo=bee } http://www.example.com/foo/bar.rvt?shoo=bee test uri-3.8 {uri::resolve - two queries} { uri::resolve http://www.example.com/baz/?foo=bar ?shoo=bee } http://www.example.com/baz/?shoo=bee test uri-3.9 {uri::resolve - two absolute URL's with queries} { uri::resolve http://www.example.com/?foo=bar http://www.example.com/?shoo=bee } http://www.example.com/?shoo=bee test uri-3.10 {uri::resolve - two queries, one absolute URL, one absolute path} { uri::resolve http://www.example.com/baz?foo=bar /baz?shoo=bee } http://www.example.com/baz?shoo=bee test uri-3.11 {uri::resolve - scheme-relative url with authority, rfc3986 4.2} { uri::resolve http://www.foo.com/ //www.bar.com/ } http://www.bar.com/ test uri-3.12 {uri::resolve - scheme-relative url with authority, rfc3986 4.2} { uri::resolve https://www.foo.com/ //www.bar.com/ } https://www.bar.com/ test uri-3.13 {uri::resolve - scheme-relative url with authority, rfc3986 4.2} { uri::resolve https://www.foo.com/ //www.bar.com } https://www.bar.com test uri-3.14 {uri::resolve - two queries, one absolute URL, one absolute path, port} { uri::resolve http://www.example.com:8080/baz?foo=bar /baz?shoo=bee } http://www.example.com:8080/baz?shoo=bee test uri-3.15 {uri::resolve - two queries, one absolute URL, one absolute path, FQDN} { uri::resolve http://www.example.com./baz?foo=bar /baz?shoo=bee } http://www.example.com./baz?shoo=bee test uri-3.16 {uri::resolve - two queries, one absolute URL, one absolute path, FQDN, port} { uri::resolve http://www.example.com.:8080/baz?foo=bar /baz?shoo=bee } http://www.example.com.:8080/baz?shoo=bee test uri-3.17 {uri::resolve - two queries, one absolute URL, one absolute path, valid hostname "9" on local network} { uri::resolve http://9/baz?foo=bar /baz?shoo=bee } http://9/baz?shoo=bee test uri-3.18 {uri::resolve - two queries, one absolute URL, one absolute path, valid hostname "9" on local network, port} { uri::resolve http://9:8080/baz?foo=bar /baz?shoo=bee } http://9:8080/baz?shoo=bee test uri-3.19 {uri::resolve - two queries, one absolute URL, one absolute path, valid hostname "0-9" on local network} { uri::resolve http://0-9/baz?foo=bar /baz?shoo=bee } http://0-9/baz?shoo=bee test uri-3.20 {uri::resolve - two queries, one absolute URL, one absolute path, valid hostname "0-9" on local network, port} { uri::resolve http://0-9:8080/baz?foo=bar /baz?shoo=bee } http://0-9:8080/baz?shoo=bee test uri-3.21 {uri::resolve - two queries, one absolute URL, one absolute path, valid hostname "9" on local network, FQDN} { uri::resolve http://9./baz?foo=bar /baz?shoo=bee } http://9./baz?shoo=bee test uri-3.22 {uri::resolve - two queries, one absolute URL, one absolute path, valid hostname "9" on local network, FQDN, port} { uri::resolve http://9.:8080/baz?foo=bar /baz?shoo=bee } http://9.:8080/baz?shoo=bee test uri-3.23 {uri::resolve - two queries, one absolute URL, one absolute path, valid hostname "0-9" on local network, FQDN} { uri::resolve http://0-9./baz?foo=bar /baz?shoo=bee } http://0-9./baz?shoo=bee test uri-3.24 {uri::resolve - two queries, one absolute URL, one absolute path, valid hostname "0-9" on local network, FQDN, port} { uri::resolve http://0-9.:8080/baz?foo=bar /baz?shoo=bee } http://0-9.:8080/baz?shoo=bee test uri-3.25 {uri::resolve -- user:pwd for http} { ::uri::resolve http://anonymous:passw0rd@core.tcl.tk/foo/bar /some } http://anonymous:passw0rd@core.tcl.tk/some test uri-3.26 {uri::resolve -- user:pwd for http} { ::uri::resolve http://anonymous:passw0rd@core.tcl.tk/foo/bar //www.tcl.tk/foo/bar } http://www.tcl.tk/foo/bar test uri-3.27 {uri::resolve -- user:pwd for http} { ::uri::resolve http://anonymous:passw0rd@core.tcl.tk/foo/bar //core.tcl.tk/foo/bar } http://core.tcl.tk/foo/bar test uri-3.28 {uri::resolve -- port for http} { ::uri::resolve http://core.tcl.tk:8080/foo/bar //core.tcl.tk/foo/bar } http://core.tcl.tk/foo/bar test uri-3.29 {uri::resolve -- user:pwd and port for http} { ::uri::resolve http://anonymous:passw0rd@core.tcl.tk:8080/foo/bar //core.tcl.tk/foo/bar } http://core.tcl.tk/foo/bar # ------------------------------------------------------------------------- test uri-4.1 {uri::geturl} { set data [info commands] set file [makeFile {} __testdata] set f [open $file w] puts -nonewline $f $data close $f set token [uri::geturl file://$file] removeFile __testdata string compare $data [set [subst $token](data)] } 0 # ------------------------------------------------------------------------- test uri-5.1-2 {uri::canonicalize} { uri::canonicalize http://www.test.net/path1/./remove/../path2/resource } http://www.test.net/path1/path2/resource test uri-5.2-2 {uri::canonicalize infinite loop} { uri::canonicalize http://www.test.net/../path2/resource } {http://www.test.net/path2/resource} test uri-5.3-2 {uri::canonicalize} { uri::canonicalize http://www.test.net/./path1/./remove/../path2/../resource } http://www.test.net/path1/resource test uri-5.4-2 {uri::canonicalize} { uri::canonicalize http://www.test.net/./././path1/./remove/../path2/../resource } http://www.test.net/path1/resource test uri-5.5-2 {uri::canonicalize} { uri::canonicalize http://www.test.net/./././path1/./remove/path2/../../resource } http://www.test.net/path1/resource test uri-5.6-2 {uri::canonicalize infinite loop} { uri::canonicalize http://www.test.net/../../../path2/resource } {http://www.test.net/path2/resource} test uri-5.7-2 {uri::canonicalize} { uri::canonicalize http://www.test.net/path1/./remove/../path.html/resource } http://www.test.net/path1/path.html/resource test uri-5.8-2 {uri::canonicalize infinite loop} { uri::canonicalize http://www.test.net/../path.html/resource } {http://www.test.net/path.html/resource} test uri-5.9-2 {uri::canonicalize} { uri::canonicalize http://www.test.net/./path1/./remove/../path.html/../resource } http://www.test.net/path1/resource test uri-5.10-2 {uri::canonicalize} { uri::canonicalize http://www.test.net/./././path1/./remove/../path.html/../resource } http://www.test.net/path1/resource test uri-5.11-2 {uri::canonicalize} { uri::canonicalize http://www.test.net/./././path1/./remove/path.html/../../resource } http://www.test.net/path1/resource test uri-5.12-2 {uri::canonicalize infinite loop} { uri::canonicalize http://www.test.net/../../../path.html/resource } {http://www.test.net/path.html/resource} test uri-5.13-2 {uri::canonicalize} { uri::canonicalize http://www.eldritchpress.org/jc/../help.html } {http://www.eldritchpress.org/help.html} test uri-5.14-2 {uri::canonicalize trailing ..} { uri::canonicalize http://www.example.com/foo/bar/.. } {http://www.example.com/foo/} test uri-5.15-2 {uri::canonicalize trailing ..} { uri::canonicalize http://www.example.com/.. } {http://www.example.com/} test uri-5.16-2 {uri::canonicalize not ..s} { uri::canonicalize http://www.example.com/..s } {http://www.example.com/..s} test uri-5.17-2 {uri::canonicalize not ..s} { uri::canonicalize http://www.example.com/..s/ } {http://www.example.com/..s/} test uri-5.18-2 {uri::canonicalize not ..s} { uri::canonicalize http://www.example.com/path1/..s } {http://www.example.com/path1/..s} test uri-5.19-2 {uri::canonicalize not ..s} { uri::canonicalize http://www.example.com/path1/..s/ } {http://www.example.com/path1/..s/} test uri-5.20-2 {uri::canonicalize not ..s} { uri::canonicalize http://www.example.com/path1/..s/path2 } {http://www.example.com/path1/..s/path2} test uri-5.21-2 {uri::canonicalize not ..s} { uri::canonicalize http://www.example.com/path1/..s/path2/ } {http://www.example.com/path1/..s/path2/} test uri-5.22-2 {uri::canonicalize not ..s} { uri::canonicalize http://www.example.com/..s/path1 } {http://www.example.com/..s/path1} test uri-5.23-2 {uri::canonicalize not ..s} { uri::canonicalize http://www.example.com/..s/path1/ } {http://www.example.com/..s/path1/} test uri-5.24-2 {uri::canonicalize not .s} { uri::canonicalize http://www.example.com/.s } {http://www.example.com/.s} test uri-5.25-2 {uri::canonicalize not .s} { uri::canonicalize http://www.example.com/.s/ } {http://www.example.com/.s/} test uri-5.26-2 {uri::canonicalize not .s} { uri::canonicalize http://www.example.com/path1/.s } {http://www.example.com/path1/.s} test uri-5.27-2 {uri::canonicalize not .s} { uri::canonicalize http://www.example.com/path1/.s/ } {http://www.example.com/path1/.s/} test uri-5.28-2 {uri::canonicalize not .s} { uri::canonicalize http://www.example.com/path1/.s/path2 } {http://www.example.com/path1/.s/path2} test uri-5.29-2 {uri::canonicalize not .s} { uri::canonicalize http://www.example.com/path1/.s/path2/ } {http://www.example.com/path1/.s/path2/} test uri-5.30-2 {uri::canonicalize not .s} { uri::canonicalize http://www.example.com/.s/path1 } {http://www.example.com/.s/path1} test uri-5.31-2 {uri::canonicalize not .s} { uri::canonicalize http://www.example.com/.s/path1/ } {http://www.example.com/.s/path1/} test uri-5.32-2 {uri::canonicalize not s..} { uri::canonicalize http://www.example.com/s.. } {http://www.example.com/s..} test uri-5.33-2 {uri::canonicalize not s..} { uri::canonicalize http://www.example.com/s../ } {http://www.example.com/s../} test uri-5.34-2 {uri::canonicalize not s..} { uri::canonicalize http://www.example.com/path1/s.. } {http://www.example.com/path1/s..} test uri-5.35-2 {uri::canonicalize not s..} { uri::canonicalize http://www.example.com/path1/s../ } {http://www.example.com/path1/s../} test uri-5.36-2 {uri::canonicalize not s..} { uri::canonicalize http://www.example.com/path1/s../path2 } {http://www.example.com/path1/s../path2} test uri-5.37-2 {uri::canonicalize not s..} { uri::canonicalize http://www.example.com/path1/s../path2/ } {http://www.example.com/path1/s../path2/} test uri-5.38-2 {uri::canonicalize not s..} { uri::canonicalize http://www.example.com/s../path1 } {http://www.example.com/s../path1} test uri-5.39-2 {uri::canonicalize not s..} { uri::canonicalize http://www.example.com/s../path1/ } {http://www.example.com/s../path1/} test uri-5.40-2 {uri::canonicalize not s.} { uri::canonicalize http://www.example.com/s. } {http://www.example.com/s.} test uri-5.41-2 {uri::canonicalize not s.} { uri::canonicalize http://www.example.com/s./ } {http://www.example.com/s./} test uri-5.42-2 {uri::canonicalize not s.} { uri::canonicalize http://www.example.com/path1/s. } {http://www.example.com/path1/s.} test uri-5.43-2 {uri::canonicalize not s.} { uri::canonicalize http://www.example.com/path1/s./ } {http://www.example.com/path1/s./} test uri-5.44-2 {uri::canonicalize not s.} { uri::canonicalize http://www.example.com/path1/s./path2 } {http://www.example.com/path1/s./path2} test uri-5.45-2 {uri::canonicalize not s.} { uri::canonicalize http://www.example.com/path1/s./path2/ } {http://www.example.com/path1/s./path2/} test uri-5.46-2 {uri::canonicalize not s.} { uri::canonicalize http://www.example.com/s./path1 } {http://www.example.com/s./path1} test uri-5.47-2 {uri::canonicalize not s.} { uri::canonicalize http://www.example.com/s./path1/ } {http://www.example.com/s./path1/} test uri-5.48-2 {uri::canonicalize infinite loop, valid hostname on local network} { uri::canonicalize http://test-host/../path.html/resource } {http://test-host/path.html/resource} test uri-5.49-2 {uri::canonicalize infinite loop, valid hostname "9" on local network} { uri::canonicalize http://9/../path.html/resource } {http://9/path.html/resource} test uri-5.50-2 {uri::canonicalize infinite loop, valid hostname "0-9" on local network} { uri::canonicalize http://0-9/../path.html/resource } {http://0-9/path.html/resource} test uri-5.51-2 {uri::canonicalize infinite loop, valid hostname on local network, FQDN} { uri::canonicalize http://test-host./../path.html/resource } {http://test-host./path.html/resource} test uri-5.52-2 {uri::canonicalize infinite loop, valid hostname "9" on local network, FQDN} { uri::canonicalize http://9./../path.html/resource } {http://9./path.html/resource} test uri-5.53-2 {uri::canonicalize infinite loop, valid hostname "0-9" on local network, FQDN} { uri::canonicalize http://0-9./../path.html/resource } {http://0-9./path.html/resource} test uri-5.1-3 {uri::canonicalize} { uri::canonicalize ftp://ftp.test.net/path1/./remove/../path2/resource } ftp://ftp.test.net/path1/path2/resource test uri-5.2-3 {uri::canonicalize infinite loop} { uri::canonicalize ftp://ftp.test.net/../path2/resource } {ftp://ftp.test.net/path2/resource} test uri-5.3-3 {uri::canonicalize} { uri::canonicalize ftp://ftp.test.net/./path1/./remove/../path2/../resource } ftp://ftp.test.net/path1/resource test uri-5.4-3 {uri::canonicalize} { uri::canonicalize ftp://ftp.test.net/./././path1/./remove/../path2/../resource } ftp://ftp.test.net/path1/resource test uri-5.5-3 {uri::canonicalize} { uri::canonicalize ftp://ftp.test.net/./././path1/./remove/path2/../../resource } ftp://ftp.test.net/path1/resource test uri-5.6-3 {uri::canonicalize infinite loop} { uri::canonicalize ftp://ftp.test.net/../../../path2/resource } {ftp://ftp.test.net/path2/resource} test uri-5.7-3 {uri::canonicalize} { uri::canonicalize ftp://ftp.test.net/path1/./remove/../path.html/resource } ftp://ftp.test.net/path1/path.html/resource test uri-5.8-3 {uri::canonicalize infinite loop} { uri::canonicalize ftp://ftp.test.net/../path.html/resource } {ftp://ftp.test.net/path.html/resource} test uri-5.9-3 {uri::canonicalize} { uri::canonicalize ftp://ftp.test.net/./path1/./remove/../path.html/../resource } ftp://ftp.test.net/path1/resource test uri-5.10-3 {uri::canonicalize} { uri::canonicalize ftp://ftp.test.net/./././path1/./remove/../path.html/../resource } ftp://ftp.test.net/path1/resource test uri-5.11-3 {uri::canonicalize} { uri::canonicalize ftp://ftp.test.net/./././path1/./remove/path.html/../../resource } ftp://ftp.test.net/path1/resource test uri-5.12-3 {uri::canonicalize infinite loop} { uri::canonicalize ftp://ftp.test.net/../../../path.html/resource } {ftp://ftp.test.net/path.html/resource} test uri-5.13-3 {uri::canonicalize} { uri::canonicalize ftp://www.eldritchpress.org/jc/../help.html } {ftp://www.eldritchpress.org/help.html} test uri-5.14-3 {uri::canonicalize trailing ..} { uri::canonicalize ftp://www.example.com/foo/bar/.. } {ftp://www.example.com/foo/} test uri-5.15-3 {uri::canonicalize trailing ..} { uri::canonicalize ftp://www.example.com/.. } {ftp://www.example.com/} test uri-5.16-3 {uri::canonicalize not ..s} { uri::canonicalize ftp://ftp.test.net/..s } {ftp://ftp.test.net/..s} test uri-5.17-3 {uri::canonicalize not ..s} { uri::canonicalize ftp://ftp.test.net/..s/ } {ftp://ftp.test.net/..s/} test uri-5.18-3 {uri::canonicalize not ..s} { uri::canonicalize ftp://ftp.test.net/path1/..s } {ftp://ftp.test.net/path1/..s} test uri-5.19-3 {uri::canonicalize not ..s} { uri::canonicalize ftp://ftp.test.net/path1/..s/ } {ftp://ftp.test.net/path1/..s/} test uri-5.20-3 {uri::canonicalize not ..s} { uri::canonicalize ftp://ftp.test.net/path1/..s/path2 } {ftp://ftp.test.net/path1/..s/path2} test uri-5.21-3 {uri::canonicalize not ..s} { uri::canonicalize ftp://ftp.test.net/path1/..s/path2/ } {ftp://ftp.test.net/path1/..s/path2/} test uri-5.22-3 {uri::canonicalize not ..s} { uri::canonicalize ftp://ftp.test.net/..s/path1 } {ftp://ftp.test.net/..s/path1} test uri-5.23-3 {uri::canonicalize not ..s} { uri::canonicalize ftp://ftp.test.net/..s/path1/ } {ftp://ftp.test.net/..s/path1/} test uri-5.24-3 {uri::canonicalize not .s} { uri::canonicalize ftp://ftp.test.net/.s } {ftp://ftp.test.net/.s} test uri-5.25-3 {uri::canonicalize not .s} { uri::canonicalize ftp://ftp.test.net/.s/ } {ftp://ftp.test.net/.s/} test uri-5.26-3 {uri::canonicalize not .s} { uri::canonicalize ftp://ftp.test.net/path1/.s } {ftp://ftp.test.net/path1/.s} test uri-5.27-3 {uri::canonicalize not .s} { uri::canonicalize ftp://ftp.test.net/path1/.s/ } {ftp://ftp.test.net/path1/.s/} test uri-5.28-3 {uri::canonicalize not .s} { uri::canonicalize ftp://ftp.test.net/path1/.s/path2 } {ftp://ftp.test.net/path1/.s/path2} test uri-5.29-3 {uri::canonicalize not .s} { uri::canonicalize ftp://ftp.test.net/path1/.s/path2/ } {ftp://ftp.test.net/path1/.s/path2/} test uri-5.30-3 {uri::canonicalize not .s} { uri::canonicalize ftp://ftp.test.net/.s/path1 } {ftp://ftp.test.net/.s/path1} test uri-5.31-3 {uri::canonicalize not .s} { uri::canonicalize ftp://ftp.test.net/.s/path1/ } {ftp://ftp.test.net/.s/path1/} test uri-5.32-3 {uri::canonicalize not s..} { uri::canonicalize ftp://ftp.test.net/s.. } {ftp://ftp.test.net/s..} test uri-5.33-3 {uri::canonicalize not s..} { uri::canonicalize ftp://ftp.test.net/s../ } {ftp://ftp.test.net/s../} test uri-5.34-3 {uri::canonicalize not s..} { uri::canonicalize ftp://ftp.test.net/path1/s.. } {ftp://ftp.test.net/path1/s..} test uri-5.35-3 {uri::canonicalize not s..} { uri::canonicalize ftp://ftp.test.net/path1/s../ } {ftp://ftp.test.net/path1/s../} test uri-5.36-3 {uri::canonicalize not s..} { uri::canonicalize ftp://ftp.test.net/path1/s../path2 } {ftp://ftp.test.net/path1/s../path2} test uri-5.37-3 {uri::canonicalize not s..} { uri::canonicalize ftp://ftp.test.net/path1/s../path2/ } {ftp://ftp.test.net/path1/s../path2/} test uri-5.38-3 {uri::canonicalize not s..} { uri::canonicalize ftp://ftp.test.net/s../path1 } {ftp://ftp.test.net/s../path1} test uri-5.39-3 {uri::canonicalize not s..} { uri::canonicalize ftp://ftp.test.net/s../path1/ } {ftp://ftp.test.net/s../path1/} test uri-5.40-3 {uri::canonicalize not s.} { uri::canonicalize ftp://ftp.test.net/s. } {ftp://ftp.test.net/s.} test uri-5.41-3 {uri::canonicalize not s.} { uri::canonicalize ftp://ftp.test.net/s./ } {ftp://ftp.test.net/s./} test uri-5.42-3 {uri::canonicalize not s.} { uri::canonicalize ftp://ftp.test.net/path1/s. } {ftp://ftp.test.net/path1/s.} test uri-5.43-3 {uri::canonicalize not s.} { uri::canonicalize ftp://ftp.test.net/path1/s./ } {ftp://ftp.test.net/path1/s./} test uri-5.44-3 {uri::canonicalize not s.} { uri::canonicalize ftp://ftp.test.net/path1/s./path2 } {ftp://ftp.test.net/path1/s./path2} test uri-5.45-3 {uri::canonicalize not s.} { uri::canonicalize ftp://ftp.test.net/path1/s./path2/ } {ftp://ftp.test.net/path1/s./path2/} test uri-5.46-3 {uri::canonicalize not s.} { uri::canonicalize ftp://ftp.test.net/s./path1 } {ftp://ftp.test.net/s./path1} test uri-5.47-3 {uri::canonicalize not s.} { uri::canonicalize ftp://ftp.test.net/s./path1/ } {ftp://ftp.test.net/s./path1/} test uri-5.48-3 {uri::canonicalize infinite loop, valid hostname on local network} { uri::canonicalize ftp://test-host/../path.html/resource } {ftp://test-host/path.html/resource} test uri-5.49-3 {uri::canonicalize infinite loop, valid hostname "9" on local network} { uri::canonicalize ftp://9/../path.html/resource } {ftp://9/path.html/resource} test uri-5.50-3 {uri::canonicalize infinite loop, valid hostname "0-9" on local network} { uri::canonicalize ftp://0-9/../path.html/resource } {ftp://0-9/path.html/resource} test uri-5.51-3 {uri::canonicalize infinite loop, valid hostname on local network, FQDN} { uri::canonicalize ftp://test-host./../path.html/resource } {ftp://test-host./path.html/resource} test uri-5.52-3 {uri::canonicalize infinite loop, valid hostname "9" on local network, FQDN} { uri::canonicalize ftp://9./../path.html/resource } {ftp://9./path.html/resource} test uri-5.53-3 {uri::canonicalize infinite loop, valid hostname "0-9" on local network, FQDN} { uri::canonicalize ftp://0-9./../path.html/resource } {ftp://0-9./path.html/resource} test uri-5.1-4 {uri::canonicalize} { uri::canonicalize file://goo.test.net/path1/./remove/../path2/resource } file://goo.test.net/path1/path2/resource test uri-5.2-4 {uri::canonicalize infinite loop} { uri::canonicalize file://goo.test.net/../path2/resource } {file://goo.test.net/path2/resource} test uri-5.3-4 {uri::canonicalize} { uri::canonicalize file://goo.test.net/./path1/./remove/../path2/../resource } file://goo.test.net/path1/resource test uri-5.4-4 {uri::canonicalize} { uri::canonicalize file://goo.test.net/./././path1/./remove/../path2/../resource } file://goo.test.net/path1/resource test uri-5.5-4 {uri::canonicalize} { uri::canonicalize file://goo.test.net/./././path1/./remove/path2/../../resource } file://goo.test.net/path1/resource test uri-5.6-4 {uri::canonicalize infinite loop} { uri::canonicalize file://goo.test.net/../../../path2/resource } {file://goo.test.net/path2/resource} test uri-5.7-4 {uri::canonicalize} { uri::canonicalize file://goo.test.net/path1/./remove/../path.html/resource } file://goo.test.net/path1/path.html/resource test uri-5.8-4 {uri::canonicalize infinite loop} { uri::canonicalize file://goo.test.net/../path.html/resource } {file://goo.test.net/path.html/resource} test uri-5.9-4 {uri::canonicalize} { uri::canonicalize file://goo.test.net/./path1/./remove/../path.html/../resource } file://goo.test.net/path1/resource test uri-5.10-4 {uri::canonicalize} { uri::canonicalize file://goo.test.net/./././path1/./remove/../path.html/../resource } file://goo.test.net/path1/resource test uri-5.11-4 {uri::canonicalize} { uri::canonicalize file://goo.test.net/./././path1/./remove/path.html/../../resource } file://goo.test.net/path1/resource test uri-5.12-4 {uri::canonicalize infinite loop} { uri::canonicalize file://goo.test.net/../../../path.html/resource } {file://goo.test.net/path.html/resource} test uri-5.13-4 {uri::canonicalize} { uri::canonicalize file://www.eldritchpress.org/jc/../help.html } {file://www.eldritchpress.org/help.html} test uri-5.14-4 {uri::canonicalize trailing ..} { uri::canonicalize file://www.example.com/foo/bar/.. } {file://www.example.com/foo/} test uri-5.15-4 {uri::canonicalize trailing ..} { uri::canonicalize file://www.example.com/.. } {file://www.example.com/} test uri-5.16-4 {uri::canonicalize not ..s} { uri::canonicalize file://goo.test.net/..s } {file://goo.test.net/..s} test uri-5.17-4 {uri::canonicalize not ..s} { uri::canonicalize file://goo.test.net/..s/ } {file://goo.test.net/..s/} test uri-5.18-4 {uri::canonicalize not ..s} { uri::canonicalize file://goo.test.net/path1/..s } {file://goo.test.net/path1/..s} test uri-5.19-4 {uri::canonicalize not ..s} { uri::canonicalize file://goo.test.net/path1/..s/ } {file://goo.test.net/path1/..s/} test uri-5.20-4 {uri::canonicalize not ..s} { uri::canonicalize file://goo.test.net/path1/..s/path2 } {file://goo.test.net/path1/..s/path2} test uri-5.21-4 {uri::canonicalize not ..s} { uri::canonicalize file://goo.test.net/path1/..s/path2/ } {file://goo.test.net/path1/..s/path2/} test uri-5.22-4 {uri::canonicalize not ..s} { uri::canonicalize file://goo.test.net/..s/path1 } {file://goo.test.net/..s/path1} test uri-5.23-4 {uri::canonicalize not ..s} { uri::canonicalize file://goo.test.net/..s/path1/ } {file://goo.test.net/..s/path1/} test uri-5.24-4 {uri::canonicalize not .s} { uri::canonicalize file://goo.test.net/.s } {file://goo.test.net/.s} test uri-5.25-4 {uri::canonicalize not .s} { uri::canonicalize file://goo.test.net/.s/ } {file://goo.test.net/.s/} test uri-5.26-4 {uri::canonicalize not .s} { uri::canonicalize file://goo.test.net/path1/.s } {file://goo.test.net/path1/.s} test uri-5.27-4 {uri::canonicalize not .s} { uri::canonicalize file://goo.test.net/path1/.s/ } {file://goo.test.net/path1/.s/} test uri-5.28-4 {uri::canonicalize not .s} { uri::canonicalize file://goo.test.net/path1/.s/path2 } {file://goo.test.net/path1/.s/path2} test uri-5.29-4 {uri::canonicalize not .s} { uri::canonicalize file://goo.test.net/path1/.s/path2/ } {file://goo.test.net/path1/.s/path2/} test uri-5.30-4 {uri::canonicalize not .s} { uri::canonicalize file://goo.test.net/.s/path1 } {file://goo.test.net/.s/path1} test uri-5.31-4 {uri::canonicalize not .s} { uri::canonicalize file://goo.test.net/.s/path1/ } {file://goo.test.net/.s/path1/} test uri-5.32-4 {uri::canonicalize not s..} { uri::canonicalize file://goo.test.net/s.. } {file://goo.test.net/s..} test uri-5.33-4 {uri::canonicalize not s..} { uri::canonicalize file://goo.test.net/s../ } {file://goo.test.net/s../} test uri-5.34-4 {uri::canonicalize not s..} { uri::canonicalize file://goo.test.net/path1/s.. } {file://goo.test.net/path1/s..} test uri-5.35-4 {uri::canonicalize not s..} { uri::canonicalize file://goo.test.net/path1/s../ } {file://goo.test.net/path1/s../} test uri-5.36-4 {uri::canonicalize not s..} { uri::canonicalize file://goo.test.net/path1/s../path2 } {file://goo.test.net/path1/s../path2} test uri-5.37-4 {uri::canonicalize not s..} { uri::canonicalize file://goo.test.net/path1/s../path2/ } {file://goo.test.net/path1/s../path2/} test uri-5.38-4 {uri::canonicalize not s..} { uri::canonicalize file://goo.test.net/s../path1 } {file://goo.test.net/s../path1} test uri-5.39-4 {uri::canonicalize not s..} { uri::canonicalize file://goo.test.net/s../path1/ } {file://goo.test.net/s../path1/} test uri-5.40-4 {uri::canonicalize not s.} { uri::canonicalize file://goo.test.net/s. } {file://goo.test.net/s.} test uri-5.41-4 {uri::canonicalize not s.} { uri::canonicalize file://goo.test.net/s./ } {file://goo.test.net/s./} test uri-5.42-4 {uri::canonicalize not s.} { uri::canonicalize file://goo.test.net/path1/s. } {file://goo.test.net/path1/s.} test uri-5.43-4 {uri::canonicalize not s.} { uri::canonicalize file://goo.test.net/path1/s./ } {file://goo.test.net/path1/s./} test uri-5.44-4 {uri::canonicalize not s.} { uri::canonicalize file://goo.test.net/path1/s./path2 } {file://goo.test.net/path1/s./path2} test uri-5.45-4 {uri::canonicalize not s.} { uri::canonicalize file://goo.test.net/path1/s./path2/ } {file://goo.test.net/path1/s./path2/} test uri-5.46-4 {uri::canonicalize not s.} { uri::canonicalize file://goo.test.net/s./path1 } {file://goo.test.net/s./path1} test uri-5.47-4 {uri::canonicalize not s.} { uri::canonicalize file://goo.test.net/s./path1/ } {file://goo.test.net/s./path1/} test uri-5.48-4 {uri::canonicalize infinite loop, valid hostname on local network} { uri::canonicalize file://test-host/../path.html/resource } {file://test-host/path.html/resource} test uri-5.49-4 {uri::canonicalize infinite loop, valid hostname "9" on local network} { uri::canonicalize file://9/../path.html/resource } {file://9/path.html/resource} test uri-5.50-4 {uri::canonicalize infinite loop, valid hostname "0-9" on local network} { uri::canonicalize file://0-9/../path.html/resource } {file://0-9/path.html/resource} test uri-5.51-4 {uri::canonicalize infinite loop, valid hostname on local network, FQDN} { uri::canonicalize file://test-host./../path.html/resource } {file://test-host./path.html/resource} test uri-5.52-4 {uri::canonicalize infinite loop, valid hostname "9" on local network, FQDN} { uri::canonicalize file://9./../path.html/resource } {file://9./path.html/resource} test uri-5.53-4 {uri::canonicalize infinite loop, valid hostname "0-9" on local network, FQDN} { uri::canonicalize file://0-9./../path.html/resource } {file://0-9./path.html/resource} test uri-5.1-5 {uri::canonicalize} { uri::canonicalize file:///path1/./remove/../path2/resource } file:///path1/path2/resource test uri-5.2-5 {uri::canonicalize infinite loop} { uri::canonicalize file:///../path2/resource } {file:///path2/resource} test uri-5.3-5 {uri::canonicalize} { uri::canonicalize file:///./path1/./remove/../path2/../resource } file:///path1/resource test uri-5.4-5 {uri::canonicalize} { uri::canonicalize file:///./././path1/./remove/../path2/../resource } file:///path1/resource test uri-5.5-5 {uri::canonicalize} { uri::canonicalize file:///./././path1/./remove/path2/../../resource } file:///path1/resource test uri-5.6-5 {uri::canonicalize infinite loop} { uri::canonicalize file:///../../../path2/resource } {file:///path2/resource} test uri-5.7-5 {uri::canonicalize} { uri::canonicalize file:///path1/./remove/../path.html/resource } file:///path1/path.html/resource test uri-5.8-5 {uri::canonicalize infinite loop} { uri::canonicalize file:///../path.html/resource } {file:///path.html/resource} test uri-5.9-5 {uri::canonicalize} { uri::canonicalize file:///./path1/./remove/../path.html/../resource } file:///path1/resource test uri-5.10-5 {uri::canonicalize} { uri::canonicalize file:///./././path1/./remove/../path.html/../resource } file:///path1/resource test uri-5.11-5 {uri::canonicalize} { uri::canonicalize file:///./././path1/./remove/path.html/../../resource } file:///path1/resource test uri-5.12-5 {uri::canonicalize infinite loop} { uri::canonicalize file:///../../../path.html/resource } {file:///path.html/resource} test uri-5.13-5 {uri::canonicalize} { uri::canonicalize file:///jc/../help.html } {file:///help.html} test uri-5.14-5 {uri::canonicalize trailing ..} { uri::canonicalize file:///foo/bar/.. } {file:///foo/} test uri-5.15-5 {uri::canonicalize trailing ..} { uri::canonicalize file:///.. } {file:///} test uri-5.16-5 {uri::canonicalize not ..s} { uri::canonicalize file:///..s } {file:///..s} test uri-5.17-5 {uri::canonicalize not ..s} { uri::canonicalize file:///..s/ } {file:///..s/} test uri-5.18-5 {uri::canonicalize not ..s} { uri::canonicalize file:///path1/..s } {file:///path1/..s} test uri-5.19-5 {uri::canonicalize not ..s} { uri::canonicalize file:///path1/..s/ } {file:///path1/..s/} test uri-5.20-5 {uri::canonicalize not ..s} { uri::canonicalize file:///path1/..s/path2 } {file:///path1/..s/path2} test uri-5.21-5 {uri::canonicalize not ..s} { uri::canonicalize file:///path1/..s/path2/ } {file:///path1/..s/path2/} test uri-5.22-5 {uri::canonicalize not ..s} { uri::canonicalize file:///..s/path1 } {file:///..s/path1} test uri-5.23-5 {uri::canonicalize not ..s} { uri::canonicalize file:///..s/path1/ } {file:///..s/path1/} test uri-5.24-5 {uri::canonicalize not .s} { uri::canonicalize file:///.s } {file:///.s} test uri-5.25-5 {uri::canonicalize not .s} { uri::canonicalize file:///.s/ } {file:///.s/} test uri-5.26-5 {uri::canonicalize not .s} { uri::canonicalize file:///path1/.s } {file:///path1/.s} test uri-5.27-5 {uri::canonicalize not .s} { uri::canonicalize file:///path1/.s/ } {file:///path1/.s/} test uri-5.28-5 {uri::canonicalize not .s} { uri::canonicalize file:///path1/.s/path2 } {file:///path1/.s/path2} test uri-5.29-5 {uri::canonicalize not .s} { uri::canonicalize file:///path1/.s/path2/ } {file:///path1/.s/path2/} test uri-5.30-5 {uri::canonicalize not .s} { uri::canonicalize file:///.s/path1 } {file:///.s/path1} test uri-5.31-5 {uri::canonicalize not .s} { uri::canonicalize file:///.s/path1/ } {file:///.s/path1/} test uri-5.32-5 {uri::canonicalize not s..} { uri::canonicalize file:///s.. } {file:///s..} test uri-5.33-5 {uri::canonicalize not s..} { uri::canonicalize file:///s../ } {file:///s../} test uri-5.34-5 {uri::canonicalize not s..} { uri::canonicalize file:///path1/s.. } {file:///path1/s..} test uri-5.35-5 {uri::canonicalize not s..} { uri::canonicalize file:///path1/s../ } {file:///path1/s../} test uri-5.36-5 {uri::canonicalize not s..} { uri::canonicalize file:///path1/s../path2 } {file:///path1/s../path2} test uri-5.37-5 {uri::canonicalize not s..} { uri::canonicalize file:///path1/s../path2/ } {file:///path1/s../path2/} test uri-5.38-5 {uri::canonicalize not s..} { uri::canonicalize file:///s../path1 } {file:///s../path1} test uri-5.39-5 {uri::canonicalize not s..} { uri::canonicalize file:///s../path1/ } {file:///s../path1/} test uri-5.40-5 {uri::canonicalize not s.} { uri::canonicalize file:///s. } {file:///s.} test uri-5.41-5 {uri::canonicalize not s.} { uri::canonicalize file:///s./ } {file:///s./} test uri-5.42-5 {uri::canonicalize not s.} { uri::canonicalize file:///path1/s. } {file:///path1/s.} test uri-5.43-5 {uri::canonicalize not s.} { uri::canonicalize file:///path1/s./ } {file:///path1/s./} test uri-5.44-5 {uri::canonicalize not s.} { uri::canonicalize file:///path1/s./path2 } {file:///path1/s./path2} test uri-5.45-5 {uri::canonicalize not s.} { uri::canonicalize file:///path1/s./path2/ } {file:///path1/s./path2/} test uri-5.46-5 {uri::canonicalize not s.} { uri::canonicalize file:///s./path1 } {file:///s./path1} test uri-5.47-5 {uri::canonicalize not s.} { uri::canonicalize file:///s./path1/ } {file:///s./path1/} # There are no counterparts uri-5.48-5 to uri-5.53-5 for the tests # uri-5.48-* to uri-5.53-*, *=2,3,4 because these tests try different # hosts, while the tests *=5 are for the file scheme without a host. # ------------------------------------------------------------------------- test uri-6.0 {uri::canonicalize} { uri::canonicalize telnet://goo.test.net/ } telnet://goo.test.net/ # ------------------------------------------------------------------------- test uri-7.0-0 {uri::split & uri::join with unusual fragment including pseudo-query} { ::uri::setQuirkOption NoInitialSlash 0 eval uri::join [uri::split http://tcl.apache.org/websh/faq.ws3\#generic?foo=bar] } {http://tcl.apache.org/websh/faq.ws3#generic?foo=bar} test uri-7.0-1 {uri::split & uri::join with unusual fragment including pseudo-query} { ::uri::setQuirkOption NoInitialSlash 1 eval uri::join [uri::split http://tcl.apache.org/websh/faq.ws3\#generic?foo=bar] } {http://tcl.apache.org/websh/faq.ws3#generic?foo=bar} # ------------------------------------------------------------------------- test uri-8.0-0 {uri::split bug #676976, ill. char in scheme} -body { ::uri::setQuirkOption NoInitialSlash 0 uri::split ht,tp://tcl.apache.org/websh } -returnCodes error -result {{invalid url} ,tp://tcl.apache.org/websh ht,tp://tcl.apache.org/websh} test uri-8.0-1 {uri::split bug #676976, ill. char in scheme} -body { ::uri::setQuirkOption NoInitialSlash 1 uri::split ht,tp://tcl.apache.org/websh } -returnCodes error -result {{invalid url} ,tp://tcl.apache.org/websh ht,tp://tcl.apache.org/websh} # ------------------------------------------------------------------------- test uri-9.0-0 {uri::split bug #936064, user information} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://foo:bar@baz.com:80/bla/] } {fragment {} host baz.com path /bla/ port 80 pwd bar query {} scheme http user foo} test uri-9.0-1 {uri::split bug #936064, user information} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://foo:bar@baz.com:80/bla/] } {fragment {} host baz.com path bla/ pbare 0 port 80 pwd bar query {} scheme http user foo} # ------------------------------------------------------------------------- test uri-10.0-0 {uri::split bug #3235340, fragments after queries} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://baz.com/foo?bar=baz#quux] } {fragment quux host baz.com path /foo port {} pwd {} query bar=baz scheme http user {}} test uri-10.1-0 {uri::join bug #3235340, fragments after queries - test differs from 10.1-1} { ::uri::setQuirkOption NoInitialSlash 0 uri::join fragment quux host baz.com path /foo port {} pwd {} query bar=baz scheme http user {} } {http://baz.com/foo?bar=baz#quux} test uri-10.0-1 {uri::split bug #3235340, fragments after queries} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://baz.com/foo?bar=baz#quux] } {fragment quux host baz.com path foo pbare 0 port {} pwd {} query bar=baz scheme http user {}} test uri-10.1-1 {uri::join bug #3235340, fragments after queries - test differs from 10.1-0} { ::uri::setQuirkOption NoInitialSlash 1 uri::join fragment quux host baz.com path foo pbare 0 port {} pwd {} query bar=baz scheme http user {} } {http://baz.com/foo?bar=baz#quux} # ------------------------------------------------------------------------- test uri-11.0-0 {uri::split, case-insensitive schemata, ticket dc50cc65ea} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split hTTp://foo:bar@baz.com:80/bla/] } {fragment {} host baz.com path /bla/ port 80 pwd bar query {} scheme http user foo} test uri-11.0-1 {uri::split, case-insensitive schemata, ticket dc50cc65ea} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split hTTp://foo:bar@baz.com:80/bla/] } {fragment {} host baz.com path bla/ pbare 0 port 80 pwd bar query {} scheme http user foo} # ------------------------------------------------------------------------- test uri-12.0-0 {uri::split, host-only without scheme, ticket cfb76ff494} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split www.test.de] } {fragment {} host www.test.de path {} port {} pwd {} query {} scheme http user {}} test uri-12.1-0 {uri::split, host-only without scheme, ticket cfb76ff494} { ::uri::setQuirkOption NoInitialSlash 0 dictsort [uri::split http://www.test.de] } {fragment {} host www.test.de path {} port {} pwd {} query {} scheme http user {}} test uri-12.0-1 {uri::split, host-only without scheme, ticket cfb76ff494} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split www.test.de] } {fragment {} host www.test.de path {} pbare 1 port {} pwd {} query {} scheme http user {}} test uri-12.1-1 {uri::split, host-only without scheme, ticket cfb76ff494} { ::uri::setQuirkOption NoInitialSlash 1 dictsort [uri::split http://www.test.de] } {fragment {} host www.test.de path {} pbare 1 port {} pwd {} query {} scheme http user {}} # ------------------------------------------------------------------------- ::uri::setQuirkOption NoInitialSlash $BaseValue(NoInitialSlash) test uri-13.0 {uri::isrelative rfc3986 Section 3.1} { ::uri::isrelative https://example.com/ } 0 test uri-13.1 {uri::isrelative rfc3986 Section 3.1} { ::uri::isrelative //example.com/ } 1 test uri-13.2 {uri::isrelative rfc3986 Section 3.1} { ::uri::isrelative /foo/bar.html } 1 test uri-13.3 {uri::isrelative rfc3986 Section 3.1} { ::uri::isrelative ?a=b&c=d } 1 test uri-13.4 {uri::isrelative rfc3986 Section 3.1} { ::uri::isrelative #top } 1 test uri-13.5 {uri::isrelative rfc3986 Section 3.1 valid scheme} { ::uri::isrelative test:foo } 0 test uri-13.6 {uri::isrelative rfc3986 Section 3.1 valid scheme} { ::uri::isrelative TEST:foo } 0 test uri-13.7 {uri::isrelative rfc3986 Section 3.1 valid scheme} { ::uri::isrelative Test:foo } 0 test uri-13.8 {uri::isrelative rfc3986 Section 3.1 valid scheme} { ::uri::isrelative tesT:foo } 0 test uri-13.9 {uri::isrelative rfc3986 Section 3.1 valid scheme} { ::uri::isrelative te.st:foo } 0 test uri-13.10 {uri::isrelative rfc3986 Section 3.1 valid scheme} { ::uri::isrelative te+st:foo } 0 test uri-13.11 {uri::isrelative rfc3986 Section 3.1 valid scheme} { ::uri::isrelative te9st:foo } 0 test uri-13.12 {uri::isrelative rfc3986 Section 3.1 valid scheme} { ::uri::isrelative te-st:foo } 0 test uri-13.13 {uri::isrelative rfc3986 Section 3.1 valid scheme} { ::uri::isrelative test-:foo } 0 test uri-13.14 {uri::isrelative rfc3986 Section 3.1 need initial letter} { ::uri::isrelative 9est:foo } 1 test uri-13.15 {uri::isrelative rfc3986 Section 3.1 need initial letter} { ::uri::isrelative -est:foo } 1 test uri-13.16 {uri::isrelative rfc3986 Section 3.1 need initial letter} { ::uri::isrelative .est:foo } 1 test uri-13.17 {uri::isrelative rfc3986 Section 3.1 need initial letter} { ::uri::isrelative +est:foo } 1 test uri-13.18 {uri::isrelative rfc3986 Section 3.1 bad character} { ::uri::isrelative te,st:foo } 1 test uri-13.19 {uri::isrelative rfc3986 Section 3.1 correct but unhelpful result} { ::uri::isrelative www.example.com:80 } 0 test uri-13.20 {uri::isrelative rfc3986 Section 3.1 correct but unhelpful result} { ::uri::isrelative c:/windows/welcome.html } 0 test uri-13.21 {uri::isrelative rfc3986 Section 3.1 correct but unhelpful result} { ::uri::isrelative C:/WINDOWS/welcome.html } 0 # ------------------------------------------------------------------------- # More tests on uri::resolve - scheme-relative url with authority test uri-14.0 {uri::resolve - scheme-relative url with authority, rfc3986 4.2} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-14.4 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, FQDN} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //www.bar.com./dir/dir22?a=b&c=d#g } http://www.bar.com./dir/dir22?a=b&c=d#g test uri-14.8 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, port} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //www.bar.com:8080/dir/dir22?a=b&c=d#g } http://www.bar.com:8080/dir/dir22?a=b&c=d#g test uri-14.12 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, FQDN, port} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //www.bar.com.:8080/dir/dir22?a=b&c=d#g } http://www.bar.com.:8080/dir/dir22?a=b&c=d#g test uri-14.1 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname on local network} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //test-host } http://test-host test uri-14.2 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "9" on local network} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //9 } http://9 test uri-14.3 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "0-9" on local network} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //0-9 } http://0-9 test uri-14.5 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname on local network, FQDN} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //test-host. } http://test-host. test uri-14.6 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "9" on local network, FQDN} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //9. } http://9. test uri-14.7 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "0-9" on local network, FQDN} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //0-9. } http://0-9. test uri-14.9 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname on local network, port} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //test-host:8080 } http://test-host:8080 test uri-14.10 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "9" on local network, port} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //9:8080 } http://9:8080 test uri-14.11 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "0-9" on local network, port} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //0-9:8080 } http://0-9:8080 test uri-14.13 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname on local network, FQDN, port} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //test-host.:8080 } http://test-host.:8080 test uri-14.14 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "9" on local network, FQDN, port} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //9.:8080 } http://9.:8080 test uri-14.15 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "0-9" on local network, FQDN, port} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //0-9.:8080 } http://0-9.:8080 # ------------------------------------------------------------------------- test uri-15.0 {uri::resolve - scheme-relative url with authority, rfc3986 4.2} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.1 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname on local network} { uri::resolve http://test-host/path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.2 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "9" on local network} { uri::resolve http://9/path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.3 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "0-9" on local network} { uri::resolve http://0-9/path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.4 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, FQDN} { uri::resolve http://www.foo.com/path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.5 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname on local network, FQDN} { uri::resolve http://test-host./path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.6 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "9" on local network, FQDN} { uri::resolve http://9./path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.7 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "0-9" on local network, FQDN} { uri::resolve http://0-9./path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.8 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, port} { uri::resolve http://www.foo.com:8080/path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.9 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname on local network, port} { uri::resolve http://test-host:8080/path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.10 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "9" on local network, port} { uri::resolve http://9:8080/path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.11 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "0-9" on local network, port} { uri::resolve http://0-9:8080/path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.12 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, FQDN, port} { uri::resolve http://www.foo.com.:8080/path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.13 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname on local network, FQDN, port} { uri::resolve http://test-host.:8080/path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.14 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "9" on local network, FQDN, port} { uri::resolve http://9.:8080/path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g test uri-15.15 {uri::resolve - scheme-relative url with authority, rfc3986 4.2, valid hostname "0-9" on local network, FQDN, port} { uri::resolve http://0-9.:8080/path/path2?query=url?otherquery#f //www.bar.com/dir/dir22?a=b&c=d#g } http://www.bar.com/dir/dir22?a=b&c=d#g # ------------------------------------------------------------------------- testsuiteCleanup return # ------------------------------------------------------------------------- # Local Variables: # mode: tcl # indent-tabs-mode: nil # End: