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.
111 lines
3.7 KiB
111 lines
3.7 KiB
require "uri-test"
|
|
local URI = require "uri"
|
|
local Util = require "uri._util"
|
|
|
|
local have_isbn_module = Util.attempt_require("isbn")
|
|
|
|
module("test.urn_isbn", lunit.testcase, package.seeall)
|
|
|
|
function test_isbn ()
|
|
-- Example from RFC 2288
|
|
local u = URI:new("URN:ISBN:0-395-36341-1")
|
|
is(have_isbn_module and "urn:isbn:0-395-36341-1" or "urn:isbn:0395363411",
|
|
u:uri())
|
|
is("urn", u:scheme())
|
|
is("isbn", u:nid())
|
|
is(have_isbn_module and "0-395-36341-1" or "0395363411", u:nss())
|
|
is("0395363411", u:isbn_digits())
|
|
|
|
u = URI:new("URN:ISBN:0395363411")
|
|
is(have_isbn_module and "urn:isbn:0-395-36341-1" or "urn:isbn:0395363411",
|
|
u:uri())
|
|
is("urn", u:scheme())
|
|
is("isbn", u:nid())
|
|
is(have_isbn_module and "0-395-36341-1" or "0395363411", u:nss())
|
|
is("0395363411", u:isbn_digits())
|
|
|
|
if have_isbn_module then
|
|
local isbn = u:isbn()
|
|
assert_table(isbn)
|
|
is("0-395-36341-1", tostring(isbn))
|
|
is("0", isbn:group_code())
|
|
is("395", isbn:publisher_code())
|
|
is("978-0-395-36341-6", tostring(isbn:as_isbn13()))
|
|
end
|
|
|
|
assert_true(URI.eq("urn:isbn:088730866x", "URN:ISBN:0-88-73-08-66-X"))
|
|
end
|
|
|
|
function test_set_nss ()
|
|
local uri = assert(URI:new("urn:isbn:039-53-63411"))
|
|
is(have_isbn_module and "0-395-36341-1" or "0395363411",
|
|
uri:nss("088-7308-66x"))
|
|
is(have_isbn_module and "urn:isbn:0-88730-866-X" or "urn:isbn:088730866X",
|
|
tostring(uri))
|
|
is(have_isbn_module and "0-88730-866-X" or "088730866X", uri:nss())
|
|
end
|
|
|
|
function test_set_bad_nss ()
|
|
local uri = assert(URI:new("urn:ISBN:039-53-63411"))
|
|
assert_error("set NSS to non-string value", function () uri:nss({}) end)
|
|
assert_error("set NSS to empty", function () uri:nss("") end)
|
|
assert_error("set NSS to wrong length", function () uri:nss("123") end)
|
|
|
|
-- None of that should have had any affect
|
|
is(have_isbn_module and "urn:isbn:0-395-36341-1" or "urn:isbn:0395363411",
|
|
tostring(uri))
|
|
is(have_isbn_module and "0-395-36341-1" or "0395363411", uri:nss())
|
|
is("0395363411", uri:isbn_digits())
|
|
is("uri.urn.isbn", uri._NAME)
|
|
end
|
|
|
|
function test_set_path ()
|
|
local uri = assert(URI:new("urn:ISBN:039-53-63411"))
|
|
is(have_isbn_module and "isbn:0-395-36341-1" or "isbn:0395363411",
|
|
uri:path("ISbn:088-73-0866x"))
|
|
is(have_isbn_module and "urn:isbn:0-88730-866-X" or "urn:isbn:088730866X",
|
|
tostring(uri))
|
|
|
|
assert_error("bad path", function () uri:path("isbn:1234567") end)
|
|
is(have_isbn_module and "urn:isbn:0-88730-866-X" or "urn:isbn:088730866X",
|
|
tostring(uri))
|
|
is(have_isbn_module and "isbn:0-88730-866-X" or "isbn:088730866X",
|
|
uri:path())
|
|
end
|
|
|
|
function test_isbn_setting_digits ()
|
|
local u = assert(URI:new("URN:ISBN:0395363411"))
|
|
local old = u:isbn_digits("0-88730-866-x")
|
|
is("0395363411", old)
|
|
is("088730866X", u:isbn_digits())
|
|
is(have_isbn_module and "0-88730-866-X" or "088730866X", u:nss())
|
|
if have_isbn_module then
|
|
is("0-88730-866-X", tostring(u:isbn()))
|
|
end
|
|
end
|
|
|
|
function test_isbn_setting_object ()
|
|
if have_isbn_module then
|
|
local ISBN = require "isbn"
|
|
local u = assert(URI:new("URN:ISBN:0395363411"))
|
|
local old = u:isbn(ISBN:new("0-88730-866-x"))
|
|
assert_table(old)
|
|
is("0-395-36341-1", tostring(old))
|
|
is("088730866X", u:isbn_digits())
|
|
is("0-88730-866-X", u:nss())
|
|
local new = u:isbn()
|
|
assert_table(new)
|
|
is("0-88730-866-X", tostring(new))
|
|
end
|
|
end
|
|
|
|
function test_illegal_isbn ()
|
|
is_bad_uri("invalid characters", "urn:ISBN:abc")
|
|
if have_isbn_module then
|
|
is_bad_uri("bad checksum", "urn:isbn:0395363412")
|
|
is_bad_uri("wrong length", "urn:isbn:03953634101")
|
|
end
|
|
end
|
|
|
|
-- vi:ts=4 sw=4 expandtab
|