Skip to content

Commit 58c32ed

Browse files
authored
Update Test Explorer when test classes are renamed (#1332)
1 parent 836bc7a commit 58c32ed

File tree

1 file changed

+38
-28
lines changed

1 file changed

+38
-28
lines changed

src/commands/unitTest.ts

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,6 +1026,38 @@ export function setUpTestController(): vscode.Disposable[] {
10261026
);
10271027
}
10281028

1029+
/** Delete the test item for `uri`. Returns `true` if an item was deleted. */
1030+
const deleteItemForUri = async (uri: vscode.Uri): Promise<boolean> => {
1031+
let result = false;
1032+
// If a TestItem was deleted, remove it from the controller
1033+
if (uri.path.toLowerCase().endsWith(".cls")) {
1034+
const item = await getTestItemForClass(testController, uri);
1035+
if (item) {
1036+
const rootItem = rootItemForItem(testController, uri);
1037+
if (rootItem) {
1038+
// Remove from our cache of classes
1039+
const classes = classesForRoot.get(rootItem);
1040+
if (classes) {
1041+
let cls: string;
1042+
for (const element of classes) {
1043+
if (element[1].id == item.id) {
1044+
cls = element[0];
1045+
break;
1046+
}
1047+
}
1048+
if (cls) {
1049+
classes.delete(cls);
1050+
classesForRoot.set(rootItem, classes);
1051+
}
1052+
}
1053+
}
1054+
item.parent.children.delete(uri.toString());
1055+
result = true;
1056+
}
1057+
}
1058+
return result;
1059+
};
1060+
10291061
// Register disposables
10301062
return [
10311063
testController,
@@ -1098,35 +1130,13 @@ export function setUpTestController(): vscode.Disposable[] {
10981130
}
10991131
}
11001132
}),
1101-
vscode.workspace.onDidDeleteFiles((e) =>
1102-
e.files.forEach(async (uri) => {
1103-
// If a TestItem was deleted, remove it from the controller
1104-
if (uri.path.toLowerCase().endsWith(".cls")) {
1105-
const item = await getTestItemForClass(testController, uri);
1106-
if (item) {
1107-
const rootItem = rootItemForItem(testController, uri);
1108-
if (rootItem) {
1109-
// Remove from our cache of classes
1110-
const classes = classesForRoot.get(rootItem);
1111-
if (classes) {
1112-
let cls: string;
1113-
for (const element of classes) {
1114-
if (element[1].id == item.id) {
1115-
cls = element[0];
1116-
break;
1117-
}
1118-
}
1119-
if (cls) {
1120-
classes.delete(cls);
1121-
classesForRoot.set(rootItem, classes);
1122-
}
1123-
}
1124-
}
1125-
item.parent.children.delete(uri.toString());
1126-
}
1127-
}
1133+
vscode.workspace.onDidDeleteFiles((e) => e.files.forEach(deleteItemForUri)),
1134+
vscode.workspace.onDidCreateFiles((e) => e.files.forEach((uri) => addItemForClassUri(testController, uri))),
1135+
vscode.workspace.onDidRenameFiles((e) =>
1136+
e.files.forEach(async (file) => {
1137+
// If the oldUri was a test class, attempt to create a new item for it
1138+
if (await deleteItemForUri(file.oldUri)) addItemForClassUri(testController, file.newUri);
11281139
})
11291140
),
1130-
vscode.workspace.onDidCreateFiles((e) => e.files.forEach((uri) => addItemForClassUri(testController, uri))),
11311141
];
11321142
}

0 commit comments

Comments
 (0)