From 02f9a56e540a1cd090af779f082c8bc7f983b818 Mon Sep 17 00:00:00 2001 From: Evgueni Driouk Date: Mon, 30 Mar 2026 16:31:47 +0200 Subject: [PATCH 1/2] Fix: update tree on target change --- src/solutions/files/cbuild-idx-file.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/solutions/files/cbuild-idx-file.ts b/src/solutions/files/cbuild-idx-file.ts index 6f5c53a4..edbf83bf 100644 --- a/src/solutions/files/cbuild-idx-file.ts +++ b/src/solutions/files/cbuild-idx-file.ts @@ -117,14 +117,15 @@ class CbuildIdxFileImpl extends CTreeItemYamlFile implements CbuildIdxFile { const cbuildFileName = cbuild.getValueAsString('cbuild'); const context = contextDescriptorFromString(getFileNameNoExt(cbuildFileName)); + const resolvedPath = this.resolvePath(cbuildFileName); // Reuse existing CbuildFile if available, otherwise create new let cbuildFile = this._cbuildFiles.get(context.projectName); if (!cbuildFile) { - cbuildFile = new CbuildFile(this.resolvePath(cbuildFileName)); + cbuildFile = new CbuildFile(resolvedPath); this._cbuildFiles.set(context.projectName, cbuildFile); } - const result = await cbuildFile.load(); + const result = await cbuildFile.load(resolvedPath); if (result <= ETextFileResult.Success) { context.projectPath = cbuildFile.projectPath; context.layers = this.collectLayers(cbuild); From dc8cdece4a2f7e1ff9079c3de6bd5de9d8b3e2f2 Mon Sep 17 00:00:00 2001 From: Evgueni Driouk Date: Mon, 30 Mar 2026 17:44:18 +0200 Subject: [PATCH 2/2] Add test --- src/solutions/files/cbuild-idx-file.test.ts | 39 +++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/solutions/files/cbuild-idx-file.test.ts b/src/solutions/files/cbuild-idx-file.test.ts index 0c298f8e..31389ca0 100644 --- a/src/solutions/files/cbuild-idx-file.test.ts +++ b/src/solutions/files/cbuild-idx-file.test.ts @@ -20,6 +20,7 @@ import path from 'node:path'; import * as fsUtils from '../../utils/fs-utils'; import { CbuildIdxFile } from './cbuild-idx-file'; import { ETextFileResult } from '../../generic/text-file'; +import { getFileNameNoExt } from '../../utils/path-utils'; describe('CbuildIdxFile', () => { const testDataHandler = new TestDataHandler(); @@ -102,10 +103,48 @@ describe('CbuildIdxFile', () => { expect(loadResult).toEqual(ETextFileResult.Success); expect(idxFile.cbuildLoadResult).toEqual(ETextFileResult.Success); expect(idxFile.activeContexts.length).toEqual(2); + }); + + it('test load modified cbuild file with another context', async () => { + const solutionDir = path.join(tmpSolutionDir, 'USBD'); + let fileName = path.join(solutionDir, 'USB_Device.cbuild-idx.yml'); + const idxFile = new CbuildIdxFile(); + + let loadResult = await idxFile.load(fileName); + expect(loadResult).toEqual(ETextFileResult.Success); + expect(idxFile.cbuildLoadResult).toEqual(ETextFileResult.Success); + expect(idxFile.activeContexts.length).toEqual(2); + expect(idxFile.cbuildFiles.size).toEqual(2); + let cbuild = idxFile.cbuildFiles.get('HID'); + expect(cbuild).toBeDefined(); + let baseName = getFileNameNoExt(cbuild?.fileName); + expect(baseName).toEqual('HID.Release+B-U585I-IOT02A'); + const cbuildItem = idxFile.topItem?.getChild('cbuilds')?.getChildByValue('cbuild', 'HID/HID.Release+B-U585I-IOT02A.cbuild.yml'); + expect(cbuildItem).toBeDefined(); + let value = cbuildItem?.getValue('cbuild'); + cbuildItem?.setValue('cbuild', value?.replace('.Release+B-U585I-IOT02A', '.Debug+B-U585I-IOT02A')); + value = cbuildItem?.getValue('cbuild'); + cbuildItem?.setValue('configuration', value?.replace('.Release+B-U585I-IOT02A', '.Debug+B-U585I-IOT02A')); + + // save under another name to avoid interfering with other tests + fileName = fileName.replace('USB_Device.cbuild-idx.yml', 'USB_Device1.cbuild-idx.yml'); + loadResult = await idxFile.save(fileName); + expect(loadResult).toEqual(ETextFileResult.Success); + // load again: should be changed because cbuild file is different + loadResult = await idxFile.load(); + expect(loadResult).toEqual(ETextFileResult.Success); + expect(idxFile.cbuildLoadResult).toEqual(ETextFileResult.Success); + expect(idxFile.activeContexts.length).toEqual(2); + + cbuild = idxFile.cbuildFiles.get('HID'); + expect(cbuild).toBeDefined(); + baseName = getFileNameNoExt(cbuild?.fileName); + expect(baseName).toEqual('HID.Debug+B-U585I-IOT02A'); }); + it('test load non-existing cbuild file', async () => { const solutionDir = path.join(tmpSolutionDir, 'USBD'); const fileName = path.join(solutionDir, 'USB_Device.cbuild-idx.yml');