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.
lua-uri/test/urn-isbn.lua

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