提交 213699e0 编写于 作者: J Johannes Rieken

debt - align path.normalize and node-path#normalize wrt to dot-segements

上级 ef91c0fb
......@@ -63,7 +63,7 @@ export function normalize(path: string, toOSPath?: boolean): string {
let parts = path.split(/[\\\/]/);
for (let i = 0, len = parts.length; i < len; i++) {
if (parts[i] === '.' && !!parts[i + 1]) {
if (parts[i] === '.' && (parts[i + 1] || parts[i - 1])) {
parts.splice(i, 1);
i -= 1;
} else if (parts[i] === '..' && !!parts[i - 1]) {
......
......@@ -68,12 +68,15 @@ suite('Paths', () => {
test('normalize', () => {
assert.equal(paths.normalize('.'), '.');
assert.equal(paths.normalize('./'), './');
assert.equal(paths.normalize('/'), '/');
assert.equal(paths.normalize('./'), './');
assert.equal(paths.normalize('./ff/./'), 'ff/');
assert.equal(paths.normalize('foo/./'), 'foo/');
// assert.equal(paths.normalize('//'), '/');
assert.equal(paths.normalize('./foo'), 'foo');
assert.equal(paths.normalize('/foo'), '/foo');
assert.equal(paths.normalize('foo/'), 'foo/');
// assert.equal(paths.normalize('foo//'), 'foo/');
assert.equal(paths.normalize('foo\\bar'), 'foo/bar');
assert.equal(paths.normalize('foo/./bar'), 'foo/bar');
assert.equal(paths.normalize('foo/xxx/./bar'), 'foo/xxx/bar');
......@@ -82,6 +85,8 @@ suite('Paths', () => {
assert.equal(paths.normalize('foo/xxx/./..'), 'foo');
assert.equal(paths.normalize('foo/xxx/..'), 'foo');
assert.equal(paths.normalize('foo/xxx/../bar'), 'foo/bar');
assert.equal(paths.normalize('foo/../../bar'), '../bar');
assert.equal(paths.normalize('foo/far/../../bar'), 'bar');
// return input if already normal
assert.equal(paths.normalize('/foo/bar.test'), '/foo/bar.test');
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册