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/file.lua

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