From 57bbf91245d7de3a274e353018c34177186fbab4 Mon Sep 17 00:00:00 2001 From: Amit Haridas Date: Tue, 30 Jun 2026 23:21:34 +0530 Subject: [PATCH] feat(monospace): add settings schema + safe defaults getDefaults(), getActiveMonoFont(), isLigaturesEnabled() with TDD. --- src/main/settings/monospaceSettings.js | 21 +++++++++++++++++++++ tests/monospace-settings.test.js | 22 ++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/main/settings/monospaceSettings.js create mode 100644 tests/monospace-settings.test.js diff --git a/src/main/settings/monospaceSettings.js b/src/main/settings/monospaceSettings.js new file mode 100644 index 0000000..8362f19 --- /dev/null +++ b/src/main/settings/monospaceSettings.js @@ -0,0 +1,21 @@ +'use strict'; + +const FAMILY_BY_KEY = { + 'jetbrains-mono': 'JetBrains Mono', + 'fira-code': 'Fira Code', +}; + +function getDefaults() { + return Object.freeze({ monospaceFont: 'jetbrains-mono', monospaceLigatures: false }); +} + +function getActiveMonoFont(settings) { + const key = settings && settings.monospaceFont; + return FAMILY_BY_KEY[key] || 'JetBrains Mono'; +} + +function isLigaturesEnabled(settings) { + return Boolean(settings && settings.monospaceLigatures === true); +} + +module.exports = { getDefaults, getActiveMonoFont, isLigaturesEnabled, FAMILY_BY_KEY }; diff --git a/tests/monospace-settings.test.js b/tests/monospace-settings.test.js new file mode 100644 index 0000000..489694b --- /dev/null +++ b/tests/monospace-settings.test.js @@ -0,0 +1,22 @@ +const { getDefaults, getActiveMonoFont, isLigaturesEnabled } = require('../src/main/settings/monospaceSettings'); + +describe('monospaceSettings', () => { + test('getDefaults returns sane defaults', () => { + const d = getDefaults(); + expect(d.monospaceFont).toBe('jetbrains-mono'); + expect(d.monospaceLigatures).toBe(false); + }); + + test('getActiveMonoFont returns the active family', () => { + expect(getActiveMonoFont({ monospaceFont: 'fira-code' })).toBe('Fira Code'); + expect(getActiveMonoFont({})).toBe('JetBrains Mono'); + expect(getActiveMonoFont({ monospaceFont: 'bogus' })).toBe('JetBrains Mono'); + }); + + test('isLigaturesEnabled reads boolean strictly', () => { + expect(isLigaturesEnabled({ monospaceLigatures: true })).toBe(true); + expect(isLigaturesEnabled({ monospaceLigatures: false })).toBe(false); + expect(isLigaturesEnabled({})).toBe(false); + expect(isLigaturesEnabled({ monospaceLigatures: 'yes' })).toBe(false); + }); +});