@@ -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