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.
148 lines
5.7 KiB
148 lines
5.7 KiB
require "uri-test"
|
|
local URI = require "uri"
|
|
local URIFile = require "uri.file"
|
|
|
|
module("test.file", lunit.testcase, package.seeall)
|
|
|
|
function test_normalize ()
|
|
test_norm("file:///foo", "file://LocalHost/foo")
|
|
test_norm("file:///", "file://localhost/")
|
|
test_norm("file:///", "file://localhost")
|
|
test_norm("file:///", "file://")
|
|
test_norm("file:///", "file:/")
|
|
test_norm("file:///foo", "file:/foo")
|
|
test_norm("file://foo/", "file://foo")
|
|
end
|
|
|
|
function test_invalid ()
|
|
is_bad_uri("just scheme", "file:")
|
|
is_bad_uri("scheme with relative path", "file:foo/bar")
|
|
end
|
|
|
|
function test_set_host ()
|
|
local uri = assert(URI:new("file:///foo"))
|
|
is("", uri:host())
|
|
is("", uri:host("LocalHost"))
|
|
is("file:///foo", tostring(uri))
|
|
is("", uri:host("host.name"))
|
|
is("file://host.name/foo", tostring(uri))
|
|
is("host.name", uri:host(""))
|
|
is("file:///foo", tostring(uri))
|
|
end
|
|
|
|
function test_set_path ()
|
|
local uri = assert(URI:new("file:///foo"))
|
|
is("/foo", uri:path())
|
|
is("/foo", uri:path(nil))
|
|
is("file:///", tostring(uri))
|
|
is("/", uri:path(""))
|
|
is("file:///", tostring(uri))
|
|
is("/", uri:path("/bar/frob"))
|
|
is("file:///bar/frob", tostring(uri))
|
|
is("/bar/frob", uri:path("/"))
|
|
is("file:///", tostring(uri))
|
|
end
|
|
|
|
function test_bad_usage ()
|
|
local uri = assert(URI:new("file:///foo"))
|
|
assert_error("nil host", function () uri:host(nil) end)
|
|
assert_error("set userinfo", function () uri:userinfo("foo") end)
|
|
assert_error("set port", function () uri:userinfo(23) end)
|
|
assert_error("set relative path", function () uri:userinfo("foo/") end)
|
|
end
|
|
|
|
local function uri_to_fs (os, uristr, expected)
|
|
local uri = assert(URI:new(uristr))
|
|
is(expected, uri:filesystem_path(os))
|
|
end
|
|
|
|
local function fs_to_uri (os, path, expected)
|
|
is(expected, tostring(URIFile.make_file_uri(path, os)))
|
|
end
|
|
|
|
function test_uri_to_fs_unix ()
|
|
uri_to_fs("unix", "file:///", "/")
|
|
uri_to_fs("unix", "file:///c:", "/c:")
|
|
uri_to_fs("unix", "file:///C:/", "/C:/")
|
|
uri_to_fs("unix", "file:///C:/Program%20Files", "/C:/Program Files")
|
|
uri_to_fs("unix", "file:///C:/Program%20Files/", "/C:/Program Files/")
|
|
uri_to_fs("unix", "file:///Program%20Files/", "/Program Files/")
|
|
end
|
|
|
|
function test_uri_to_fs_unix_bad ()
|
|
-- On Unix platforms, there's no equivalent of UNC paths.
|
|
local uri = assert(URI:new("file://laptop/My%20Documents/FileSchemeURIs.doc"))
|
|
assert_error("Unix path with host name",
|
|
function () uri:filesystem_path("unix") end)
|
|
-- Unix paths can't contain null bytes or encoded slashes.
|
|
uri = assert(URI:new("file:///frob/foo%00bar/quux"))
|
|
assert_error("Unix path with null byte",
|
|
function () uri:filesystem_path("unix") end)
|
|
uri = assert(URI:new("file:///frob/foo%2Fbar/quux"))
|
|
assert_error("Unix path with encoded slash",
|
|
function () uri:filesystem_path("unix") end)
|
|
end
|
|
|
|
function test_fs_to_uri_unix ()
|
|
fs_to_uri("unix", "/", "file:///")
|
|
fs_to_uri("unix", "//", "file:///")
|
|
fs_to_uri("unix", "///", "file:///")
|
|
fs_to_uri("unix", "/foo/bar", "file:///foo/bar")
|
|
fs_to_uri("unix", "/foo/bar/", "file:///foo/bar/")
|
|
fs_to_uri("unix", "//foo///bar//", "file:///foo/bar/")
|
|
fs_to_uri("unix", "/foo bar/%2F", "file:///foo%20bar/%252F")
|
|
end
|
|
|
|
function test_fs_to_uri_unix_bad ()
|
|
-- Relative paths can't be converted to URIs, because URIs are inherently
|
|
-- absolute.
|
|
assert_error("relative Unix path",
|
|
function () URIFile.make_file_uri("foo/bar", "unix") end)
|
|
assert_error("relative empty Unix path",
|
|
function () URIFile.make_file_uri("", "unix") end)
|
|
end
|
|
|
|
function test_uri_to_fs_win32 ()
|
|
uri_to_fs("win32", "file:///", "\\")
|
|
uri_to_fs("win32", "file:///c:", "c:\\")
|
|
uri_to_fs("win32", "file:///C:/", "C:\\")
|
|
uri_to_fs("win32", "file:///C:/Program%20Files", "C:\\Program Files")
|
|
uri_to_fs("win32", "file:///C:/Program%20Files/", "C:\\Program Files\\")
|
|
uri_to_fs("win32", "file:///Program%20Files/", "\\Program Files\\")
|
|
-- http://blogs.msdn.com/ie/archive/2006/12/06/file-uris-in-windows.aspx
|
|
uri_to_fs("win32", "file://laptop/My%20Documents/FileSchemeURIs.doc",
|
|
"\\\\laptop\\My Documents\\FileSchemeURIs.doc")
|
|
uri_to_fs("win32",
|
|
"file:///C:/Documents%20and%20Settings/davris/FileSchemeURIs.doc",
|
|
"C:\\Documents and Settings\\davris\\FileSchemeURIs.doc")
|
|
-- For backwards compatibility with deprecated way of indicating drives.
|
|
uri_to_fs("win32", "file:///c%7C", "c:\\")
|
|
uri_to_fs("win32", "file:///c%7C/", "c:\\")
|
|
uri_to_fs("win32", "file:///C%7C/foo/", "C:\\foo\\")
|
|
end
|
|
|
|
function test_fs_to_uri_win32 ()
|
|
fs_to_uri("win32", "", "file:///")
|
|
fs_to_uri("win32", "\\", "file:///")
|
|
fs_to_uri("win32", "c:", "file:///c:/")
|
|
fs_to_uri("win32", "C:\\", "file:///C:/")
|
|
fs_to_uri("win32", "C:/", "file:///C:/")
|
|
fs_to_uri("win32", "C:\\Program Files", "file:///C:/Program%20Files")
|
|
fs_to_uri("win32", "C:\\Program Files\\", "file:///C:/Program%20Files/")
|
|
fs_to_uri("win32", "C:/Program Files/", "file:///C:/Program%20Files/")
|
|
fs_to_uri("win32", "\\Program Files\\", "file:///Program%20Files/")
|
|
fs_to_uri("win32", "\\\\laptop\\My Documents\\FileSchemeURIs.doc",
|
|
"file://laptop/My%20Documents/FileSchemeURIs.doc")
|
|
fs_to_uri("win32", "c:\\foo bar\\%2F", "file:///c:/foo%20bar/%252F")
|
|
end
|
|
|
|
function test_convert_on_unknown_os ()
|
|
local uri = assert(URI:new("file:///foo"))
|
|
assert_error("filesystem_path, unknown os",
|
|
function () uri:filesystem_path("NonExistent") end)
|
|
assert_error("make_file_uri, unknown os",
|
|
function () URIFile.make_file_uri("/foo", "NonExistent") end)
|
|
end
|
|
|
|
-- vi:ts=4 sw=4 expandtab
|