@@ -39,6 +39,7 @@ import { getWorkspaceFolder } from '../utils/vscode-utils';
3939import * as fsUtils from '../utils/fs-utils' ;
4040import { ConvertRequestData , SolutionEventHub } from './solution-event-hub' ;
4141import { waitTimeout } from '../__test__/test-waits' ;
42+ import { SolutionProblemsImpl } from './solution-problems' ;
4243
4344jest . mock ( 'which' , ( ) => jest . fn ( ( cmd ) => Promise . resolve ( path . join ( 'path' , 'to' , cmd ) ) ) ) ;
4445
@@ -72,6 +73,7 @@ describe('SolutionConverter', () => {
7273 let mockCsolutionService : jest . Mocked < ReturnType < typeof csolutionServiceFactory > > ;
7374 let convertRequestData : ConvertRequestData ;
7475 let completedListener : jest . Mock ;
76+ let solutionProblems : SolutionProblemsImpl ;
7577
7678 /**
7779 * Helper to wait for N completion events from EventHub
@@ -143,9 +145,11 @@ describe('SolutionConverter', () => {
143145 cmsisToolboxManager ,
144146 compileCommandsGenerator ,
145147 ) ;
148+ solutionProblems = new SolutionProblemsImpl ( solutionManager , eventHub ) ;
146149
147150 initUtils ( mockConfigurationProvider , solutionManager ) ;
148151 converter . activate ( { subscriptions : [ ] } as unknown as ExtensionContext ) ;
152+ await solutionProblems . activate ( { subscriptions : [ ] } as unknown as ExtensionContext ) ;
149153
150154 mockCsolutionService . listMissingPacks . mockResolvedValue ( { success : true } ) ;
151155 mockCsolutionService . convertSolution . mockResolvedValue ( { success : true } ) ;
@@ -304,9 +308,6 @@ describe('SolutionConverter', () => {
304308 } ) ;
305309
306310 it ( 'get log messages and set diagnostics accordingly' , async ( ) => {
307- const mockDiagnosticsCollectionSet = jest . spyOn ( vscode . languages . createDiagnosticCollection ( ) , 'set' ) ;
308- const mockDiagnosticsCollectionClear = jest . spyOn ( vscode . languages . createDiagnosticCollection ( ) , 'clear' ) ;
309-
310311 mockCsolutionService . convertSolution . mockResolvedValue ( { success : false } ) ;
311312 mockCsolutionService . getLogMessages . mockResolvedValue ( {
312313 success : true ,
@@ -316,13 +317,10 @@ describe('SolutionConverter', () => {
316317 } ) ;
317318 await fireAndWaitForConversion ( ) ;
318319
319- expect ( mockDiagnosticsCollectionClear ) . toHaveBeenCalled ( ) ;
320- expect ( mockDiagnosticsCollectionSet ) . toHaveBeenCalledTimes ( 3 ) ;
321320 expect ( completedListener ) . toHaveBeenCalledTimes ( 1 ) ;
322321 } ) ;
323322
324323 it ( 'get cbuild west output and set diagnostics accordingly' , async ( ) => {
325- const mockDiagnosticsCollectionSet = jest . spyOn ( vscode . languages . createDiagnosticCollection ( ) , 'set' ) ;
326324 mockCsolutionService . convertSolution . mockResolvedValue ( { success : true } ) ;
327325 mockCsolutionService . getLogMessages . mockResolvedValue ( { success : true } ) ;
328326 let mockRunCbuildSetup = jest . spyOn ( compileCommandsGenerator , 'runCbuildSetup' ) . mockResolvedValue ( [ true , [
@@ -336,15 +334,22 @@ describe('SolutionConverter', () => {
336334 jest . spyOn ( vscodeUtils , 'getWorkspaceFolder' ) . mockReturnValue ( 'workspace/folder' ) ;
337335
338336 await fireAndWaitForConversion ( ) ;
337+ await waitTimeout ( ) ;
339338 expect ( mockRunCbuildSetup ) . toHaveBeenCalledTimes ( 1 ) ;
340- expect ( mockDiagnosticsCollectionSet ) . toHaveBeenCalledTimes ( 2 ) ;
341339 expect ( completedListener ) . toHaveBeenCalledTimes ( 1 ) ;
340+ expect ( completedListener ) . toHaveBeenLastCalledWith (
341+ expect . objectContaining ( {
342+ toolsOutputMessages : expect . arrayContaining ( [
343+ 'warning cbuild: missing ZEPHYR_BASE environment variable' ,
344+ 'error cbuild: exec: "west": executable file not found in $PATH' ,
345+ ] ) ,
346+ } ) ,
347+ ) ;
342348
343349 // Remove settings.json
344350 completedListener . mockClear ( ) ;
345351 const settings = path . join ( getWorkspaceFolder ( ) , '.vscode' , 'settings.json' ) ;
346352 mockRunCbuildSetup . mockClear ( ) ;
347- mockDiagnosticsCollectionSet . mockClear ( ) ;
348353 fsUtils . deleteFileIfExists ( settings ) ;
349354 await fireAndWaitForConversion ( ) ;
350355 expect ( mockRunCbuildSetup ) . toHaveBeenCalledTimes ( 1 ) ;
@@ -354,7 +359,6 @@ describe('SolutionConverter', () => {
354359 completedListener . mockClear ( ) ;
355360 mockRunCbuildSetup = jest . spyOn ( compileCommandsGenerator , 'runCbuildSetup' ) . mockResolvedValue ( [ true , [ ] ] ) ;
356361 mockRunCbuildSetup . mockClear ( ) ;
357- mockDiagnosticsCollectionSet . mockClear ( ) ;
358362 await fireAndWaitForConversion ( ) ;
359363 expect ( mockRunCbuildSetup ) . toHaveBeenCalledTimes ( 1 ) ;
360364 expect ( completedListener ) . toHaveBeenCalledTimes ( 1 ) ;
@@ -446,18 +450,4 @@ describe('SolutionConverter', () => {
446450 expect ( diagnostics ?. [ 0 ] ?. message ) . toContain ( 'retry failed' ) ;
447451 } ) ;
448452
449- it ( 'extracts warnings from cbuild2cmake and csolution tool output' , async ( ) => {
450- const mockDiagnosticsCollectionSet = jest . spyOn ( vscode . languages . createDiagnosticCollection ( ) , 'set' ) ;
451- mockCsolutionService . convertSolution . mockResolvedValue ( { success : true } ) ;
452- mockCsolutionService . getLogMessages . mockResolvedValue ( { success : true } ) ;
453- jest . spyOn ( compileCommandsGenerator , 'runCbuildSetup' ) . mockResolvedValue ( [ true , [
454- 'warning cbuild2cmake: some warning' ,
455- 'error csolution: some error' ,
456- ] ] ) ;
457-
458- await fireAndWaitForConversion ( ) ;
459-
460- // Expect two calls: one for cbuild2cmake warning, one for csolution error
461- expect ( mockDiagnosticsCollectionSet ) . toHaveBeenCalledTimes ( 2 ) ;
462- } ) ;
463453} ) ;
0 commit comments