Skip to content

Commit bbec7c3

Browse files
committed
Improve active target type handling in ManageSolutionController and update related tests
1 parent c61e7f2 commit bbec7c3

3 files changed

Lines changed: 46 additions & 10 deletions

File tree

src/generic/text-file.test.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -371,13 +371,16 @@ describe('TextFile', () => {
371371
testDataHandler.rmDir(unicodeDir);
372372
});
373373

374-
it('primes external stamp on first change check', async () => {
374+
it('primes external stamp when checked before load/save', async () => {
375+
fsUtils.writeTextFile(TEST_FILE, initialContent);
375376
const tf = new TextFile(TEST_FILE);
376-
tf.text = initialContent;
377-
const saveResult = await tf.save();
378-
expect(saveResult).toBe(ETextFileResult.Success);
379377

380378
expect(tf.hasExternalFileChanged()).toBe(false);
379+
380+
fsUtils.writeTextFile(TEST_FILE, `${changedContent}!`);
381+
await new Promise(resolve => setTimeout(resolve, 500));
382+
383+
expect(tf.hasExternalFileChanged()).toBe(true);
381384
});
382385

383386
it('detects external on-disk updates and then re-baselines', async () => {
@@ -389,7 +392,7 @@ describe('TextFile', () => {
389392
tf.refreshExternalFileStamp();
390393
expect(tf.hasExternalFileChanged()).toBe(false);
391394

392-
fsUtils.writeTextFile(TEST_FILE, changedContent);
395+
fsUtils.writeTextFile(TEST_FILE, `${changedContent}!`);
393396
await new Promise(resolve => setTimeout(resolve, 500));
394397

395398
expect(tf.hasExternalFileChanged()).toBe(true);

src/views/manage-solution/manage-solution-controller.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,28 @@ describe('manage-solution-controller', () => {
145145
expect(controller.activeTargetTypeName).toBe(initialName);
146146
});
147147

148+
it('should recover from persisted empty active target type using first known target', async () => {
149+
const controller = new ManageSolutionController();
150+
await controller.loadSolution('test-resources/solutions/solution-with-debuggers.csolution');
151+
152+
controller.activeTargetTypeName = '';
153+
const updated = await controller.ensureActiveTargetTypeName();
154+
155+
expect(updated).toBe(true);
156+
expect(controller.activeTargetTypeName).toBe(controller.solutionData.targets[0].name);
157+
});
158+
159+
it('should clear persisted invalid active target type when no target types are available', async () => {
160+
const controller = new ManageSolutionController();
161+
await controller.loadSolution('test-resources/solutions/solution-with-debuggers.csolution');
162+
163+
controller.activeTargetTypeName = 'invalid-target';
164+
const updated = await (controller as any).ensureActiveTargetTypeNameInKnownTargets([]);
165+
166+
expect(updated).toBe(true);
167+
expect(controller.cmsisJsonFile.activeTargetTypeName).toBeUndefined();
168+
});
169+
148170
it('should get active target set name', async () => {
149171
const controller = new ManageSolutionController();
150172
await controller.loadSolution('test-resources/solutions/solution-with-debuggers.csolution');

src/views/manage-solution/manage-solution-controller.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,12 +169,23 @@ export class ManageSolutionController {
169169

170170
private async ensureActiveTargetTypeNameInKnownTargets(knownTargetNames: string[]): Promise<boolean> {
171171
const configuredTargetTypeName = this.cmsisJsonFile.activeTargetTypeName;
172-
if (configuredTargetTypeName && !knownTargetNames.includes(configuredTargetTypeName)) {
173-
this.activeTargetTypeName = this.csolutionYml.getTargetType()?.name || '';
174-
await this.cmsisJsonFile.save();
175-
return true;
172+
const hasConfiguredTargetType = configuredTargetTypeName !== undefined;
173+
const configuredTargetInvalid = configuredTargetTypeName === ''
174+
|| (configuredTargetTypeName !== undefined && !knownTargetNames.includes(configuredTargetTypeName));
175+
176+
if (!hasConfiguredTargetType || !configuredTargetInvalid) {
177+
return false;
178+
}
179+
180+
const fallbackTargetTypeName = knownTargetNames[0];
181+
if (fallbackTargetTypeName) {
182+
this.activeTargetTypeName = fallbackTargetTypeName;
183+
} else {
184+
this.cmsisJsonFile.delete(`targetSet.${this.cmsisJsonFile.solutionDisplayName}.activeTargetType`);
176185
}
177-
return false;
186+
187+
await this.cmsisJsonFile.save();
188+
return true;
178189
}
179190

180191
/**

0 commit comments

Comments
 (0)