diff --git a/AppKit/CPImage.j b/AppKit/CPImage.j index fec6095..f2b2cf0 100644 --- a/AppKit/CPImage.j +++ b/AppKit/CPImage.j @@ -42,7 +42,7 @@ CPImageDidLoadNotification = @"CPImageDidLoadNotification"; - (CPString)pathForResource:(CPString)aFilename { - return [self bundlePath] + "Resources/" + aFilename; + return [self bundlePath] + "/Resources/" + aFilename; } @end diff --git a/Foundation/CPBundle.j b/Foundation/CPBundle.j index 66b20a9..993ec9a 100644 --- a/Foundation/CPBundle.j +++ b/Foundation/CPBundle.j @@ -61,7 +61,7 @@ - (CPString)resourcePath { - return [self bundlePath] + "Resources/"; + return [self bundlePath] + "/Resources"; } - (Class)principalClass diff --git a/Foundation/CPString.j b/Foundation/CPString.j index 8929294..974aba1 100644 --- a/Foundation/CPString.j +++ b/Foundation/CPString.j @@ -595,13 +595,17 @@ var CPStringHashes = new objj_dictionary(); } /*! - Until this is corrected - @ignore + Deletes the last path component of a string. + This method assumes that the string's content is a '/' + separated file system path. */ - (CPString)stringByDeletingLastPathComponent { - // FIXME: this is wrong: a/a/ returns a/a/. - return substr(0, lastIndexOf('/') + 1); + var newString = substr(0, lastIndexOf('/', length - 2)); + if ( newString === '' && charAt(0) == '/') + return '/'; + + return newString; } - (CPString)stringByStandardizingPath diff --git a/Tests/Foundation/CPStringTest.j b/Tests/Foundation/CPStringTest.j index ec4c3e7..9dc6e93 100644 --- a/Tests/Foundation/CPStringTest.j +++ b/Tests/Foundation/CPStringTest.j @@ -56,9 +56,22 @@ import ]; for (var i = 0; i < testStrings.length; i++) - [self assert:[testStrings[i][0] capitalizedString] equals:testStrings[i][1]]; + [self assert:[testStrings[i][0] capitalizedString] equals:testStrings[i][1]]; } +- (void)testStringByDeletingLastPathComponent +{ + var testStrings = [ + ["/tmp/scratch.tiff", "/tmp"], + ["/tmp/lock/", "/tmp"], + ["/tmp/", "/"], + ["/tmp", "/"], + ["/", "/"], + ["scratch.tiff", ""] + ]; + for (var i = 0; i < testStrings.length; i++) + [self assert:[testStrings[i][0] stringByDeletingLastPathComponent] equals:testStrings[i][1]]; +} @end