diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index f68005cf5..43e21eeff 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -431,6 +431,27 @@ describe "PackageManager", -> runs -> expect(Package.prototype.requireMainModule.callCount).toBe 1 + it "does not double register activation hooks when deactivating and reactivating", -> + expect(mainModule.activate.callCount).toBe 0 + atom.packages.triggerActivationHook('language-fictitious:grammar-used') + atom.packages.triggerDeferredActivationHooks() + + waitsForPromise -> + promise + + runs -> + expect(mainModule.activate.callCount).toBe 1 + atom.packages.deactivatePackage('package-with-activation-hooks') + promise = atom.packages.activatePackage('package-with-activation-hooks') + atom.packages.triggerActivationHook('language-fictitious:grammar-used') + atom.packages.triggerDeferredActivationHooks() + + waitsForPromise -> + promise + + runs -> + expect(mainModule.activate.callCount).toBe 2 + it "activates the package immediately when activationHooks is empty", -> mainModule = require './fixtures/packages/package-with-empty-activation-hooks/index' spyOn(mainModule, 'activate').andCallThrough() diff --git a/src/package.coffee b/src/package.coffee index 94763f961..bb8707ede 100644 --- a/src/package.coffee +++ b/src/package.coffee @@ -388,6 +388,7 @@ class Package @activationPromise = null @resolveActivationPromise = null @activationCommandSubscriptions?.dispose() + @activationHookSubscriptions?.dispose() @configSchemaRegisteredOnActivate = false @deactivateResources() @deactivateKeymaps()