feat: Enhance DefaultRendererSettingsPersistence to support scoped settings for CLI and Flutter

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-03-23 19:54:22 +01:00
parent 3114700683
commit b980174905
5 changed files with 135 additions and 6 deletions
@@ -154,6 +154,70 @@ void main() {
});
});
group('DefaultRendererSettingsPersistence', () {
test('stores separate scoped settings for flutter and cli', () async {
final tempDir = await Directory.systemTemp.createTemp(
'wolf3d-renderer-config-',
);
addTearDown(() async {
if (await tempDir.exists()) {
await tempDir.delete(recursive: true);
}
});
final String path = '${tempDir.path}/settings.json';
final flutterPersistence = DefaultRendererSettingsPersistence(
filePath: path,
hostKey: rendererSettingsHostFlutter,
);
final cliPersistence = DefaultRendererSettingsPersistence(
filePath: path,
hostKey: rendererSettingsHostCli,
);
const flutterSettings = WolfRendererSettings(
mode: WolfRendererMode.hardware,
);
const cliSettings = WolfRendererSettings(mode: WolfRendererMode.sixel);
await flutterPersistence.save(flutterSettings);
await cliPersistence.save(cliSettings);
final loadedFlutter = await flutterPersistence.load();
final loadedCli = await cliPersistence.load();
expect(loadedFlutter, isNotNull);
expect(loadedCli, isNotNull);
expect(loadedFlutter!.mode, flutterSettings.mode);
expect(loadedCli!.mode, cliSettings.mode);
final String raw = await File(path).readAsString();
expect(raw, contains('"rendererSettings"'));
expect(raw, contains('"flutter"'));
expect(raw, contains('"cli"'));
});
test('does not fall back to legacy unscoped renderer payload', () async {
final tempDir = await Directory.systemTemp.createTemp(
'wolf3d-renderer-config-',
);
addTearDown(() async {
if (await tempDir.exists()) {
await tempDir.delete(recursive: true);
}
});
final String path = '${tempDir.path}/settings.json';
await File(path).writeAsString('{"mode":"hardware"}');
final persistence = DefaultRendererSettingsPersistence(
filePath: path,
hostKey: rendererSettingsHostFlutter,
);
expect(await persistence.load(), isNull);
});
});
testWidgets('Wolf3dApp forwards configured directory to no-data screen', (
tester,
) async {