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.
126 lines
4.3 KiB
126 lines
4.3 KiB
require "uri-test"
|
|
local URI = require "uri"
|
|
local Util = require "uri._util"
|
|
|
|
local Filter = Util.attempt_require("datafilter")
|
|
|
|
module("test.data", lunit.testcase, package.seeall)
|
|
|
|
function test_data_uri_encoded ()
|
|
local uri = assert(URI:new("data:,A%20brief%20note"))
|
|
is("uri.data", uri._NAME)
|
|
is(",A%20brief%20note", uri:path())
|
|
is("data", uri:scheme())
|
|
|
|
is("text/plain;charset=US-ASCII", uri:data_media_type())
|
|
is("A brief note", uri:data_bytes())
|
|
|
|
local old = uri:data_bytes("F\229r-i-k\229l er tingen!")
|
|
is("A brief note", old)
|
|
is("data:,F%E5r-i-k%E5l%20er%20tingen!", tostring(uri))
|
|
|
|
old = uri:data_media_type("text/plain;charset=iso-8859-1")
|
|
is("text/plain;charset=US-ASCII", old)
|
|
is("data:text/plain;charset=iso-8859-1,F%E5r-i-k%E5l%20er%20tingen!",
|
|
tostring(uri))
|
|
end
|
|
|
|
function test_data_big_base64_chunk ()
|
|
local imgdata = "R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAwAAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFzByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSpa/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJlZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uisF81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PHhhx4dbgYKAAA7"
|
|
local uri = assert(URI:new("data:image/gif;base64," .. imgdata))
|
|
is("image/gif", uri:data_media_type())
|
|
|
|
if Filter then
|
|
local gotdata = uri:data_bytes()
|
|
is(273, gotdata:len())
|
|
is(imgdata, Filter.base64_encode(gotdata))
|
|
end
|
|
end
|
|
|
|
function test_data_containing_commas ()
|
|
local uri = assert(URI:new("data:application/vnd-xxx-query,select_vcount,fcol_from_fieldtable/local"))
|
|
is("application/vnd-xxx-query", uri:data_media_type())
|
|
is("select_vcount,fcol_from_fieldtable/local", uri:data_bytes())
|
|
uri:data_bytes("")
|
|
is("data:application/vnd-xxx-query,", tostring(uri))
|
|
|
|
uri:data_bytes("a,b")
|
|
uri:data_media_type(nil)
|
|
is("data:,a,b", tostring(uri))
|
|
|
|
is("a,b", uri:data_bytes(nil))
|
|
is("", uri:data_bytes())
|
|
end
|
|
|
|
function test_automatic_selection_of_uri_or_base64_encoding ()
|
|
local uri = assert(URI:new("data:,"))
|
|
uri:data_bytes("")
|
|
is("data:,", tostring(uri))
|
|
|
|
uri:data_bytes(">")
|
|
is("data:,%3E", tostring(uri))
|
|
is(">", uri:data_bytes())
|
|
|
|
uri:data_bytes(">>>>>")
|
|
is("data:,%3E%3E%3E%3E%3E", tostring(uri))
|
|
|
|
if Filter then
|
|
uri:data_bytes(">>>>>>")
|
|
is("data:;base64,Pj4+Pj4+", tostring(uri))
|
|
|
|
uri:data_media_type("text/plain;foo=bar")
|
|
is("data:text/plain;foo=bar;base64,Pj4+Pj4+", tostring(uri))
|
|
|
|
uri:data_media_type("foo")
|
|
is("data:foo;base64,Pj4+Pj4+", tostring(uri))
|
|
|
|
uri:data_bytes((">"):rep(3000))
|
|
is("data:foo;base64," .. ("Pj4+"):rep(1000), tostring(uri))
|
|
is((">"):rep(3000), uri:data_bytes())
|
|
else
|
|
uri:data_bytes(">>>>>>")
|
|
is("data:,%3E%3E%3E%3E%3E%3E", tostring(uri))
|
|
uri:data_media_type("foo")
|
|
is("data:foo,%3E%3E%3E%3E%3E%3E", tostring(uri))
|
|
end
|
|
|
|
uri:data_media_type(nil)
|
|
uri:data_bytes(nil)
|
|
is("data:,", tostring(uri))
|
|
end
|
|
|
|
function test_bad_uri ()
|
|
is_bad_uri("missing comma", "data:foo")
|
|
is_bad_uri("no path at all", "data:")
|
|
is_bad_uri("has host", "data://host/,")
|
|
end
|
|
|
|
function test_set_path ()
|
|
local uri = assert(URI:new("data:image/gif,foobar"))
|
|
is("image/gif,foobar", uri:path("image/jpeg;foo=bar,x y,?"))
|
|
is("image/jpeg;foo=bar,x%20y,%3F", uri:path(",blah"))
|
|
is(",blah", uri:path(","))
|
|
is(",", uri:path())
|
|
is("data:,", tostring(uri))
|
|
end
|
|
|
|
function test_set_path_bad ()
|
|
local uri = assert(URI:new("data:image/gif,foobar"))
|
|
assert_error("no path", function () uri:path(nil) end)
|
|
assert_error("empty path", function () uri:path("") end)
|
|
assert_error("no comma", function () uri:path("foo;bar") end)
|
|
assert_error("bad base64 encoding", function () uri:path(";base64,x_0") end)
|
|
is("image/gif,foobar", uri:path())
|
|
is("data:image/gif,foobar", tostring(uri))
|
|
end
|
|
|
|
function test_set_disallowed_stuff ()
|
|
local uri = assert(URI:new("data:,"))
|
|
assert_error("can't set userinfo", function () uri:userinfo("x") end)
|
|
assert_error("can't set host", function () uri:host("x") end)
|
|
assert_error("can't set port", function () uri:port(23) end)
|
|
is("data:,", tostring(uri))
|
|
end
|
|
|
|
-- vi:ts=4 sw=4 expandtab
|