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
|
require "uri-test"
local URI = require "uri"
module("test.urn", lunit.testcase, package.seeall)
function test_urn_parsing ()
local uri = assert(URI:new("urn:x-FOO-01239-:Nss"))
is("urn:x-foo-01239-:Nss", uri:uri())
is("urn", uri:scheme())
is("x-foo-01239-:Nss", uri:path())
is("x-foo-01239-", uri:nid())
is("Nss", uri:nss())
is(nil, uri:userinfo())
is(nil, uri:host())
is(nil, uri:port())
is(nil, uri:query())
is(nil, uri:fragment())
end
function test_set_nss ()
local uri = assert(URI:new("urn:x-FOO-01239-:Nss"))
is("Nss", uri:nss("FooBar"))
is("urn:x-foo-01239-:FooBar", tostring(uri))
assert_error("bad NSS, empty", function () uri:nss("") end)
assert_error("bad NSS, illegal character", function () uri:nss('x"y') end)
is("urn:x-foo-01239-:FooBar", tostring(uri))
end
function test_bad_urn_syntax ()
is_bad_uri("missing nid", "urn::bar")
is_bad_uri("hyphen at start of nid", "urn:-x-foo:bar")
is_bad_uri("plus in middle of nid", "urn:x+foo:bar")
is_bad_uri("underscore in middle of nid", "urn:x_foo:bar")
is_bad_uri("dot in middle of nid", "urn:x.foo:bar")
is_bad_uri("nid too long", "urn:x-012345678901234567890123456789x:bar")
is_bad_uri("reserved 'urn' nid", "urn:urn:bar")
is_bad_uri("missing nss", "urn:x-foo:")
is_bad_uri("bad char in nss", "urn:x-foo:bar&")
is_bad_uri("shoudn't have host part", "urn://foo.com/x-foo:bar")
is_bad_uri("shoudn't have query part", "urn:x-foo:bar?baz")
end
function test_change_nid ()
local urn = assert(URI:new("urn:x-foo:14734966"))
is("urn:x-foo:14734966", tostring(urn))
is("x-foo", urn:nid())
is("uri.urn", urn._NAME)
-- x-foo -> x-bar
is("x-foo", urn:nid("X-BAR"))
is("x-bar", urn:nid())
is("urn:x-bar:14734966", tostring(urn))
is("uri.urn", urn._NAME)
-- x-bar -> issn
is("x-bar", urn:nid("issn"))
is("issn", urn:nid())
is("urn:issn:1473-4966", tostring(urn))
is("uri.urn.issn", urn._NAME)
-- issn -> x-foo
is("issn", urn:nid("x-foo"))
is("x-foo", urn:nid())
is("urn:x-foo:1473-4966", tostring(urn))
is("uri.urn", urn._NAME)
end
function test_change_nid_bad ()
local urn = assert(URI:new("urn:x-foo:frob"))
-- Try changing the NID to something invalid
assert_error("bad NID 'urn'", function () urn:nid("urn") end)
assert_error("bad NID '-x-foo'", function () urn:nid("-x-foo") end)
assert_error("bad NID 'x+foo'", function () urn:nid("x+foo") end)
-- Change to valid NID, but where the NSS is not valid for it
assert_error("bad NSS for ISSN URN", function () urn:nid("issn") end)
-- Original URN should be left unchanged
is("urn:x-foo:frob", tostring(urn))
is("x-foo", urn:nid())
is("uri.urn", urn._NAME)
end
function test_change_path ()
local urn = assert(URI:new("urn:x-foo:foopath"))
is("x-foo:foopath", urn:path())
-- x-foo -> x-bar
is("x-foo:foopath", urn:path("X-BAR:barpath"))
is("x-bar:barpath", urn:path())
is("urn:x-bar:barpath", tostring(urn))
is("uri.urn", urn._NAME)
-- x-bar -> issn
is("x-bar:barpath", urn:path("issn:14734966"))
is("issn:1473-4966", urn:path())
is("urn:issn:1473-4966", tostring(urn))
is("uri.urn.issn", urn._NAME)
-- issn -> x-foo
is("issn:1473-4966", urn:path("x-foo:foopath2"))
is("x-foo:foopath2", urn:path())
is("urn:x-foo:foopath2", tostring(urn))
is("uri.urn", urn._NAME)
end
function test_change_path_bad ()
local urn = assert(URI:new("urn:x-foo:frob"))
-- Try changing the NID to something invalid
assert_error("bad NID 'urn'", function () urn:path("urn:frob") end)
assert_error("bad NID '-x-foo'", function () urn:path("-x-foo:frob") end)
assert_error("bad NID 'x+foo'", function () urn:path("x+foo:frob") end)
assert_error("bad NSS, empty", function () urn:path("x-foo:") end)
assert_error("bad NSS, bad char", function () urn:path('x-foo:x"y') end)
-- Change to valid NID, but where the NSS is not valid for it
assert_error("bad NSS for ISSN URN", function () urn:path("issn:frob") end)
-- Original URN should be left unchanged
is("urn:x-foo:frob", tostring(urn))
is("x-foo:frob", urn:path())
is("x-foo", urn:nid())
is("frob", urn:nss())
is("uri.urn", urn._NAME)
end
function test_set_disallowed_stuff ()
local urn = assert(URI:new("urn:x-foo:frob"))
assert_error("can't set userinfo", function () urn:userinfo("x") end)
assert_error("can't set host", function () urn:host("x") end)
assert_error("can't set port", function () urn:port(23) end)
assert_error("can't set query", function () urn:query("x") end)
end
-- vi:ts=4 sw=4 expandtab
|