diff --git a/index.js b/index.js index 02c1e0b..3a7cf08 100644 --- a/index.js +++ b/index.js @@ -2,7 +2,7 @@ var path = require('path'); var clone = require('clone'); var cloneStats = require('clone-stats'); var cloneBuffer = require('./lib/cloneBuffer'); -var stripTrailingSep = require('./lib/stripTrailingSep'); +var removeTrailingSep = require('remove-trailing-separator'); var isBuffer = require('./lib/isBuffer'); var isStream = require('./lib/isStream'); var isNull = require('./lib/isNull'); @@ -192,7 +192,7 @@ Object.defineProperty(File.prototype, 'cwd', { if (!cwd || typeof cwd !== 'string') { throw new Error('cwd must be a non-empty string.'); } - this._cwd = stripTrailingSep(normalize(cwd)); + this._cwd = removeTrailingSep(normalize(cwd)); }, }); @@ -208,7 +208,7 @@ Object.defineProperty(File.prototype, 'base', { if (typeof base !== 'string' || !base) { throw new Error('base must be a non-empty string, or null/undefined.'); } - base = stripTrailingSep(normalize(base)); + base = removeTrailingSep(normalize(base)); if (base !== this._cwd) { this._base = base; } @@ -297,7 +297,7 @@ Object.defineProperty(File.prototype, 'path', { if (typeof path !== 'string') { throw new Error('path should be a string.'); } - path = stripTrailingSep(normalize(path)); + path = removeTrailingSep(normalize(path)); // Record history only when path changed if (path && path !== this.path) { @@ -316,7 +316,7 @@ Object.defineProperty(File.prototype, 'symlink', { throw new Error('symlink should be a string'); } - this._symlink = stripTrailingSep(normalize(symlink)); + this._symlink = removeTrailingSep(normalize(symlink)); }, }); diff --git a/lib/stripTrailingSep.js b/lib/stripTrailingSep.js deleted file mode 100644 index ecc3765..0000000 --- a/lib/stripTrailingSep.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = function(str) { - while (endsInSeparator(str)) { - str = str.slice(0, -1); - } - return str; -}; - -function endsInSeparator(str) { - var last = str[str.length - 1]; - return str.length > 1 && (last === '/' || last === '\\'); -} diff --git a/package.json b/package.json index 1112f8c..76e4304 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "clone-stats": "^1.0.0", "cloneable-readable": "^0.5.0", "readable-stream": "^2.1.0", + "remove-trailing-separator": "^1.0.1", "replace-ext": "^1.0.0" }, "devDependencies": { diff --git a/test/file.js b/test/file.js index 66827b1..cb09021 100644 --- a/test/file.js +++ b/test/file.js @@ -13,6 +13,8 @@ var from = miss.from; var concat = miss.concat; var isCloneable = cloneable.isCloneable; +var isWin = (process.platform === 'win32'); + describe('File', function() { describe('isVinyl()', function() { @@ -880,7 +882,7 @@ describe('File', function() { expect(file.cwd).toEqual(expected); var val2 = '\\test\\foo\\..\\foo\\'; - var expected2 = path.normalize(val2.slice(0, -1)); + var expected2 = path.normalize(isWin ? val2.slice(0, -1) : val2); file.cwd = val2; @@ -980,7 +982,7 @@ describe('File', function() { expect(file.base).toEqual(expected); var val2 = '\\test\\foo\\..\\foo\\'; - var expected2 = path.normalize(val2.slice(0, -1)); + var expected2 = path.normalize(isWin ? val2.slice(0, -1) : val2); file.base = val2; diff --git a/test/strip-trailing-sep.js b/test/strip-trailing-sep.js deleted file mode 100644 index 003a07b..0000000 --- a/test/strip-trailing-sep.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -var expect = require('expect'); - -var stripTrailingSep = require('../lib/stripTrailingSep'); - -describe('stripTrailingSep()', function() { - - it('removes trailing separator', function(done) { - expect(stripTrailingSep('foo/')).toEqual('foo'); - expect(stripTrailingSep('foo\\')).toEqual('foo'); - done(); - }); - - it('does not strip when separator is only char in the string', function(done) { - expect(stripTrailingSep('/')).toEqual('/'); - expect(stripTrailingSep('\\')).toEqual('\\'); - done(); - }); - - it('removes only the trailing separator', function(done) { - expect(stripTrailingSep('/test/foo/bar/')).toEqual('/test/foo/bar'); - expect(stripTrailingSep('\\test\\foo\\bar\\')).toEqual('\\test\\foo\\bar'); - done(); - }); - - it('removes multiple trailing separators', function(done) { - expect(stripTrailingSep('/test//')).toEqual('/test'); - expect(stripTrailingSep('\\test\\\\')).toEqual('\\test'); - done(); - }); - - it('leaves the 1st separator in a string of only separators', function(done) { - expect(stripTrailingSep('//')).toEqual('/'); - expect(stripTrailingSep('////')).toEqual('/'); - expect(stripTrailingSep('\\\\')).toEqual('\\'); - expect(stripTrailingSep('\\\\\\\\')).toEqual('\\'); - done(); - }); - - it('does not change an empty string', function(done) { - expect(stripTrailingSep('')).toEqual(''); - done(); - }); -});