From: rentzsch Date: Sun, 16 May 2010 19:29:29 +0000 (-0500) Subject: FIX path.dirname('/tmp') => '/'. X-Git-Tag: v0.1.96~8 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=36a45c4e0def497e3d1446057c1d91680d8bb259;p=platform%2Fupstream%2Fnodejs.git FIX path.dirname('/tmp') => '/'. Previously path.dirname('/tmp') incorrectly returned '.'. Unfortunately module.js incorrectly thinks dirname('/a/b/') should yield '/a/b', so I can't strip trailing slashes yet. Once module.js is fixed, then the commented-out code should be activated and a test written for it. --- diff --git a/lib/path.js b/lib/path.js index c7bfa7e..ce21469 100644 --- a/lib/path.js +++ b/lib/path.js @@ -38,7 +38,20 @@ exports.normalize = function (path, keepBlanks) { }; exports.dirname = function (path) { - return path && path.substr(0, path.lastIndexOf("/")) || "."; + // Can't strip trailing slashes since module.js incorrectly thinks + // dirname('/a/b/') should yield '/a/b' instead of '/a'. + // if (path.length > 1 && '/' === path[path.length-1]) { + // path = path.replace(/\/+$/, ''); + // } + var lastSlash = path.lastIndexOf('/'); + switch (lastSlash) { + case -1: + return '.'; + case 0: + return '/'; + default: + return path.substring(0, lastSlash); + } }; exports.filename = function () { diff --git a/test/simple/test-path.js b/test/simple/test-path.js index 4e5a703..e64ab7c 100644 --- a/test/simple/test-path.js +++ b/test/simple/test-path.js @@ -7,6 +7,9 @@ assert.equal(path.basename(f), "test-path.js"); assert.equal(path.basename(f, ".js"), "test-path"); assert.equal(path.extname(f), ".js"); assert.equal(path.dirname(f).substr(-11), "test/simple"); +assert.equal(path.dirname("/a/b"), "/a"); +assert.equal(path.dirname("/a"), "/"); +assert.equal(path.dirname("/"), "/"); path.exists(f, function (y) { assert.equal(y, true) }); assert.equal(path.join(".", "fixtures/b", "..", "/b/c.js"), "fixtures/b/c.js");