File: urn.lua

package info (click to toggle)
lua-uri 0.1%2B20130926%2Bgit14fa255d-1
  • links: PTS, VCS
  • area: main
  • in suites: buster, jessie, jessie-kfreebsd, stretch
  • size: 408 kB
  • ctags: 332
  • sloc: makefile: 53
file content (137 lines) | stat: -rw-r--r-- 4,733 bytes parent folder | download | duplicates (3)
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