pathutil_test.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // Copyright (c) Tailscale Inc & AUTHORS
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. package shared
  4. import (
  5. "reflect"
  6. "testing"
  7. )
  8. func TestCleanAndSplit(t *testing.T) {
  9. tests := []struct {
  10. path string
  11. want []string
  12. }{
  13. {"", []string{""}},
  14. {"/", []string{""}},
  15. {"//", []string{""}},
  16. {"a", []string{"a"}},
  17. {"/a", []string{"a"}},
  18. {"a/", []string{"a"}},
  19. {"/a/", []string{"a"}},
  20. {"a/b", []string{"a", "b"}},
  21. {"/a/b", []string{"a", "b"}},
  22. {"a/b/", []string{"a", "b"}},
  23. {"/a/b/", []string{"a", "b"}},
  24. {"/a/../b", []string{"b"}},
  25. }
  26. for _, tt := range tests {
  27. t.Run(tt.path, func(t *testing.T) {
  28. if got := CleanAndSplit(tt.path); !reflect.DeepEqual(tt.want, got) {
  29. t.Errorf("CleanAndSplit(%q) = %v; want %v", tt.path, got, tt.want)
  30. }
  31. })
  32. }
  33. }
  34. func TestJoin(t *testing.T) {
  35. tests := []struct {
  36. parts []string
  37. want string
  38. }{
  39. {[]string{}, "/"},
  40. {[]string{""}, "/"},
  41. {[]string{"a"}, "/a"},
  42. {[]string{"/a"}, "/a"},
  43. {[]string{"/a/"}, "/a"},
  44. {[]string{"/a/", "/b/"}, "/a/b"},
  45. {[]string{"/a/../b", "c"}, "/b/c"},
  46. }
  47. for _, tt := range tests {
  48. t.Run(Join(tt.parts...), func(t *testing.T) {
  49. if got := Join(tt.parts...); !reflect.DeepEqual(tt.want, got) {
  50. t.Errorf("Join(%v) = %q; want %q", tt.parts, got, tt.want)
  51. }
  52. })
  53. }
  54. }