Skip to content

Commit 47f0cc7

Browse files
Add tests for GetNormalizedAbsolutePath. (#192)
1 parent ac3e049 commit 47f0cc7

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed

internal/tspath/path_test.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,113 @@ func TestResolvePath(t *testing.T) {
272272
assert.Equal(t, ResolvePath("a", "b", "../c"), "a/c")
273273
}
274274

275+
func TestGetNormalizedAbsolutePath(t *testing.T) {
276+
t.Parallel()
277+
278+
assert.Equal(t, GetNormalizedAbsolutePath("/", ""), "/")
279+
assert.Equal(t, GetNormalizedAbsolutePath("/.", ""), "/")
280+
assert.Equal(t, GetNormalizedAbsolutePath("/./", ""), "/")
281+
assert.Equal(t, GetNormalizedAbsolutePath("/../", ""), "/")
282+
assert.Equal(t, GetNormalizedAbsolutePath("/a", ""), "/a")
283+
assert.Equal(t, GetNormalizedAbsolutePath("/a/", ""), "/a")
284+
assert.Equal(t, GetNormalizedAbsolutePath("/a/.", ""), "/a")
285+
assert.Equal(t, GetNormalizedAbsolutePath("/a/foo.", ""), "/a/foo.")
286+
assert.Equal(t, GetNormalizedAbsolutePath("/a/./", ""), "/a")
287+
assert.Equal(t, GetNormalizedAbsolutePath("/a/./b", ""), "/a/b")
288+
assert.Equal(t, GetNormalizedAbsolutePath("/a/./b/", ""), "/a/b")
289+
assert.Equal(t, GetNormalizedAbsolutePath("/a/..", ""), "/")
290+
assert.Equal(t, GetNormalizedAbsolutePath("/a/../", ""), "/")
291+
assert.Equal(t, GetNormalizedAbsolutePath("/a/../", ""), "/")
292+
assert.Equal(t, GetNormalizedAbsolutePath("/a/../b", ""), "/b")
293+
assert.Equal(t, GetNormalizedAbsolutePath("/a/../b/", ""), "/b")
294+
assert.Equal(t, GetNormalizedAbsolutePath("/a/..", ""), "/")
295+
assert.Equal(t, GetNormalizedAbsolutePath("/a/..", "/"), "/")
296+
assert.Equal(t, GetNormalizedAbsolutePath("/a/..", "b/"), "/")
297+
assert.Equal(t, GetNormalizedAbsolutePath("/a/..", "/b"), "/")
298+
assert.Equal(t, GetNormalizedAbsolutePath("/a/.", "b"), "/a")
299+
assert.Equal(t, GetNormalizedAbsolutePath("/a/.", "."), "/a")
300+
301+
// Tests as above, but with backslashes.
302+
assert.Equal(t, GetNormalizedAbsolutePath("\\", ""), "/")
303+
assert.Equal(t, GetNormalizedAbsolutePath("\\.", ""), "/")
304+
assert.Equal(t, GetNormalizedAbsolutePath("\\.\\", ""), "/")
305+
assert.Equal(t, GetNormalizedAbsolutePath("\\..\\", ""), "/")
306+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\.\\", ""), "/a")
307+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\.\\b", ""), "/a/b")
308+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\.\\b\\", ""), "/a/b")
309+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\..", ""), "/")
310+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\..\\", ""), "/")
311+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\..\\", ""), "/")
312+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\..\\b", ""), "/b")
313+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\..\\b\\", ""), "/b")
314+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\..", ""), "/")
315+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\..", "\\"), "/")
316+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\..", "b\\"), "/")
317+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\..", "\\b"), "/")
318+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\.", "b"), "/a")
319+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\.", "."), "/a")
320+
321+
// Relative paths on an empty currentDirectory.
322+
assert.Equal(t, GetNormalizedAbsolutePath("", ""), "")
323+
assert.Equal(t, GetNormalizedAbsolutePath(".", ""), "")
324+
assert.Equal(t, GetNormalizedAbsolutePath("./", ""), "")
325+
// Strangely, these do not normalize to the empty string.
326+
assert.Equal(t, GetNormalizedAbsolutePath("..", ""), "..")
327+
assert.Equal(t, GetNormalizedAbsolutePath("../", ""), "..")
328+
329+
// Interaction between relative paths and currentDirectory.
330+
assert.Equal(t, GetNormalizedAbsolutePath("", "/home"), "/home")
331+
assert.Equal(t, GetNormalizedAbsolutePath(".", "/home"), "/home")
332+
assert.Equal(t, GetNormalizedAbsolutePath("./", "/home"), "/home")
333+
assert.Equal(t, GetNormalizedAbsolutePath("..", "/home"), "/")
334+
assert.Equal(t, GetNormalizedAbsolutePath("../", "/home"), "/")
335+
assert.Equal(t, GetNormalizedAbsolutePath("a", "b"), "b/a")
336+
assert.Equal(t, GetNormalizedAbsolutePath("a", "b/c"), "b/c/a")
337+
338+
// Base names starting or ending with a dot do not affect normalization.
339+
assert.Equal(t, GetNormalizedAbsolutePath(".a", ""), ".a")
340+
assert.Equal(t, GetNormalizedAbsolutePath("..a", ""), "..a")
341+
assert.Equal(t, GetNormalizedAbsolutePath("a.", ""), "a.")
342+
assert.Equal(t, GetNormalizedAbsolutePath("a..", ""), "a..")
343+
344+
assert.Equal(t, GetNormalizedAbsolutePath("/base/./.a", ""), "/base/.a")
345+
assert.Equal(t, GetNormalizedAbsolutePath("/base/../.a", ""), "/.a")
346+
assert.Equal(t, GetNormalizedAbsolutePath("/base/./..a", ""), "/base/..a")
347+
assert.Equal(t, GetNormalizedAbsolutePath("/base/../..a", ""), "/..a")
348+
assert.Equal(t, GetNormalizedAbsolutePath("/base/./..a/b", ""), "/base/..a/b")
349+
assert.Equal(t, GetNormalizedAbsolutePath("/base/../..a/b", ""), "/..a/b")
350+
351+
assert.Equal(t, GetNormalizedAbsolutePath("/base/./a.", ""), "/base/a.")
352+
assert.Equal(t, GetNormalizedAbsolutePath("/base/../a.", ""), "/a.")
353+
assert.Equal(t, GetNormalizedAbsolutePath("/base/./a..", ""), "/base/a..")
354+
assert.Equal(t, GetNormalizedAbsolutePath("/base/../a..", ""), "/a..")
355+
assert.Equal(t, GetNormalizedAbsolutePath("/base/./a../b", ""), "/base/a../b")
356+
assert.Equal(t, GetNormalizedAbsolutePath("/base/../a../b", ""), "/a../b")
357+
358+
// Consecutive intermediate slashes are normalized to a single slash.
359+
assert.Equal(t, GetNormalizedAbsolutePath("a//b", ""), "a/b")
360+
assert.Equal(t, GetNormalizedAbsolutePath("a///b", ""), "a/b")
361+
assert.Equal(t, GetNormalizedAbsolutePath("a/b//c", ""), "a/b/c")
362+
assert.Equal(t, GetNormalizedAbsolutePath("/a/b//c", ""), "/a/b/c")
363+
assert.Equal(t, GetNormalizedAbsolutePath("//a/b//c", ""), "//a/b/c")
364+
365+
// Backslashes are converted to slashes,
366+
// and then consecutive intermediate slashes are normalized to a single slash
367+
assert.Equal(t, GetNormalizedAbsolutePath("a\\\\b", ""), "a/b")
368+
assert.Equal(t, GetNormalizedAbsolutePath("a\\\\\\b", ""), "a/b")
369+
assert.Equal(t, GetNormalizedAbsolutePath("a\\b\\\\c", ""), "a/b/c")
370+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\b\\\\c", ""), "/a/b/c")
371+
assert.Equal(t, GetNormalizedAbsolutePath("\\\\a\\b\\\\c", ""), "//a/b/c")
372+
373+
// The same occurs for mixed slashes.
374+
assert.Equal(t, GetNormalizedAbsolutePath("a/\\b", ""), "a/b")
375+
assert.Equal(t, GetNormalizedAbsolutePath("a\\/b", ""), "a/b")
376+
assert.Equal(t, GetNormalizedAbsolutePath("a\\/\\b", ""), "a/b")
377+
assert.Equal(t, GetNormalizedAbsolutePath("a\\b//c", ""), "a/b/c")
378+
assert.Equal(t, GetNormalizedAbsolutePath("\\a\\b\\\\c", ""), "/a/b/c")
379+
assert.Equal(t, GetNormalizedAbsolutePath("\\\\a\\b\\\\c", ""), "//a/b/c")
380+
}
381+
275382
func TestGetRelativePathToDirectoryOrUrl(t *testing.T) {
276383
t.Parallel()
277384
// !!!

0 commit comments

Comments
 (0)