]> Cypherpunks repositories - gostls13.git/commitdiff
fumbly fingers + non-working ^C
authorRuss Cox <rsc@golang.org>
Wed, 8 Apr 2009 04:53:39 +0000 (21:53 -0700)
committerRuss Cox <rsc@golang.org>
Wed, 8 Apr 2009 04:53:39 +0000 (21:53 -0700)
submitted CL without applying edits.

make changes from CL 27142 review

R=r
DELTA=26  (17 added, 3 deleted, 6 changed)
OCL=27155
CL=27199

src/lib/path.go
src/lib/path_test.go

index fdfcd4bfdfbceb9b578377c7d2fff5b295a3e195..a7e2c26c3e7381ada46964075cb8c00ac59bb168 100644 (file)
@@ -12,9 +12,9 @@ import "io"
 // by purely lexical processing.  It applies the following rules
 // iteratively until no further processing can be done:
 //
-//     1. Replace multiple slashes by a single slash.
+//     1. Replace multiple slashes with a single slash.
 //     2. Eliminate each . path name element (the current directory).
-//     3. Eliminate each .. path name element (the parent directory)
+//     3. Eliminate each inner .. path name element (the parent directory)
 //        along with the non-.. element that precedes it.
 //     4. Eliminate .. elements that begin a rooted path:
 //        that is, replace "/.." by "/" at the beginning of a path.
@@ -114,13 +114,10 @@ func Split(path string) (dir, file string) {
 // Join joins dir and file into a single path, adding a separating
 // slash if necessary.  If dir is empty, it returns file.
 func Join(dir, file string) string {
-       switch {
-       case dir == "":
+       if dir == "" {
                return file;
-       case dir[len(dir)-1] == '/':
-               return dir + file;
        }
-       return dir + "/" + file;
+       return Clean(dir + "/" + file);
 }
 
 // Ext returns the file name extension used by path.
index 067b1d068c9ab73837c96735b2108de85a4238e5..1238ac1cd28bb4b55347a5924b80eff325560186 100644 (file)
@@ -97,12 +97,20 @@ type JoinTest struct {
 
 var jointests = []JoinTest {
        JoinTest{"a", "b", "a/b"},
-       JoinTest{"a", "", "a/"},
+       JoinTest{"a", "", "a"},
        JoinTest{"", "b", "b"},
        JoinTest{"/", "a", "/a"},
        JoinTest{"/", "", "/"},
        JoinTest{"a/", "b", "a/b"},
-       JoinTest{"a/", "", "a/"},
+       JoinTest{"a/", "", "a"},
+}
+
+func TestJoin(t *testing.T) {
+       for i, test := range jointests {
+               if p := Join(test.dir, test.file); p != test.path {
+                       t.Errorf("Join(%q, %q) = %q, want %q", test.dir, test.file, p, test.path);
+               }
+       }
 }
 
 type ExtTest struct {
@@ -117,3 +125,12 @@ var exttests = []ExtTest {
        ExtTest{"a.dir/b.go", ".go"},
        ExtTest{"a.dir/", ""},
 }
+
+func TestExt(t *testing.T) {
+       for i, test := range exttests {
+               if x := Ext(test.path); x != test.ext {
+                       t.Errorf("Ext(%q) = %q, want %q", test.path, x, test.ext);
+               }
+       }
+}
+