From cac361e6dfffe1a17209f68781b9b7bb05b055f0 Mon Sep 17 00:00:00 2001 From: Jessica Lord Date: Wed, 18 Mar 2015 15:34:28 -0700 Subject: [PATCH 1/3] add packages for new spec Signed-off-by: Kevin Sawicki --- .../index.coffee | 4 ++++ .../package.json | 11 +++++++++++ .../index.coffee | 4 ++++ .../package.json | 12 ++++++++++++ 4 files changed, 31 insertions(+) create mode 100644 spec/fixtures/packages/package-with-missing-consumed-services/index.coffee create mode 100644 spec/fixtures/packages/package-with-missing-consumed-services/package.json create mode 100644 spec/fixtures/packages/package-with-missing-provided-services/index.coffee create mode 100644 spec/fixtures/packages/package-with-missing-provided-services/package.json diff --git a/spec/fixtures/packages/package-with-missing-consumed-services/index.coffee b/spec/fixtures/packages/package-with-missing-consumed-services/index.coffee new file mode 100644 index 000000000..0f1fc41e0 --- /dev/null +++ b/spec/fixtures/packages/package-with-missing-consumed-services/index.coffee @@ -0,0 +1,4 @@ +module.exports = + activate: -> + + deactivate: -> diff --git a/spec/fixtures/packages/package-with-missing-consumed-services/package.json b/spec/fixtures/packages/package-with-missing-consumed-services/package.json new file mode 100644 index 000000000..d0e0ddfcb --- /dev/null +++ b/spec/fixtures/packages/package-with-missing-consumed-services/package.json @@ -0,0 +1,11 @@ +{ + "name": "package-with-missing-consumed-services", + + "consumedServices": { + "service-1": { + "versions": { + ">=0.1": "consumeMissingService" + } + } + } +} diff --git a/spec/fixtures/packages/package-with-missing-provided-services/index.coffee b/spec/fixtures/packages/package-with-missing-provided-services/index.coffee new file mode 100644 index 000000000..0f1fc41e0 --- /dev/null +++ b/spec/fixtures/packages/package-with-missing-provided-services/index.coffee @@ -0,0 +1,4 @@ +module.exports = + activate: -> + + deactivate: -> diff --git a/spec/fixtures/packages/package-with-missing-provided-services/package.json b/spec/fixtures/packages/package-with-missing-provided-services/package.json new file mode 100644 index 000000000..a090354a2 --- /dev/null +++ b/spec/fixtures/packages/package-with-missing-provided-services/package.json @@ -0,0 +1,12 @@ +{ + "name": "package-with-missing-provided-services", + + "providedServices": { + "service-1": { + "description": "The first service", + "versions": { + "0.2.9": "provideMissingService" + } + } + } +} From a787242e7a845c9f6d16a3a8f7fa5892007403de Mon Sep 17 00:00:00 2001 From: Jessica Lord Date: Wed, 18 Mar 2015 15:37:16 -0700 Subject: [PATCH 2/3] check that services method exists Signed-off-by: Kevin Sawicki --- src/package.coffee | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/package.coffee b/src/package.coffee index 4d244c50f..54dc75f2b 100644 --- a/src/package.coffee +++ b/src/package.coffee @@ -225,12 +225,14 @@ class Package for name, {versions} of @metadata.providedServices servicesByVersion = {} for version, methodName of versions - servicesByVersion[version] = @mainModule[methodName]() + if typeof @mainModule[methodName] is 'function' + servicesByVersion[version] = @mainModule[methodName]() @activationDisposables.add atom.packages.serviceHub.provide(name, servicesByVersion) for name, {versions} of @metadata.consumedServices for version, methodName of versions - @activationDisposables.add atom.packages.serviceHub.consume(name, version, @mainModule[methodName].bind(@mainModule)) + if typeof @mainModule[methodName] is 'function' + @activationDisposables.add atom.packages.serviceHub.consume(name, version, @mainModule[methodName].bind(@mainModule)) return loadKeymaps: -> From 2c46748307e765bd7796c092535048d5827bd4f2 Mon Sep 17 00:00:00 2001 From: Jessica Lord Date: Wed, 18 Mar 2015 15:38:13 -0700 Subject: [PATCH 3/3] add spec to check missing service methods are skipped Signed-off-by: Kevin Sawicki --- spec/package-manager-spec.coffee | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 758d7468f..2789f36c3 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -547,6 +547,21 @@ describe "PackageManager", -> expect(consumerModule.consumeFirstServiceV4).not.toHaveBeenCalled() expect(consumerModule.consumeSecondService).not.toHaveBeenCalled() + it "ignores provided and consumed services that do not exist", -> + addErrorHandler = jasmine.createSpy() + atom.notifications.onDidAddNotification(addErrorHandler) + + waitsForPromise -> + atom.packages.activatePackage("package-with-missing-consumed-services") + + waitsForPromise -> + atom.packages.activatePackage("package-with-missing-provided-services") + + runs -> + expect(atom.packages.isPackageActive("package-with-missing-consumed-services")).toBe true + expect(atom.packages.isPackageActive("package-with-missing-provided-services")).toBe true + expect(addErrorHandler.callCount).toBe 0 + describe "::deactivatePackage(id)", -> afterEach -> atom.packages.unloadPackages()