From 84bab486271dadc244091cf06c3dc1ff17cef54b Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Mon, 11 Dec 2017 13:11:03 -0500 Subject: [PATCH] improve error handling --- .../api/atom_api_system_preferences_mac.mm | 14 ++++++++----- spec/api-system-preferences-spec.js | 21 ++++++++++++------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/atom/browser/api/atom_api_system_preferences_mac.mm b/atom/browser/api/atom_api_system_preferences_mac.mm index 70bbe771b0a..70997ed0129 100644 --- a/atom/browser/api/atom_api_system_preferences_mac.mm +++ b/atom/browser/api/atom_api_system_preferences_mac.mm @@ -146,13 +146,17 @@ v8::Local SystemPreferences::GetUserDefault( void SystemPreferences::RegisterDefaults(mate::Arguments* args) { base::DictionaryValue value; - args->GetNext(&value); - @try { - NSDictionary* dict = DictionaryValueToNSDictionary(value); - [[NSUserDefaults standardUserDefaults] registerDefaults:dict]; - } @catch (NSException* exception) { + if(!args->GetNext(&value)) { args->ThrowError("Invalid userDefault data provided"); + } else { + args->GetNext(&value); + @try { + NSDictionary* dict = DictionaryValueToNSDictionary(value); + [[NSUserDefaults standardUserDefaults] registerDefaults:dict]; + } @catch (NSException* exception) { + args->ThrowError("Invalid userDefault data provided"); + } } } diff --git a/spec/api-system-preferences-spec.js b/spec/api-system-preferences-spec.js index 8ac8deae613..15d50d67ac7 100644 --- a/spec/api-system-preferences-spec.js +++ b/spec/api-system-preferences-spec.js @@ -35,18 +35,20 @@ describe('systemPreferences module', () => { }) }) - describe.only('systemPreferences.registerDefaults(defaults)', () => { + describe('systemPreferences.registerDefaults(defaults)', () => { before(function () { if (process.platform !== 'darwin') this.skip() }) it('registers defaults', () => { + // to pass into registerDefaults const defaultsDict = { 'one': 'ONE', 'two': 2, 'three': [1, 2, 3] } + // to test type const defaultsMap = [ { key: 'one', type: 'string', value: 'ONE' }, { key: 'two', value: 2, type: 'integer' }, @@ -63,16 +65,21 @@ describe('systemPreferences module', () => { }) it('throws when bad defaults are passed', () => { - const badDefaults1 = { 'one': null } - //const badDefaults1 = { 'one': null } + const badDefaults1 = { 'one': null } // catches null values + const badDefaults2 = 1 // argument must be a dictionary + const badDefaults3 = null // argument can't be null assert.throws(() => { systemPreferences.registerDefaults(badDefaults1) }, 'Invalid userDefault data provided') - // - // assert.throws(() => { - // systemPreferences.registerDefaults(badDefaults1) - // }, 'Invalid userDefault data provided') + + assert.throws(() => { + systemPreferences.registerDefaults(badDefaults2) + }, 'Invalid userDefault data provided') + + assert.throws(() => { + systemPreferences.registerDefaults(badDefaults3) + }, 'Invalid userDefault data provided') }) })