File: path_spec.lua

package info (click to toggle)
lua-http 0.4-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 1,100 kB
  • sloc: makefile: 60; sh: 16
file content (46 lines) | stat: -rw-r--r-- 2,467 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
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)