// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package path import ( "path"; "testing" ) type CleanTest struct { path, clean string } var cleantests = []CleanTest { // Already clean CleanTest{"", "."}, CleanTest{"abc", "abc"}, CleanTest{"abc/def", "abc/def"}, CleanTest{"a/b/c", "a/b/c"}, CleanTest{".", "."}, CleanTest{"..", ".."}, CleanTest{"../..", "../.."}, CleanTest{"../../abc", "../../abc"}, CleanTest{"/abc", "/abc"}, CleanTest{"/", "/"}, // Remove trailing slash CleanTest{"abc/", "abc"}, CleanTest{"abc/def/", "abc/def"}, CleanTest{"a/b/c/", "a/b/c"}, CleanTest{"./", "."}, CleanTest{"../", ".."}, CleanTest{"../../", "../.."}, CleanTest{"/abc/", "/abc"}, // Remove doubled slash CleanTest{"abc//def//ghi", "abc/def/ghi"}, CleanTest{"//abc", "/abc"}, CleanTest{"///abc", "/abc"}, CleanTest{"//abc//", "/abc"}, CleanTest{"abc//", "abc"}, // Remove . elements CleanTest{"abc/./def", "abc/def"}, CleanTest{"/./abc/def", "/abc/def"}, CleanTest{"abc/.", "abc"}, // Remove .. elements CleanTest{"abc/def/ghi/../jkl", "abc/def/jkl"}, CleanTest{"abc/def/../ghi/../jkl", "abc/jkl"}, CleanTest{"abc/def/..", "abc"}, CleanTest{"abc/def/../..", "."}, CleanTest{"/abc/def/../..", "/"}, CleanTest{"abc/def/../../..", ".."}, CleanTest{"/abc/def/../../..", "/"}, CleanTest{"abc/def/../../../ghi/jkl/../../../mno", "../../mno"}, // Combinations CleanTest{"abc/./../def", "def"}, CleanTest{"abc//./../def", "def"}, CleanTest{"abc/../../././../def", "../../def"}, } func TestClean(t *testing.T) { for i, test := range cleantests { if s := Clean(test.path); s != test.clean { t.Errorf("Clean(%q) = %q, want %q", test.path, s, test.clean); } } } type SplitTest struct { path, dir, file string } var splittests = []SplitTest { SplitTest{"a/b", "a/", "b"}, SplitTest{"a/b/", "a/b/", ""}, SplitTest{"a/", "a/", ""}, SplitTest{"a", "", "a"}, SplitTest{"/", "/", ""}, } func TestSplit(t *testing.T) { for i, test := range splittests { if d, f := Split(test.path); d != test.dir || f != test.file { t.Errorf("Split(%q) = %q, %q, want %q, %q", test.path, d, f, test.dir, test.file); } } } type JoinTest struct { dir, file, path string } var jointests = []JoinTest { JoinTest{"a", "b", "a/b"}, JoinTest{"a", "", "a/"}, JoinTest{"", "b", "b"}, JoinTest{"/", "a", "/a"}, JoinTest{"/", "", "/"}, JoinTest{"a/", "b", "a/b"}, JoinTest{"a/", "", "a/"}, } type ExtTest struct { path, ext string } var exttests = []ExtTest { ExtTest{"path.go", ".go"}, ExtTest{"path.pb.go", ".go"}, ExtTest{"path", ""}, ExtTest{"a.dir/b", ""}, ExtTest{"a.dir/b.go", ".go"}, ExtTest{"a.dir/", ""}, }