diff --git a/Foundation/CPString.j b/Foundation/CPString.j index 96be2311f..5e26c0322 100644 --- a/Foundation/CPString.j +++ b/Foundation/CPString.j @@ -584,7 +584,12 @@ var CPStringHashes = new objj_dictionary(); */ - (CPArray)pathComponents { - return split('/'); + var result = split('/'); + if (result[0] === "") + result[0] = "/"; + if (result[result.length - 1] === "") + result.pop(); + return result; } /*! diff --git a/Tests/Foundation/CPStringTest.j b/Tests/Foundation/CPStringTest.j index f509e8128..1533ab0b7 100644 --- a/Tests/Foundation/CPStringTest.j +++ b/Tests/Foundation/CPStringTest.j @@ -80,4 +80,31 @@ import [self assert:[testStrings[i][0] stringByDeletingLastPathComponent] equals:testStrings[i][1]]; } +- (void)testPathComponents +{ + var testStrings = [ + ["tmp/scratch", ["tmp", "scratch"]], + ["/tmp/scratch", ["/", "tmp", "scratch"]] + ] + + for (var i = 0; i < testStrings.length; i++) { + var result = [testStrings[i][0] pathComponents]; + [self assertTrue:[result isEqualToArray:testStrings[i][1]] message:"Expected [" + testStrings[i][1] + "] was [" + result + "]"]; + } +} + +- (void)testLastPathComponent +{ + var testStrings = [ + ["/tmp/scratch.tiff", "scratch.tiff"], + ["/tmp/scratch", "scratch"], + ["/tmp/", "tmp"], + ["scratch", "scratch"], + ["/", "/"] + ]; + + for (var i = 0; i < testStrings.length; i++) + [self assert:testStrings[i][1] equals:[testStrings[i][0] lastPathComponent]]; +} + @end