@@ -11,6 +11,10 @@ test.use({
1111 suiteId : __filename
1212} ) ;
1313
14+ const OPTIONAL_MISSING_EXTENSIONS = new Set < string > ( [
15+ 'meta.pyrefly' ,
16+ ] ) ;
17+
1418
1519test . describe ( 'Bootstrap Extensions' , {
1620 tag : [ tags . EXTENSIONS , tags . WEB , tags . WIN , tags . WORKBENCH ] ,
@@ -111,9 +115,18 @@ async function waitForExtensions(
111115 continue ;
112116 }
113117
114- const installedVersion = installed . get ( ext . shortName ) ;
118+ // Prefer fullName (package name) but fall back to shortName
119+ const installedVersion =
120+ installed . get ( ext . fullName ) ??
121+ installed . get ( ext . shortName ) ;
122+
115123 if ( ! installedVersion ) {
116- console . log ( `❌ ${ ext . fullName } not yet installed` ) ;
124+ if ( OPTIONAL_MISSING_EXTENSIONS . has ( ext . fullName ) ) {
125+ console . log ( `⚠️ Optional bootstrap extension ${ ext . fullName } is not installed; allowing test to continue.` ) ;
126+ missing . delete ( ext . fullName ) ;
127+ } else {
128+ console . log ( `❌ ${ ext . fullName } not yet installed` ) ;
129+ }
117130 } else if ( installedVersion !== ext . version ) {
118131 console . log ( `⚠️ ${ ext . fullName } installed with version ${ installedVersion } , currently ${ ext . version } in product.json` ) ;
119132 missing . delete ( ext . fullName ) ;
@@ -139,19 +152,16 @@ async function waitForExtensions(
139152 await sleep ( 1000 ) ;
140153 const installed = await getInstalledExtensions ( extensionsPath , runDockerCommand ) ;
141154
142- // Re-evaluate each previously mismatched extension
143- for ( const ext of [ ...mismatched ] ) {
144- const installedVersion = installed . get ( ext . split ( '@' ) [ 0 ] /* if your fullName is like 'short@scope' adjust accordingly */ )
145- ?? installed . get ( extensions . find ( e => e . fullName === ext ) ?. shortName ?? '' ) ;
146-
147- // Find the expected version for this ext
148- const expected = extensions . find ( e => e . fullName === ext ) ?. version ;
155+ for ( const extFullName of [ ...mismatched ] ) {
156+ const extMeta = extensions . find ( e => e . fullName === extFullName ) ;
157+ const installedVersion =
158+ ( extMeta && ( installed . get ( extMeta . fullName ) ?? installed . get ( extMeta . shortName ) ) ) ||
159+ undefined ;
160+ const expected = extMeta ?. version ;
149161
150162 if ( installedVersion && expected && installedVersion === expected ) {
151- console . log ( `✅ Resolved: ${ ext } now matches (${ installedVersion } )` ) ;
152- mismatched . delete ( ext ) ;
153- } else {
154- // Keep it in the set; optional: log occasionally to avoid spam
163+ console . log ( `✅ Resolved: ${ extFullName } now matches (${ installedVersion } )` ) ;
164+ mismatched . delete ( extFullName ) ;
155165 }
156166 }
157167 }
0 commit comments