Add PackageManager::onDidLoad/UnloadPackage

Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
This commit is contained in:
Nathan Sobo
2015-01-08 15:58:59 -08:00
parent 7acf3d4d6b
commit 4ab33890fc
2 changed files with 35 additions and 0 deletions

View File

@@ -34,6 +34,14 @@ describe "PackageManager", ->
expect(console.warn.callCount).toBe(1)
expect(console.warn.argsForCall[0][0]).toContain("Could not resolve")
it "invokes ::onDidLoadPackage listeners with the loaded package", ->
loadedPackage = null
atom.packages.onDidLoadPackage (pack) -> loadedPackage = pack
atom.packages.loadPackage("package-with-main")
expect(loadedPackage.name).toBe "package-with-main"
describe "::unloadPackage(name)", ->
describe "when the package is active", ->
it "throws an error", ->
@@ -61,6 +69,13 @@ describe "PackageManager", ->
atom.packages.unloadPackage(pack.name)
expect(atom.packages.isPackageLoaded(pack.name)).toBeFalsy()
it "invokes ::onDidUnloadPackage listeners with the unloaded package", ->
atom.packages.loadPackage('package-with-main')
unloadedPackage = null
atom.packages.onDidUnloadPackage (pack) -> unloadedPackage = pack
atom.packages.unloadPackage('package-with-main')
expect(unloadedPackage.name).toBe 'package-with-main'
describe "::activatePackage(id)", ->
describe "when called multiple times", ->
it "it only calls activate on the package once", ->

View File

@@ -90,6 +90,24 @@ class PackageManager
onDidDeactivatePackage: (callback) ->
@emitter.on 'did-deactivate-package', callback
# Public: Invoke the given callback when a package is loaded.
#
# * `callback` A {Function} to be invoked when a package is loaded.
# * `package` The {Package} that was loaded.
#
# Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
onDidLoadPackage: (callback) ->
@emitter.on 'did-load-package', callback
# Public: Invoke the given callback when a package is unloaded.
#
# * `callback` A {Function} to be invoked when a package is unloaded.
# * `package` The {Package} that was unloaded.
#
# Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
onDidUnloadPackage: (callback) ->
@emitter.on 'did-unload-package', callback
on: (eventName) ->
switch eventName
when 'loaded'
@@ -321,6 +339,7 @@ class PackageManager
pack = new Package(packagePath, metadata)
pack.load()
@loadedPackages[pack.name] = pack
@emitter.emit 'did-load-package', pack
return pack
catch error
console.warn "Failed to load package.json '#{path.basename(packagePath)}'", error.stack ? error
@@ -338,6 +357,7 @@ class PackageManager
if pack = @getLoadedPackage(name)
delete @loadedPackages[pack.name]
@emitter.emit 'did-unload-package', pack
else
throw new Error("No loaded package for name '#{name}'")