diff --git a/spec/fixtures/packages/package-with-config-schema/index.coffee b/spec/fixtures/packages/package-with-config-schema/index.coffee new file mode 100644 index 000000000..7da1d67b7 --- /dev/null +++ b/spec/fixtures/packages/package-with-config-schema/index.coffee @@ -0,0 +1,13 @@ +module.exports = + config: + numbers: + type: 'object' + properties: + one: + type: 'integer' + default: 1 + two: + type: 'integer' + default: 2 + + activate: -> # no-op diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 16c697332..964dc5894 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -82,7 +82,21 @@ describe "PackageManager", -> expect(indexModule.activate).toHaveBeenCalled() expect(pack.mainModule).toBe indexModule - it "assigns config defaults from the module", -> + it "assigns config schema, including defaults when package contains a schema", -> + expect(atom.config.get('package-with-config-schema.numbers.one')).toBeUndefined() + + waitsForPromise -> + atom.packages.activatePackage('package-with-config-schema') + + runs -> + expect(atom.config.get('package-with-config-schema.numbers.one')).toBe 1 + expect(atom.config.get('package-with-config-schema.numbers.two')).toBe 2 + + expect(atom.config.set('package-with-config-schema.numbers.one', 'nope')).toBe false + expect(atom.config.set('package-with-config-schema.numbers.one', '10')).toBe true + expect(atom.config.get('package-with-config-schema.numbers.one')).toBe 10 + + it "still assigns configDefaults from the module though deprecated", -> expect(atom.config.get('package-with-config-defaults.numbers.one')).toBeUndefined() waitsForPromise -> diff --git a/src/package.coffee b/src/package.coffee index 30cd1ad2f..65442bf6f 100644 --- a/src/package.coffee +++ b/src/package.coffee @@ -143,7 +143,10 @@ class Package @requireMainModule() if @mainModule? - atom.config.setDefaults(@name, @mainModule.configDefaults) + if @mainModule.config? and typeof @mainModule.config is 'object' + atom.config.setSchema @name, {type: 'object', properties: @mainModule.config} + else if @mainModule.configDefaults? and typeof @mainModule.configDefaults is 'object' + atom.config.setDefaults(@name, @mainModule.configDefaults) @mainModule.activateConfig?() @configActivated = true