mirror of https://github.com/sipwise/lua-uri.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.6 KiB
138 lines
4.6 KiB
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
|