From f82086e6d3b1de254afd7dc90163cfb28a1664fd Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Sun, 10 Dec 2017 00:45:49 -0500 Subject: [PATCH 01/12] first pass at adding infra for registerDefaults --- atom/browser/api/atom_api_system_preferences.h | 1 + .../api/atom_api_system_preferences_mac.mm | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/atom/browser/api/atom_api_system_preferences.h b/atom/browser/api/atom_api_system_preferences.h index ea5daed94a5f..658f6eebb402 100644 --- a/atom/browser/api/atom_api_system_preferences.h +++ b/atom/browser/api/atom_api_system_preferences.h @@ -73,6 +73,7 @@ class SystemPreferences : public mate::EventEmitter void UnsubscribeLocalNotification(int request_id); v8::Local GetUserDefault(const std::string& name, const std::string& type); + void registerDefaults(const base::DictionaryValue& defaults); void SetUserDefault(const std::string& name, const std::string& type, mate::Arguments* args); diff --git a/atom/browser/api/atom_api_system_preferences_mac.mm b/atom/browser/api/atom_api_system_preferences_mac.mm index 58e9b848e25c..1317b3026e2b 100644 --- a/atom/browser/api/atom_api_system_preferences_mac.mm +++ b/atom/browser/api/atom_api_system_preferences_mac.mm @@ -144,6 +144,24 @@ v8::Local SystemPreferences::GetUserDefault( } } +void SystemPreferences::RegisterDefaults(const base::DictionaryValue& defaults) { + NSString *userDefaultsValuesPath; + NSDictionary *userDefaultsValuesDict; + NSDictionary *initialValuesDict; + NSArray *resettableUserDefaultsKeys; + + userDefaultsValuesPath=[[NSBundle mainBundle] pathForResource:@"UserDefaults" + ofType:@"plist"]; + userDefaultsValuesDict=[NSDictionary dictionaryWithContentsOfFile:userDefaultsValuesPath]; + + [[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsValuesDict]; + + resettableUserDefaultsKeys=[NSArray arrayWithObjects:@"Value1",@"Value2",@"Value3",nil]; + initialValuesDict=[userDefaultsValuesDict dictionaryWithValuesForKeys:resettableUserDefaultsKeys]; + + [[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:initialValuesDict]; +} + void SystemPreferences::SetUserDefault(const std::string& name, const std::string& type, mate::Arguments* args) { From 1ccad4a7e96e9f53a00393def19aaa81c160f088 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Sun, 10 Dec 2017 11:04:05 -0500 Subject: [PATCH 02/12] fix capitalization and clean logic --- .../browser/api/atom_api_system_preferences.h | 2 +- .../api/atom_api_system_preferences_mac.mm | 20 +++++-------------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/atom/browser/api/atom_api_system_preferences.h b/atom/browser/api/atom_api_system_preferences.h index 658f6eebb402..872f822ed74b 100644 --- a/atom/browser/api/atom_api_system_preferences.h +++ b/atom/browser/api/atom_api_system_preferences.h @@ -73,7 +73,7 @@ class SystemPreferences : public mate::EventEmitter void UnsubscribeLocalNotification(int request_id); v8::Local GetUserDefault(const std::string& name, const std::string& type); - void registerDefaults(const base::DictionaryValue& defaults); + void RegisterDefaults(const base::DictionaryValue& defaults); void SetUserDefault(const std::string& name, const std::string& type, mate::Arguments* args); diff --git a/atom/browser/api/atom_api_system_preferences_mac.mm b/atom/browser/api/atom_api_system_preferences_mac.mm index 1317b3026e2b..8f1df7746ff9 100644 --- a/atom/browser/api/atom_api_system_preferences_mac.mm +++ b/atom/browser/api/atom_api_system_preferences_mac.mm @@ -145,21 +145,11 @@ v8::Local SystemPreferences::GetUserDefault( } void SystemPreferences::RegisterDefaults(const base::DictionaryValue& defaults) { - NSString *userDefaultsValuesPath; - NSDictionary *userDefaultsValuesDict; - NSDictionary *initialValuesDict; - NSArray *resettableUserDefaultsKeys; - - userDefaultsValuesPath=[[NSBundle mainBundle] pathForResource:@"UserDefaults" - ofType:@"plist"]; - userDefaultsValuesDict=[NSDictionary dictionaryWithContentsOfFile:userDefaultsValuesPath]; - - [[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsValuesDict]; - - resettableUserDefaultsKeys=[NSArray arrayWithObjects:@"Value1",@"Value2",@"Value3",nil]; - initialValuesDict=[userDefaultsValuesDict dictionaryWithValuesForKeys:resettableUserDefaultsKeys]; - - [[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:initialValuesDict]; + if (NSDictionary* defaultsDict = DictionaryValueToNSDictionary(defaults)) { + [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsDict]; + } else { + defaults->ThrowError("Unable to parse userDefaults"); + } } void SystemPreferences::SetUserDefault(const std::string& name, From 18ee34f1a1cb346fc1e2993641ba2f5fed27afd2 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Sun, 10 Dec 2017 11:25:43 -0500 Subject: [PATCH 03/12] add method binding and error guards --- atom/browser/api/atom_api_system_preferences.cc | 1 + atom/browser/api/atom_api_system_preferences.h | 2 +- .../browser/api/atom_api_system_preferences_mac.mm | 14 +++++++++----- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/atom/browser/api/atom_api_system_preferences.cc b/atom/browser/api/atom_api_system_preferences.cc index 74d6d03ce7cb..82c3b2e1017f 100644 --- a/atom/browser/api/atom_api_system_preferences.cc +++ b/atom/browser/api/atom_api_system_preferences.cc @@ -65,6 +65,7 @@ void SystemPreferences::BuildPrototype( &SystemPreferences::SubscribeLocalNotification) .SetMethod("unsubscribeLocalNotification", &SystemPreferences::UnsubscribeLocalNotification) + .SetMethod("registerDefaults", &SystemPreferences::RegisterDefaults) .SetMethod("getUserDefault", &SystemPreferences::GetUserDefault) .SetMethod("setUserDefault", &SystemPreferences::SetUserDefault) .SetMethod("removeUserDefault", &SystemPreferences::RemoveUserDefault) diff --git a/atom/browser/api/atom_api_system_preferences.h b/atom/browser/api/atom_api_system_preferences.h index 872f822ed74b..4e432d7e51e1 100644 --- a/atom/browser/api/atom_api_system_preferences.h +++ b/atom/browser/api/atom_api_system_preferences.h @@ -73,7 +73,7 @@ class SystemPreferences : public mate::EventEmitter void UnsubscribeLocalNotification(int request_id); v8::Local GetUserDefault(const std::string& name, const std::string& type); - void RegisterDefaults(const base::DictionaryValue& defaults); + void RegisterDefaults(mate::Arguments* args); void SetUserDefault(const std::string& name, const std::string& type, mate::Arguments* args); diff --git a/atom/browser/api/atom_api_system_preferences_mac.mm b/atom/browser/api/atom_api_system_preferences_mac.mm index 8f1df7746ff9..23dd650b7483 100644 --- a/atom/browser/api/atom_api_system_preferences_mac.mm +++ b/atom/browser/api/atom_api_system_preferences_mac.mm @@ -144,11 +144,15 @@ v8::Local SystemPreferences::GetUserDefault( } } -void SystemPreferences::RegisterDefaults(const base::DictionaryValue& defaults) { - if (NSDictionary* defaultsDict = DictionaryValueToNSDictionary(defaults)) { - [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsDict]; - } else { - defaults->ThrowError("Unable to parse userDefaults"); +void SystemPreferences::RegisterDefaults(mate::Arguments* args) { + base::DictionaryValue value; + if (!args->GetNext(&value)) { + args->ThrowError("Unable to parse userDefaults dict"); + return; + } + + if (NSDictionary* dict = DictionaryValueToNSDictionary(value)) { + [[NSUserDefaults standardUserDefaults] registerDefaults:dict]; } } From becabdfff25ee4e00140eccaad7c9b1b5998f862 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Sun, 10 Dec 2017 11:26:07 -0500 Subject: [PATCH 04/12] add test for registerDefaults --- spec/api-system-preferences-spec.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/spec/api-system-preferences-spec.js b/spec/api-system-preferences-spec.js index d6513b364b33..8f16e7edb7fd 100644 --- a/spec/api-system-preferences-spec.js +++ b/spec/api-system-preferences-spec.js @@ -35,6 +35,23 @@ describe('systemPreferences module', () => { }) }) + describe('systemPreferences.registerDefaults(defaults)', () => { + it('registers defaults', () => { + const userDefaults = { + 'one': 'onee', + 'two': 'twoo', + 'three': 'threee', + 'four': 'fourr', + 'five': 'fivee' + } + + systemPreferences.registerDefaults(userDefaults) + + const val = systemPreferences.getUserDefault('two', 'string') + assert.equal(val, 'twoo') + }) + }) + describe('systemPreferences.getUserDefault(key, type)', () => { before(function () { if (process.platform !== 'darwin') { From 8a24733ee6ef29b8aa9a1b5ac3981f0b1cb6df2f Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Sun, 10 Dec 2017 12:52:03 -0500 Subject: [PATCH 05/12] add fail spec and only run mac ci --- spec/api-system-preferences-spec.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/spec/api-system-preferences-spec.js b/spec/api-system-preferences-spec.js index 8f16e7edb7fd..93368ef577c1 100644 --- a/spec/api-system-preferences-spec.js +++ b/spec/api-system-preferences-spec.js @@ -36,6 +36,10 @@ describe('systemPreferences module', () => { }) describe('systemPreferences.registerDefaults(defaults)', () => { + before(function () { + if (process.platform !== 'darwin') this.skip() + }) + it('registers defaults', () => { const userDefaults = { 'one': 'onee', @@ -50,6 +54,14 @@ describe('systemPreferences module', () => { const val = systemPreferences.getUserDefault('two', 'string') assert.equal(val, 'twoo') }) + + it('throws when bad defaults are passed', () => { + const userDefaults = 1 + + assert.throws(() => { + systemPreferences.setUserDefault(userDefaults) + }, `Unable to parse userDefaults dict`) + }) }) describe('systemPreferences.getUserDefault(key, type)', () => { From 9a40bbd082483dac937214d7cd713d49471869df Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Sun, 10 Dec 2017 14:46:19 -0500 Subject: [PATCH 06/12] update systemPreferences docs --- docs/api/system-preferences.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/api/system-preferences.md b/docs/api/system-preferences.md index 1fe53eed360b..c23c0a3829d6 100644 --- a/docs/api/system-preferences.md +++ b/docs/api/system-preferences.md @@ -106,6 +106,15 @@ This is necessary for events such as `NSUserDefaultsDidChangeNotification`. Same as `unsubscribeNotification`, but removes the subscriber from `NSNotificationCenter`. +### `systemPreferences.registerDefaults(defaults)` _macOS_ + +* `defaults`: a dictionary of (`key: value`) user defaults + * `key` - must be of type `string` + * `value` - can be of type `string`, `boolean`, `integer`, `float`, `double`, + `url`, `array` or `dictionary`. + +Allows for registering of your application's preference defaults in `NSUserDefaults`. + ### `systemPreferences.getUserDefault(key, type)` _macOS_ * `key` String From 5e51ab9791eaccaa9c7d7ff64ee103ec3c67beb2 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Sun, 10 Dec 2017 14:55:14 -0500 Subject: [PATCH 07/12] fix doc parsing error --- docs/api/system-preferences.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/api/system-preferences.md b/docs/api/system-preferences.md index c23c0a3829d6..2d0a4ef9a0f4 100644 --- a/docs/api/system-preferences.md +++ b/docs/api/system-preferences.md @@ -108,10 +108,10 @@ Same as `unsubscribeNotification`, but removes the subscriber from `NSNotificati ### `systemPreferences.registerDefaults(defaults)` _macOS_ -* `defaults`: a dictionary of (`key: value`) user defaults - * `key` - must be of type `string` - * `value` - can be of type `string`, `boolean`, `integer`, `float`, `double`, - `url`, `array` or `dictionary`. +* `defaults` Object - a dictionary of (`key: value`) user defaults + * `key` String - must be of type `string` + * `value` Object - object of type `string`, `boolean`, `integer`, `float`, `double`, + `url`, `array`, or `dictionary`. Allows for registering of your application's preference defaults in `NSUserDefaults`. From c5aeda1fdd81fc5676a22725b2566328f692cf5c Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Mon, 11 Dec 2017 00:20:26 -0500 Subject: [PATCH 08/12] fixes from code review --- .../api/atom_api_system_preferences_mac.mm | 12 +++++------ docs/api/system-preferences.md | 4 ++-- spec/api-system-preferences-spec.js | 20 +++++++++---------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/atom/browser/api/atom_api_system_preferences_mac.mm b/atom/browser/api/atom_api_system_preferences_mac.mm index 23dd650b7483..70bbe771b0ae 100644 --- a/atom/browser/api/atom_api_system_preferences_mac.mm +++ b/atom/browser/api/atom_api_system_preferences_mac.mm @@ -146,13 +146,13 @@ v8::Local SystemPreferences::GetUserDefault( void SystemPreferences::RegisterDefaults(mate::Arguments* args) { base::DictionaryValue value; - if (!args->GetNext(&value)) { - args->ThrowError("Unable to parse userDefaults dict"); - return; - } - - if (NSDictionary* dict = DictionaryValueToNSDictionary(value)) { + args->GetNext(&value); + + @try { + NSDictionary* dict = DictionaryValueToNSDictionary(value); [[NSUserDefaults standardUserDefaults] registerDefaults:dict]; + } @catch (NSException* exception) { + args->ThrowError("Invalid userDefault data provided"); } } diff --git a/docs/api/system-preferences.md b/docs/api/system-preferences.md index 2d0a4ef9a0f4..8afee8ddb035 100644 --- a/docs/api/system-preferences.md +++ b/docs/api/system-preferences.md @@ -109,8 +109,8 @@ Same as `unsubscribeNotification`, but removes the subscriber from `NSNotificati ### `systemPreferences.registerDefaults(defaults)` _macOS_ * `defaults` Object - a dictionary of (`key: value`) user defaults - * `key` String - must be of type `string` - * `value` Object - object of type `string`, `boolean`, `integer`, `float`, `double`, + * `key` String + * `value` (String | Boolean | Number) - object of type `string`, `boolean`, `integer`, `float`, `double`, `url`, `array`, or `dictionary`. Allows for registering of your application's preference defaults in `NSUserDefaults`. diff --git a/spec/api-system-preferences-spec.js b/spec/api-system-preferences-spec.js index 93368ef577c1..be7820c916ad 100644 --- a/spec/api-system-preferences-spec.js +++ b/spec/api-system-preferences-spec.js @@ -42,25 +42,25 @@ describe('systemPreferences module', () => { it('registers defaults', () => { const userDefaults = { - 'one': 'onee', - 'two': 'twoo', - 'three': 'threee', - 'four': 'fourr', - 'five': 'fivee' + 'one': 'ONE', + 'two': 'TWO', + 'three': 'THREE' } systemPreferences.registerDefaults(userDefaults) - const val = systemPreferences.getUserDefault('two', 'string') - assert.equal(val, 'twoo') + for (const [key, expectedValue] of Object.entries(userDefaults)) { + const actualValue = systemPreferences.getUserDefault(key, 'string') + assert.equal(actualValue, expectedValue) + } }) it('throws when bad defaults are passed', () => { - const userDefaults = 1 + const badDefaults1 = { 'one': null } assert.throws(() => { - systemPreferences.setUserDefault(userDefaults) - }, `Unable to parse userDefaults dict`) + systemPreferences.registerDefaults(badDefaults1) + }, 'Invalid userDefault data provided') }) }) From 765f223feff111fc67ea9774375e3e654ad7380d Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Mon, 11 Dec 2017 13:06:23 -0500 Subject: [PATCH 09/12] update docs and spec --- docs/api/system-preferences.md | 5 ++--- spec/api-system-preferences-spec.js | 28 ++++++++++++++++++++-------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/docs/api/system-preferences.md b/docs/api/system-preferences.md index 8afee8ddb035..b6d6bc7ee446 100644 --- a/docs/api/system-preferences.md +++ b/docs/api/system-preferences.md @@ -110,10 +110,9 @@ Same as `unsubscribeNotification`, but removes the subscriber from `NSNotificati * `defaults` Object - a dictionary of (`key: value`) user defaults * `key` String - * `value` (String | Boolean | Number) - object of type `string`, `boolean`, `integer`, `float`, `double`, - `url`, `array`, or `dictionary`. + * `value` (String | Boolean | Int | Float | Double | Array | Dictionary) -Allows for registering of your application's preference defaults in `NSUserDefaults`. +Add the specified defaults to your application's `NSUserDefaults`. ### `systemPreferences.getUserDefault(key, type)` _macOS_ diff --git a/spec/api-system-preferences-spec.js b/spec/api-system-preferences-spec.js index be7820c916ad..8ac8deae6136 100644 --- a/spec/api-system-preferences-spec.js +++ b/spec/api-system-preferences-spec.js @@ -35,32 +35,44 @@ describe('systemPreferences module', () => { }) }) - describe('systemPreferences.registerDefaults(defaults)', () => { + describe.only('systemPreferences.registerDefaults(defaults)', () => { before(function () { if (process.platform !== 'darwin') this.skip() }) it('registers defaults', () => { - const userDefaults = { + const defaultsDict = { 'one': 'ONE', - 'two': 'TWO', - 'three': 'THREE' + 'two': 2, + 'three': [1, 2, 3] } - systemPreferences.registerDefaults(userDefaults) + const defaultsMap = [ + { key: 'one', type: 'string', value: 'ONE' }, + { key: 'two', value: 2, type: 'integer' }, + { key: 'three', value: [1, 2, 3], type: 'array' } + ] - for (const [key, expectedValue] of Object.entries(userDefaults)) { - const actualValue = systemPreferences.getUserDefault(key, 'string') - assert.equal(actualValue, expectedValue) + systemPreferences.registerDefaults(defaultsDict) + + for (const def of defaultsMap) { + const [key, expectedValue, type] = [def.key, def.value, def.type] + const actualValue = systemPreferences.getUserDefault(key, type) + assert.deepEqual(actualValue, expectedValue) } }) it('throws when bad defaults are passed', () => { const badDefaults1 = { 'one': null } + //const badDefaults1 = { 'one': null } assert.throws(() => { systemPreferences.registerDefaults(badDefaults1) }, 'Invalid userDefault data provided') + // + // assert.throws(() => { + // systemPreferences.registerDefaults(badDefaults1) + // }, 'Invalid userDefault data provided') }) }) From 84bab486271dadc244091cf06c3dc1ff17cef54b Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Mon, 11 Dec 2017 13:11:03 -0500 Subject: [PATCH 10/12] 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 70bbe771b0ae..70997ed01298 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 8ac8deae6136..15d50d67ac75 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') }) }) From 027e78639a658aeb9e7d4636ffce2e76499d7f86 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Mon, 11 Dec 2017 14:06:02 -0500 Subject: [PATCH 11/12] update value type to Any --- docs/api/system-preferences.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api/system-preferences.md b/docs/api/system-preferences.md index b6d6bc7ee446..8aeec07ca2be 100644 --- a/docs/api/system-preferences.md +++ b/docs/api/system-preferences.md @@ -110,7 +110,7 @@ Same as `unsubscribeNotification`, but removes the subscriber from `NSNotificati * `defaults` Object - a dictionary of (`key: value`) user defaults * `key` String - * `value` (String | Boolean | Int | Float | Double | Array | Dictionary) + * `value` Any Add the specified defaults to your application's `NSUserDefaults`. From a8e67e7f61f191dbc55cf4be1fbf3cdc0c75fd39 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Mon, 11 Dec 2017 18:20:12 -0500 Subject: [PATCH 12/12] fixes from review --- .../api/atom_api_system_preferences_mac.mm | 1 - spec/api-system-preferences-spec.js | 40 +++++++------------ 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/atom/browser/api/atom_api_system_preferences_mac.mm b/atom/browser/api/atom_api_system_preferences_mac.mm index 70997ed01298..465decf3164a 100644 --- a/atom/browser/api/atom_api_system_preferences_mac.mm +++ b/atom/browser/api/atom_api_system_preferences_mac.mm @@ -150,7 +150,6 @@ void SystemPreferences::RegisterDefaults(mate::Arguments* args) { if(!args->GetNext(&value)) { args->ThrowError("Invalid userDefault data provided"); } else { - args->GetNext(&value); @try { NSDictionary* dict = DictionaryValueToNSDictionary(value); [[NSUserDefaults standardUserDefaults] registerDefaults:dict]; diff --git a/spec/api-system-preferences-spec.js b/spec/api-system-preferences-spec.js index 15d50d67ac75..50becf1604e7 100644 --- a/spec/api-system-preferences-spec.js +++ b/spec/api-system-preferences-spec.js @@ -41,45 +41,35 @@ describe('systemPreferences module', () => { }) 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' }, { key: 'three', value: [1, 2, 3], type: 'array' } ] + const defaultsDict = {} + defaultsMap.forEach(row => { defaultsDict[row.key] = row.value }) + systemPreferences.registerDefaults(defaultsDict) - for (const def of defaultsMap) { - const [key, expectedValue, type] = [def.key, def.value, def.type] + for (const userDefault of defaultsMap) { + const { key, value: expectedValue, type } = userDefault const actualValue = systemPreferences.getUserDefault(key, type) assert.deepEqual(actualValue, expectedValue) } }) it('throws when bad defaults are passed', () => { - 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(badDefaults2) - }, 'Invalid userDefault data provided') - - assert.throws(() => { - systemPreferences.registerDefaults(badDefaults3) - }, 'Invalid userDefault data provided') + for (const badDefaults of [ + { 'one': null }, // catches null values + 1, // argument must be a dictionary + null, // argument can't be null + new Date() // shouldn't be able to pass date object + ]) { + assert.throws(() => { + systemPreferences.registerDefaults(badDefaults) + }, 'Invalid userDefault data provided') + } }) })