diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 3015aa786..62e96f81c 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -31,6 +31,19 @@ describe "PackageManager", -> it "returns the value of the core.apmPath config setting", -> expect(atom.packages.getApmPath()).toBe "/path/to/apm" + describe "::loadPackages()", -> + beforeEach -> + spyOn(atom.packages, 'loadPackage') + + afterEach -> + atom.packages.deactivatePackages() + atom.packages.unloadPackages() + + it "sets hasLoadedInitialPackages", -> + expect(atom.packages.hasLoadedInitialPackages()).toBe false + atom.packages.loadPackages() + expect(atom.packages.hasLoadedInitialPackages()).toBe true + describe "::loadPackage(name)", -> beforeEach -> atom.config.set("core.disabledPackages", []) @@ -1022,6 +1035,12 @@ describe "PackageManager", -> jasmine.restoreDeprecationsSnapshot() + it "sets hasActivatedInitialPackages", -> + spyOn(atom.packages, 'activatePackages') + expect(atom.packages.hasActivatedInitialPackages()).toBe false + waitsForPromise -> atom.packages.activate() + runs -> expect(atom.packages.hasActivatedInitialPackages()).toBe true + it "activates all the packages, and none of the themes", -> packageActivator = spyOn(atom.packages, 'activatePackages') themeActivator = spyOn(atom.themes, 'activatePackages') diff --git a/src/package-manager.coffee b/src/package-manager.coffee index f6cf41655..84a36dd78 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -45,6 +45,8 @@ class PackageManager @packageDirPaths.push(path.join(configDirPath, "packages")) @packagesCache = require('../package.json')?._atomPackages ? {} + @initialPackagesLoaded = false + @initialPackagesActivated = false @loadedPackages = {} @activePackages = {} @activatingPackages = {} @@ -241,6 +243,9 @@ class PackageManager isPackageActive: (name) -> @getActivePackage(name)? + # Public: Returns a {Boolean} indicating whether package activation has occurred. + hasActivatedInitialPackages: -> @initialPackagesActivated + ### Section: Accessing loaded packages ### @@ -271,6 +276,9 @@ class PackageManager isPackageLoaded: (name) -> @getLoadedPackage(name)? + # Public: Returns a {Boolean} indicating whether package loading has occurred. + hasLoadedInitialPackages: -> @initialPackagesLoaded + ### Section: Accessing available packages ### @@ -364,6 +372,7 @@ class PackageManager @config.transact => @loadPackage(packagePath) for packagePath in packagePaths return + @initialPackagesLoaded = true @emitter.emit 'did-load-initial-packages' loadPackage: (nameOrPath) -> @@ -426,6 +435,7 @@ class PackageManager promises = promises.concat(activator.activatePackages(packages)) Promise.all(promises).then => @triggerDeferredActivationHooks() + @initialPackagesActivated = true @emitter.emit 'did-activate-initial-packages' # another type of package manager can handle other package types.