diff --git a/app/browser/reducers/spellCheckerReducer.js b/app/browser/reducers/spellCheckerReducer.js index 5fdfd47938a..275137bf252 100644 --- a/app/browser/reducers/spellCheckerReducer.js +++ b/app/browser/reducers/spellCheckerReducer.js @@ -32,11 +32,12 @@ const migrate = (state) => { } const setSpellCheckerSettings = () => { - const enabled = getSetting(settings.SPELLCHECK_ENABLED) + const langs = getSetting(settings.SPELLCHECK_LANGUAGES) + const enabled = getSetting(settings.SPELLCHECK_ENABLED) && !!langs.size + setUserPref('browser.enable_spellchecking', enabled) if (enabled) { - setUserPref('spellcheck.dictionaries', - getSetting(settings.SPELLCHECK_LANGUAGES)) + setUserPref('spellcheck.dictionaries', langs) } } diff --git a/js/about/preferences.js b/js/about/preferences.js index 4aedc8900e6..24b9493ff5a 100644 --- a/js/about/preferences.js +++ b/js/about/preferences.js @@ -122,7 +122,11 @@ class GeneralTab extends ImmutableComponent { } onSpellCheckLangsChange (value) { - this.props.onChangeSetting(settings.SPELLCHECK_LANGUAGES, value.split(',')) + if (!value) { + this.props.onChangeSetting(settings.SPELLCHECK_LANGUAGES, []) + } else { + this.props.onChangeSetting(settings.SPELLCHECK_LANGUAGES, value.split(',')) + } } setAsDefaultBrowser () { diff --git a/test/unit/app/browser/reducers/spellCheckerReducerTest.js b/test/unit/app/browser/reducers/spellCheckerReducerTest.js index be8596bddc5..80a824cea56 100644 --- a/test/unit/app/browser/reducers/spellCheckerReducerTest.js +++ b/test/unit/app/browser/reducers/spellCheckerReducerTest.js @@ -15,12 +15,12 @@ describe('spellCheckerReducer unit tests', function () { let getWebContentsSpy, replaceMisspellingSpy, replaceSpy, addWordSpy, removeWordSpy, setUserPrefSpy, getSettingSpy let spellCheckEnabled + let dicts const dictionaryWord = 'braave' const dictionarySuggestion = 'brave' const tabId = 111 const enabledPref = 'browser.enable_spellchecking' const dictsPref = 'spellcheck.dictionaries' - const dicts = ['en-US', 'fr-FR'] before(function () { mockery.enable({ @@ -158,6 +158,7 @@ describe('spellCheckerReducer unit tests', function () { getSettingSpy.reset() setUserPrefSpy.reset() spellCheckEnabled = true + dicts = Immutable.fromJS(['en-US', 'fr-FR']) spellCheckerReducer(Immutable.Map(), Immutable.fromJS({ actionType: appConstants.APP_WINDOW_CREATED })) @@ -174,6 +175,7 @@ describe('spellCheckerReducer unit tests', function () { getSettingSpy.reset() setUserPrefSpy.reset() spellCheckEnabled = false + dicts = Immutable.fromJS(['en-US', 'fr-FR']) spellCheckerReducer(Immutable.Map(), Immutable.fromJS({ actionType: appConstants.APP_WINDOW_CREATED })) @@ -193,6 +195,7 @@ describe('spellCheckerReducer unit tests', function () { getSettingSpy.reset() setUserPrefSpy.reset() spellCheckEnabled = true + dicts = Immutable.fromJS(['en-US', 'fr-FR']) spellCheckerReducer(Immutable.Map(), Immutable.fromJS({ actionType: appConstants.APP_CHANGE_SETTING, key: settings.SPELLCHECK_ENABLED @@ -210,6 +213,7 @@ describe('spellCheckerReducer unit tests', function () { getSettingSpy.reset() setUserPrefSpy.reset() spellCheckEnabled = false + dicts = Immutable.fromJS(['en-US', 'fr-FR']) spellCheckerReducer(Immutable.Map(), Immutable.fromJS({ actionType: appConstants.APP_CHANGE_SETTING, key: settings.SPELLCHECK_ENABLED @@ -227,6 +231,7 @@ describe('spellCheckerReducer unit tests', function () { getSettingSpy.reset() setUserPrefSpy.reset() spellCheckEnabled = true + dicts = Immutable.fromJS(['en-US', 'fr-FR']) spellCheckerReducer(Immutable.Map(), Immutable.fromJS({ actionType: appConstants.APP_CHANGE_SETTING, key: settings.SPELLCHECK_LANGUAGES @@ -239,11 +244,30 @@ describe('spellCheckerReducer unit tests', function () { assert(setUserPrefSpy.withArgs(dictsPref, dicts).calledOnce) }) }) + describe('empty SPELLCHECK_LANGUAGES with enabled', function () { + before(function () { + getSettingSpy.reset() + setUserPrefSpy.reset() + spellCheckEnabled = true + dicts = Immutable.fromJS([]) + spellCheckerReducer(Immutable.Map(), Immutable.fromJS({ + actionType: appConstants.APP_CHANGE_SETTING, + key: settings.SPELLCHECK_LANGUAGES + })) + }) + it('not calls setUserPref to set enabledPref to true', function () { + assert(setUserPrefSpy.withArgs(enabledPref, true).notCalled) + }) + it('not calls setUserPref to set dictionaries', function () { + assert(setUserPrefSpy.withArgs(dictsPref, dicts).notCalled) + }) + }) describe('SPELLCHECK_LANGUAGES with disabled', function () { before(function () { getSettingSpy.reset() setUserPrefSpy.reset() spellCheckEnabled = false + dicts = Immutable.fromJS(['en-US', 'fr-FR']) spellCheckerReducer(Immutable.Map(), Immutable.fromJS({ actionType: appConstants.APP_CHANGE_SETTING, key: settings.SPELLCHECK_LANGUAGES @@ -261,6 +285,7 @@ describe('spellCheckerReducer unit tests', function () { getSettingSpy.reset() setUserPrefSpy.reset() spellCheckEnabled = false + dicts = Immutable.fromJS(['en-US', 'fr-FR']) spellCheckerReducer(Immutable.Map(), Immutable.fromJS({ actionType: appConstants.APP_CHANGE_SETTING, key: 'other-settings'