Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions src/solutions/files/cbuild-idx-file.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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');
Expand Down
5 changes: 3 additions & 2 deletions src/solutions/files/cbuild-idx-file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Comment thread
edriouk marked this conversation as resolved.
context.projectPath = cbuildFile.projectPath;
context.layers = this.collectLayers(cbuild);
Expand Down
Loading