diff --git a/spec/fixtures/packages/package-with-url-handler/index.js b/spec/fixtures/packages/package-with-url-handler/index.js new file mode 100644 index 000000000..3e6391be4 --- /dev/null +++ b/spec/fixtures/packages/package-with-url-handler/index.js @@ -0,0 +1,5 @@ +module.exports = { + activate: () => null, + deactivate: () => null, + handleUrl: () => null, +} diff --git a/spec/fixtures/packages/package-with-url-handler/package.json b/spec/fixtures/packages/package-with-url-handler/package.json new file mode 100644 index 000000000..4ecbdb23b --- /dev/null +++ b/spec/fixtures/packages/package-with-url-handler/package.json @@ -0,0 +1,6 @@ +{ + "name": "package-with-url-handler", + "urlHandler": { + "method": "handleUrl" + } +} diff --git a/spec/package-manager-spec.js b/spec/package-manager-spec.js index 1d949859d..2c88c4fbb 100644 --- a/spec/package-manager-spec.js +++ b/spec/package-manager-spec.js @@ -1,4 +1,5 @@ const path = require('path') +const url = require('url') const Package = require('../src/package') const PackageManager = require('../src/package-manager') const temp = require('temp').track() @@ -1038,6 +1039,20 @@ describe('PackageManager', () => { }) }) + + describe("URL handler registration", () => { + it("registers the package's specified URL handler", async () => { + const uri = 'atom://package-with-url-handler/some/url?with=args' + const mod = require('./fixtures/packages/package-with-url-handler') + spyOn(mod, 'handleUrl') + spyOn(atom.packages, 'hasLoadedInitialPackages').andReturn(true) + const activationPromise = atom.packages.activatePackage('package-with-url-handler') + atom.dispatchUrlMessage(uri) + await activationPromise + expect(mod.handleUrl).toHaveBeenCalledWith(url.parse(uri, true), uri) + }) + }) + describe('service registration', () => { it("registers the package's provided and consumed services", async () => { const consumerModule = require('./fixtures/packages/package-with-consumed-services') diff --git a/src/package.coffee b/src/package.coffee index 42647acb5..815d0b537 100644 --- a/src/package.coffee +++ b/src/package.coffee @@ -323,15 +323,15 @@ class Package registerUrlHandler: -> handlerConfig = @getUrlHandler() if methodName = handlerConfig?.method - @urlHandlerSubscription = @packageManager.registerUrlHandlerForPackage @name, (url) => - @handleUrl(url, methodName) + @urlHandlerSubscription = @packageManager.registerUrlHandlerForPackage @name, (args...) => + @handleUrl(methodName, args) unregisterUrlHandler: -> @urlHandlerSubscription?.dispose() - handleUrl: (url, methodName) -> + handleUrl: (methodName, args) -> @activate().then => - @mainModule[methodName]?(url) + @mainModule[methodName]?.apply(@mainModule, args) unless @mainActivated @activateNow()