@@ -77,6 +77,7 @@ function rootItemForItem(testController: vscode.TestController, uri: vscode.Uri)
77
77
78
78
/** Compute `TestItem`s for `Test*` methods in `parent` */
79
79
async function addTestItemsForClass ( testController : vscode . TestController , parent : vscode . TestItem ) : Promise < void > {
80
+ const newIds : string [ ] = [ ] ;
80
81
// Get the symbols for the parent class
81
82
const parentSymbols = await vscode . commands . executeCommand < vscode . DocumentSymbol [ ] > (
82
83
"vscode.executeDocumentSymbolProvider" ,
@@ -98,11 +99,9 @@ async function addTestItemsForClass(testController: vscode.TestController, paren
98
99
const memberName = stripClassMemberNameQuotes ( clsMember . name ) ;
99
100
if ( clsMember . detail == "Method" && memberName . startsWith ( "Test" ) ) {
100
101
const displayName = memberName . slice ( 4 ) ;
101
- const newItem = testController . createTestItem (
102
- `${ parent . id } ${ methodIdSeparator } ${ displayName } ` ,
103
- displayName ,
104
- parent . uri
105
- ) ;
102
+ const newId = `${ parent . id } ${ methodIdSeparator } ${ displayName } ` ;
103
+ newIds . push ( newId ) ;
104
+ const newItem = testController . createTestItem ( newId , displayName , parent . uri ) ;
106
105
newItem . range = clsMember . range ;
107
106
// Always show non-inherited methods at the top
108
107
newItem . sortText = `##${ displayName } ` ;
@@ -142,18 +141,20 @@ async function addTestItemsForClass(testController: vscode.TestController, paren
142
141
) ;
143
142
if ( symbol ) {
144
143
const displayName = stripClassMemberNameQuotes ( symbol . name ) . slice ( 4 ) ;
145
- const newItem = testController . createTestItem (
146
- `${ parent . id } ${ methodIdSeparator } ${ displayName } ` ,
147
- displayName ,
148
- parent . uri
149
- ) ;
144
+ const newId = `${ parent . id } ${ methodIdSeparator } ${ displayName } ` ;
145
+ newIds . push ( newId ) ;
146
+ const newItem = testController . createTestItem ( newId , displayName , parent . uri ) ;
150
147
newItem . range = symbol . range ;
151
148
parent . children . add ( newItem ) ;
152
149
}
153
150
} ) ;
154
151
}
155
152
}
156
153
}
154
+ // Remove items for any methods that have been deleted
155
+ parent . children . forEach ( ( i ) => {
156
+ if ( ! newIds . includes ( i . id ) ) parent . children . delete ( i . id ) ;
157
+ } ) ;
157
158
}
158
159
}
159
160
@@ -1126,7 +1127,7 @@ export function setUpTestController(): vscode.Disposable[] {
1126
1127
const item = await getTestItemForClass ( testController , e . document . uri ) ;
1127
1128
if ( item ) {
1128
1129
testController . invalidateTestResults ( item ) ;
1129
- if ( item . canResolveChildren && ! item . children . size ) {
1130
+ if ( item . canResolveChildren ) {
1130
1131
// Resolve the methods
1131
1132
testController . resolveHandler ( item ) ;
1132
1133
}
0 commit comments