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); + }); +});