forked from daurnimator/lua-http
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpath_spec.lua
More file actions
46 lines (46 loc) · 2.41 KB
/
path_spec.lua
File metadata and controls
46 lines (46 loc) · 2.41 KB
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
describe("Relative path resolution", function()
local resolve_relative_path = require "http.util".resolve_relative_path
it("should resolve .. correctly", function()
assert.same("/foo", resolve_relative_path("/", "foo"))
assert.same("/foo", resolve_relative_path("/", "./foo"))
assert.same("/foo", resolve_relative_path("/", "../foo"))
assert.same("/foo", resolve_relative_path("/", "../foo/../foo"))
assert.same("/foo", resolve_relative_path("/", "foo/bar/.."))
assert.same("/foo/", resolve_relative_path("/", "foo/bar/../"))
assert.same("/foo/", resolve_relative_path("/", "foo/bar/../"))
assert.same("/", resolve_relative_path("/", "../.."))
assert.same("/", resolve_relative_path("/", "../../"))
assert.same("/bar", resolve_relative_path("/foo/", "../bar"))
assert.same("bar", resolve_relative_path("foo/", "../bar"))
assert.same("bar/", resolve_relative_path("foo/", "../bar/"))
end)
it("should ignore .", function()
assert.same("/", resolve_relative_path("/", "."))
assert.same("/", resolve_relative_path("/", "./././."))
assert.same("/", resolve_relative_path("/", "././././"))
assert.same("/foo/bar/", resolve_relative_path("/foo/", "bar/././././"))
end)
it("should keep leading and trailing /", function()
assert.same("/foo/", resolve_relative_path("/foo/", "./"))
assert.same("foo/", resolve_relative_path("foo/", "./"))
assert.same("/foo", resolve_relative_path("/foo/", "."))
assert.same("foo", resolve_relative_path("foo/", "."))
end)
it("an absolute path as 2nd arg should be resolved", function()
assert.same("/foo", resolve_relative_path("ignored", "/foo"))
assert.same("/foo", resolve_relative_path("ignored", "/foo/./."))
assert.same("/foo", resolve_relative_path("ignored", "/foo/bar/.."))
assert.same("/foo", resolve_relative_path("ignored", "/foo/bar/qux/./../././.."))
assert.same("/foo/", resolve_relative_path("ignored", "/foo/././"))
end)
it("cannot go above root level", function()
assert.same("/bar", resolve_relative_path("/", "../bar"))
assert.same("/bar", resolve_relative_path("/foo", "../../../../bar"))
assert.same("/bar", resolve_relative_path("/foo", "./../../../../bar"))
assert.same("/", resolve_relative_path("/foo", "./../../../../"))
assert.same("/", resolve_relative_path("/", ".."))
assert.same("", resolve_relative_path("", ".."))
assert.same("", resolve_relative_path("", "./.."))
assert.same("bar", resolve_relative_path("", "../bar"))
end)
end)