未验证 提交 79cfca5a 编写于 作者: J John Murray 提交者: GitHub

fix #114416 LabelService.getUriLabel bad relative path if in root workspace (#114419)

* fix #114416 LabelService.getUriLabel bad relative path if in root workspace
First commit is just a new test to show the problem.
Second commit will be the fix.

* Push the fix for #114416
上级 5a25a566
......@@ -149,6 +149,8 @@ export class LabelService extends Disposable implements ILabelService {
while (relativeLabel[overlap] && relativeLabel[overlap] === baseResourceLabel[overlap]) { overlap++; }
if (!relativeLabel[overlap] || relativeLabel[overlap] === formatting.separator) {
relativeLabel = relativeLabel.substring(1 + overlap);
} else if (overlap === baseResourceLabel.length && baseResource.uri.path === '/') {
relativeLabel = relativeLabel.substring(overlap);
}
const hasMultipleRoots = this.contextService.getWorkspace().folders.length > 1;
......
......@@ -160,7 +160,7 @@ suite('URI Label', () => {
});
suite('multi-root worksapce', () => {
suite('multi-root workspace', () => {
let labelService: LabelService;
setup(() => {
......@@ -171,7 +171,7 @@ suite('multi-root worksapce', () => {
labelService = new LabelService(
TestEnvironmentService,
new TestContextService(
new Workspace('test-workspaace', [
new Workspace('test-workspace', [
new WorkspaceFolder({ uri: sources, index: 0, name: 'Sources' }, { uri: sources.toString() }),
new WorkspaceFolder({ uri: tests, index: 1, name: 'Tests' }, { uri: tests.toString() }),
new WorkspaceFolder({ uri: other, index: 2, name: resources.basename(other) }, { uri: other.toString() }),
......@@ -179,7 +179,7 @@ suite('multi-root worksapce', () => {
new TestPathService());
});
test('labels of files in multiroot workspaces are the foldername folloed by offset from the folder', () => {
test('labels of files in multiroot workspaces are the foldername followed by offset from the folder', () => {
labelService.registerFormatter({
scheme: 'file',
formatting: {
......@@ -250,3 +250,57 @@ suite('multi-root worksapce', () => {
});
});
});
suite('workspace at FSP root', () => {
let labelService: LabelService;
setup(() => {
const rootFolder = URI.parse('myscheme://myauthority/');
labelService = new LabelService(
TestEnvironmentService,
new TestContextService(
new Workspace('test-workspace', [
new WorkspaceFolder({ uri: rootFolder, index: 0, name: 'FSProotFolder' }, { uri: rootFolder.toString() }),
])),
new TestPathService());
labelService.registerFormatter({
scheme: 'myscheme',
formatting: {
label: '${scheme}://${authority}${path}',
separator: '/',
tildify: false,
normalizeDriveLetter: false,
workspaceSuffix: '',
authorityPrefix: '',
stripPathStartingSeparator: false
}
});
});
test('non-relative label', () => {
const tests = {
'myscheme://myauthority/myFile1.txt': 'myscheme://myauthority/myFile1.txt',
'myscheme://myauthority/folder/myFile2.txt': 'myscheme://myauthority/folder/myFile2.txt',
};
Object.entries(tests).forEach(([uriString, label]) => {
const generated = labelService.getUriLabel(URI.parse(uriString), { relative: false });
assert.equal(generated, label);
});
});
test('relative label', () => {
const tests = {
'myscheme://myauthority/myFile1.txt': 'myFile1.txt',
'myscheme://myauthority/folder/myFile2.txt': 'folder/myFile2.txt',
};
Object.entries(tests).forEach(([uriString, label]) => {
const generated = labelService.getUriLabel(URI.parse(uriString), { relative: true });
assert.equal(generated, label);
});
});
});
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册