提交 49eb0959 编写于 作者: B Benjamin Pasero

add test and fix issue with swapping folders

上级 a0de412c
......@@ -59,6 +59,9 @@ class ExtHostWorkspaceImpl extends Workspace {
newWorkspaceFolders.push(...folders.map(({ uri, name, index }) => ({ uri: URI.revive(uri), name, index })));
}
// make sure to restore sort order based on index
newWorkspaceFolders.sort((f1, f2) => f1.index < f2.index ? -1 : 1);
const workspace = new ExtHostWorkspaceImpl(id, name, newWorkspaceFolders);
const oldRoots = oldWorkspace ? oldWorkspace.workspaceFolders.sort(ExtHostWorkspaceImpl.compareWorkspaceFolderByUri) : [];
......@@ -73,7 +76,11 @@ class ExtHostWorkspaceImpl extends Workspace {
return isFolderEqual(a.uri, b.uri) ? 0 : compare(a.uri.toString(), b.uri.toString());
}
static compareWorkspaceFolderByUriAndName(a: vscode.WorkspaceFolder, b: vscode.WorkspaceFolder): number {
static compareWorkspaceFolderByUriAndNameAndIndex(a: vscode.WorkspaceFolder, b: vscode.WorkspaceFolder): number {
if (a.index !== b.index) {
return a.index < b.index ? -1 : 1;
}
return isFolderEqual(a.uri, b.uri) ? compare(a.name, b.name) : compare(a.uri.toString(), b.uri.toString());
}
......@@ -175,7 +182,7 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape {
newWorkspaceFolders.splice(index, deleteCount, ...validatedDistinctWorkspaceFoldersToAdd.map((f, index) => ({ uri: f.uri, name: f.name || basenameOrAuthority(f.uri), index })));
const oldRoots = currentWorkspaceFolders.sort(ExtHostWorkspaceImpl.compareWorkspaceFolderByUri);
const newRoots = newWorkspaceFolders.sort(ExtHostWorkspaceImpl.compareWorkspaceFolderByUri);
const { added, removed } = delta(oldRoots, newRoots, ExtHostWorkspaceImpl.compareWorkspaceFolderByUriAndName);
const { added, removed } = delta(oldRoots, newRoots, ExtHostWorkspaceImpl.compareWorkspaceFolderByUriAndNameAndIndex);
if (added.length === 0 && removed.length === 0) {
return false; // nothing actually changed
}
......
......@@ -373,6 +373,8 @@ suite('ExtHostWorkspace', function () {
assert.equal(ws.workspace.folders[1].uri.toString(), URI.parse('foo:bar1').toString());
assert.equal(ws.workspace.folders[0].name, 'renamed 1');
assert.equal(ws.workspace.folders[1].name, 'renamed 2');
assert.equal(ws.getWorkspaceFolders()[0].name, 'renamed 1');
assert.equal(ws.getWorkspaceFolders()[1].name, 'renamed 2');
gotEvent = false;
sub = ws.onDidChangeWorkspace(e => {
......@@ -389,6 +391,10 @@ suite('ExtHostWorkspace', function () {
sub.dispose();
assert.equal(ws.getWorkspaceFolders()[0], firstAddedFolder); // verify object is still live
assert.equal(ws.getWorkspaceFolders()[1], secondAddedFolder); // verify object is still live
assert.equal(ws.workspace.folders[0].name, 'renamed 1');
assert.equal(ws.workspace.folders[1].name, 'renamed 2');
assert.equal(ws.getWorkspaceFolders()[0].name, 'renamed 1');
assert.equal(ws.getWorkspaceFolders()[1].name, 'renamed 2');
//
// Add and remove folders
......@@ -422,6 +428,36 @@ suite('ExtHostWorkspace', function () {
assert.equal(ws.getWorkspaceFolders()[0], fourthAddedFolder); // verify object is still live
assert.equal(ws.getWorkspaceFolders()[1], fifthAddedFolder); // verify object is still live
//
// Swap folders
//
assert.equal(true, ws.updateWorkspaceFolders('ext', 0, 2, aWorkspaceFolderData(URI.parse('foo:bar4'), 0), aWorkspaceFolderData(URI.parse('foo:bar3'), 1)));
assert.equal(2, ws.workspace.folders.length);
assert.equal(ws.workspace.folders[0].uri.toString(), URI.parse('foo:bar4').toString());
assert.equal(ws.workspace.folders[1].uri.toString(), URI.parse('foo:bar3').toString());
assert.equal(ws.getWorkspaceFolders()[0], fifthAddedFolder); // verify object is still live
assert.equal(ws.getWorkspaceFolders()[1], fourthAddedFolder); // verify object is still live
gotEvent = false;
sub = ws.onDidChangeWorkspace(e => {
try {
assert.equal(e.added.length, 0);
assert.equal(e.removed.length, 0);
gotEvent = true;
} catch (error) {
finish(error);
}
});
ws.$acceptWorkspaceData({ id: 'foo', name: 'Test', folders: [aWorkspaceFolderData(URI.parse('foo:bar4'), 0), aWorkspaceFolderData(URI.parse('foo:bar3'), 1)] }); // simulate acknowledgement from main side
assert.equal(gotEvent, true);
sub.dispose();
assert.equal(ws.getWorkspaceFolders()[0], fifthAddedFolder); // verify object is still live
assert.equal(ws.getWorkspaceFolders()[1], fourthAddedFolder); // verify object is still live
assert.equal(fifthAddedFolder.index, 0);
assert.equal(fourthAddedFolder.index, 1);
finish();
});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册