1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
# urn.test - Copyright (C) 2001 Pat Thoyts <Pat.Thoyts@bigfoot.com>
#
# Provide a set of tests to excercise the urn-scheme package.
#
# @(#)$Id: urn.test,v 1.9 2006/10/09 21:41:42 andreas_kupries Exp $
# -------------------------------------------------------------------------
source [file join \
[file dirname [file dirname [file join [pwd] [info script]]]] \
devtools testutilities.tcl]
testsNeedTcl 8.5
testsNeedTcltest 1.0
support {
useLocal uri.tcl uri
}
testing {
useLocal urn-scheme.tcl uri::urn
}
# -------------------------------------------------------------------------
# Tests to check for valid urn sections.
test urn-1.1 {Check basic split} {
catch {uri::split urn:tcl:test} result
dictsort $result
} {nid tcl nss test scheme urn}
test urn-1.2 {Check basic join} {
catch {uri::join scheme urn nid tcl nss test} result
set result
} {urn:tcl:test}
test urn-1.3 {Split permissible NID} {
catch {uri::split urn:tcl-TCL-0123456789:test} result
dictsort $result
} {nid tcl-TCL-0123456789 nss test scheme urn}
test urn-1.4 {Join permissible NID} {
catch {uri::join scheme urn nid tcl-TCL-0123456789 nss test} result
set result
} {urn:tcl-TCL-0123456789:test}
test urn-1.5 {Split permissible NSS} {
catch {uri::split {urn:tcl:Test-0123456789()+,-.:=@;$_!*'}} result
dictsort $result
} {nid tcl nss {Test-0123456789()+,-.:=@;$_!*'} scheme urn}
test urn-1.6 {Join permissible NSS} {
catch {uri::join scheme urn nid tcl nss {Test-0123456789()+,-.:=@;$_!*'}} result
set result
} {urn:tcl:Test-0123456789()+,-.:=@;$_!*'}
# -------------------------------------------------------------------------
# Now some tests that should fail.
test urn-2.1 {NID too long} {
set nid ThisURNNIDparthastoomanycharacters
set nss test
if {[catch {uri:split urn:$nid:$nss} result]} {
set result ok
}
set result
} {ok}
test urn-2.2 {NID too long} {
set nid ThisURNNIDparthastoomanycharacters
set nss test
if {[catch {uri:join scheme urn nid $nid nss $nss} result]} {
set result ok
}
set result
} {ok}
test urn-2.3 {NID containing invalid characters} {
set nid {This-NID//notOK}
set nss test
if {[catch {uri::join scheme urn nid $nid nss $nss} result]} {
set result ok
}
set result
} {ok}
test urn-2.4 {NID containing no characters} {
set nid {}
set nss test
if {[catch {uri::join scheme urn nid $nid nss $nss} result]} {
set result ok
}
set result
} {ok}
test urn-2.5 {NID beginning with hyphen} {
set nid {-notvalid}
set nss test
if {[catch {uri::join scheme urn nid $nid nss $nss} result]} {
set result ok
}
set result
} {ok}
# Check the Namespace Specific String.
test urn-3.1 {NSS containing reserved characters} {
set nid {tcl}
set nss {%}
catch {uri::join scheme urn nid $nid nss $nss} result
set result
} {urn:tcl:%25}
test urn-3.2 {NSS containing reserved characters} {
set nid {tcl}
set nss {/?#}
catch {uri::join scheme urn nid $nid nss $nss} result
set result
} {urn:tcl:%2F%3F%23}
test urn-3.3 {NSS containing reserved characters} {
set nid {tcl}
set nss {urn-test}
catch {uri::join scheme urn nid $nid nss $nss} result
set result
} {urn:tcl:urn-test}
test urn-3.4 {NSS containing illegal characters} {
set nid {tcl}
set nss "\u00" ;# 0 is the only character explicitly denied.
if {[catch {uri::join scheme urn nid $nid nss $nss} result]} {
set result ok
}
set result
} {ok}
# -------------------------------------------------------------------------
# Quoting checks - various UTF-8 representations for 'coffee' (RFC 2324, section 3)
catch { unset data }
lappend data "coffee" "coffee"
lappend data "\x4B\x61\x66\x66\x65\x65" "Kaffee"
lappend data "q\u00e6hv\u00e6" "q%C3%A6hv%C3%A6" ;# aserbaidjani
lappend data "\u0642\u0647\u0648\u0629" "%D9%82%D9%87%D9%88%D8%A9" ;# arabic
lappend data "\u03ba\u03b1\u03c6\u03ad" "%CE%BA%CE%B1%CF%86%CE%AD" ;# greek
lappend data "\u0915\u094c\u092b\u0940" "%E0%A4%95%E0%A5%8C%E0%A4%AB%E0%A5%80" ;# hindi
# Ticket [daa83d2edf].
lappend data "\u4f60\u597d" "%E4%BD%A0%E5%A5%BD" ;# chinese 'How are you?'
set n 0
foreach {utf8 quoted} $data {
test urn-4.[incr n] [list quote utf8 string] {
list [catch {uri::urn::quote $utf8} msg] $msg
} [list 0 $quoted]
}
set n 0
foreach {utf8 quoted} $data {
test urn-5.[incr n] [list unquote utf8 string] {
list [catch {uri::urn::unquote $quoted} msg] $msg
} [list 0 $utf8]
}
# -------------------------------------------------------------------------
# Clean up the tests
unset data
testsuiteCleanup
return
# Local variables:
# mode: tcl
# indent-tabs-mode: nil
# End:
|