提交 3ddce413 编写于 作者: H hun1ahpu

Fix labels unit tests + root displayed as '..

上级 3d71a325
......@@ -83,19 +83,22 @@ function getPath(arg1: URI | string | IWorkspaceProvider): string {
*/
export function shorten(paths: string[]): string[] {
const ellipsis = '\u2026';
const separator = '/';
const shortenedPaths: string[] = new Array(paths.length);
paths = paths.map(path => normalize(path));
// for every path
let match = false;
for (let pathIndex = 0; pathIndex < paths.length; pathIndex++) {
const segments: string[] = paths[pathIndex].split(nativeSep);
const segments: string[] = paths[pathIndex].split(separator);
match = true;
// pick the first shortest subpath found
for (let subpathLength = 1; match && subpathLength <= segments.length; subpathLength++) {
for (let start = segments.length - subpathLength; match && start >= 0; start--) {
match = false;
const subpath = segments.slice(start, start + subpathLength).join(nativeSep);
const subpath = segments.slice(start, start + subpathLength).join(separator);
// that is unique to any other path
for (let otherPathIndex = 0; !match && otherPathIndex < paths.length; otherPathIndex++) {
......@@ -113,11 +116,11 @@ export function shorten(paths: string[]): string[] {
if (!match) {
let result = subpath;
if (start + subpathLength < segments.length) {
result = result + nativeSep + ellipsis;
result = result + separator + ellipsis;
}
if (start > 0) {
result = ellipsis + nativeSep + result;
result = ellipsis + separator + result;
}
shortenedPaths[pathIndex] = result;
......
......@@ -6,48 +6,45 @@
'use strict';
import * as assert from 'assert';
// import labels = require('vs/base/common/labels');
import labels = require('vs/base/common/labels');
suite('Labels', () => {
test('shorten', () => {
assert.ok(true);
// nothing to shorten
// assert.deepEqual(labels.shorten(['a']), ['a']);
// assert.deepEqual(labels.shorten(['a', 'b']), ['a', 'b']);
// assert.deepEqual(labels.shorten(['a', 'b', 'c']), ['a', 'b', 'c']);
// // completely different paths
// assert.deepEqual(labels.shorten(['a\\b', 'c\\d', 'e\\f']), ['…\\b', '…\\d', '…\\f']);
// // same beginning
// assert.deepEqual(labels.shorten(['a', 'a\\b']), ['a', '…\\b']);
// assert.deepEqual(labels.shorten(['a\\b', 'a\\b\\c']), ['…\\b', '…\\c']);
// assert.deepEqual(labels.shorten(['a', 'a\\b', 'a\\b\\c']), ['a', '…\\b', '…\\c']);
// assert.deepEqual(labels.shorten(['x:\\a\\b', 'x:\\a\\c']), ['…\\b', '…\\c'], 'TODO: drive letter (or schema) should be preserved');
// assert.deepEqual(labels.shorten(['\\\\a\\b', '\\\\a\\c']), ['…\\b', '…\\c'], 'TODO: root uri should be preserved');
// // same ending
// assert.deepEqual(labels.shorten(['a', 'b\\a']), ['a', 'b\\…']);
// assert.deepEqual(labels.shorten(['a\\b\\c', 'd\\b\\c']), ['a\\…', 'd\\…']);
// assert.deepEqual(labels.shorten(['a\\b\\c\\d', 'f\\b\\c\\d']), ['a\\…', 'f\\…']);
// assert.deepEqual(labels.shorten(['d\\e\\a\\b\\c', 'd\\b\\c']), ['…\\a\\…', 'd\\b\\…']);
// assert.deepEqual(labels.shorten(['a\\b\\c\\d', 'a\\f\\b\\c\\d']), ['a\\b\\…', '…\\f\\…']);
// assert.deepEqual(labels.shorten(['a\\b\\a', 'b\\b\\a']), ['a\\b\\…', 'b\\b\\…']);
// assert.deepEqual(labels.shorten(['d\\f\\a\\b\\c', 'h\\d\\b\\c']), ['…\\a\\…', 'h\\…']);
// assert.deepEqual(labels.shorten(['a\\b\\c', 'x:\\0\\a\\b\\c']), ['a\\b\\c', '…\\0\\…'], 'TODO: drive letter (or schema) should be always preserved');
// assert.deepEqual(labels.shorten(['x:\\a\\b', 'y:\\a\\b']), ['x:\\…', 'y:\\…']);
// assert.deepEqual(labels.shorten(['\\\\x\\b', '\\\\y\\b']), ['…\\x\\…', '…\\y\\…'], 'TODO: \\\\x instead of …\\x');
// // same in the middle
// assert.deepEqual(labels.shorten(['a\\b\\c', 'd\\b\\e']), ['…\\c', '…\\e']);
// // case-sensetive
// assert.deepEqual(labels.shorten(['a\\b\\c', 'd\\b\\C']), ['…\\c', '…\\C']);
// assert.deepEqual(labels.shorten(['a', 'a\\b', 'a\\b\\c', 'd\\b\\c', 'd\\b']), ['a', 'a\\b', 'a\\b\\c', 'd\\b\\c', 'd\\b']);
// assert.deepEqual(labels.shorten(['a', 'a\\b', 'b']), ['a', 'a\\b', 'b']);
// assert.deepEqual(labels.shorten(['', 'a', 'b', 'b\\c', 'a\\c']), ['', 'a', 'b', 'b\\c', 'a\\c']);
// assert.deepEqual(labels.shorten(['src\\vs\\workbench\\parts\\execution\\electron-browser', 'src\\vs\\workbench\\parts\\execution\\electron-browser\\something', 'src\\vs\\workbench\\parts\\terminal\\electron-browser']), ['…\\execution\\electron-browser', '…\\something', '…\\terminal\\…']);
assert.deepEqual(labels.shorten(['a']), ['a']);
assert.deepEqual(labels.shorten(['a', 'b']), ['a', 'b']);
assert.deepEqual(labels.shorten(['a', 'b', 'c']), ['a', 'b', 'c']);
// completely different paths
assert.deepEqual(labels.shorten(['a/b', 'c/d', 'e/f']), ['…/b', '…/d', '…/f']);
// same beginning
assert.deepEqual(labels.shorten(['a', 'a/b']), ['a', '…/b']);
assert.deepEqual(labels.shorten(['a/b', 'a/b/c']), ['…/b', '…/c']);
assert.deepEqual(labels.shorten(['a', 'a/b', 'a/b/c']), ['a', '…/b', '…/c']);
assert.deepEqual(labels.shorten(['x:/a/b', 'x:/a/c']), ['…/b', '…/c'], 'TODO: drive letter (or schema) should be preserved');
assert.deepEqual(labels.shorten(['//a/b', '//a/c']), ['…/b', '…/c'], 'TODO: root uri should be preserved');
// same ending
assert.deepEqual(labels.shorten(['a', 'b/a']), ['a', 'b/…']);
assert.deepEqual(labels.shorten(['a/b/c', 'd/b/c']), ['a/…', 'd/…']);
assert.deepEqual(labels.shorten(['a/b/c/d', 'f/b/c/d']), ['a/…', 'f/…']);
assert.deepEqual(labels.shorten(['d/e/a/b/c', 'd/b/c']), ['…/a/…', 'd/b/…']);
assert.deepEqual(labels.shorten(['a/b/c/d', 'a/f/b/c/d']), ['a/b/…', '…/f/…']);
assert.deepEqual(labels.shorten(['a/b/a', 'b/b/a']), ['a/b/…', 'b/b/…']);
assert.deepEqual(labels.shorten(['d/f/a/b/c', 'h/d/b/c']), ['…/a/…', 'h/…']);
assert.deepEqual(labels.shorten(['a/b/c', 'x:/0/a/b/c']), ['a/b/c', '…/0/…'], 'TODO: drive letter (or schema) should be always preserved');
assert.deepEqual(labels.shorten(['x:/a/b', 'y:/a/b']), ['x:/…', 'y:/…']);
assert.deepEqual(labels.shorten(['//x/b', '//y/b']), ['…/x/…', '…/y/…'], 'TODO: //x instead of …/x');
// same in the middle
assert.deepEqual(labels.shorten(['a/b/c', 'd/b/e']), ['…/c', '…/e']);
// case-sensitive
assert.deepEqual(labels.shorten(['a/b/c', 'd/b/C']), ['…/c', '…/C']);
assert.deepEqual(labels.shorten(['a', 'a/b', 'a/b/c', 'd/b/c', 'd/b']), ['a', 'a/b', 'a/b/c', 'd/b/c', 'd/b']);
assert.deepEqual(labels.shorten(['a', 'a/b', 'b']), ['a', 'a/b', 'b']);
assert.deepEqual(labels.shorten(['', 'a', 'b', 'b/c', 'a/c']), ['.', 'a', 'b', 'b/c', 'a/c']);
});
});
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册