Merge pull request #6026 from atom/jlks-missing-services-fix

Check Comsumed/Provided Service Method Exists, fixes #416
This commit is contained in:
Jessica Lord
2015-03-19 14:04:21 -07:00
6 changed files with 50 additions and 2 deletions

View File

@@ -0,0 +1,4 @@
module.exports =
activate: ->
deactivate: ->

View File

@@ -0,0 +1,11 @@
{
"name": "package-with-missing-consumed-services",
"consumedServices": {
"service-1": {
"versions": {
">=0.1": "consumeMissingService"
}
}
}
}

View File

@@ -0,0 +1,4 @@
module.exports =
activate: ->
deactivate: ->

View File

@@ -0,0 +1,12 @@
{
"name": "package-with-missing-provided-services",
"providedServices": {
"service-1": {
"description": "The first service",
"versions": {
"0.2.9": "provideMissingService"
}
}
}
}

View File

@@ -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()

View File

@@ -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: ->