Files
atom/spec/app/atom-package-spec.coffee
2013-03-26 17:35:43 -06:00

68 lines
2.9 KiB
CoffeeScript

RootView = require 'root-view'
AtomPackage = require 'atom-package'
fs = require 'fs-utils'
describe "AtomPackage", ->
[packageMainModule, pack] = []
beforeEach ->
pack = new AtomPackage(fs.resolve(config.packageDirPaths..., 'package-with-activation-events'))
pack.load()
describe ".load()", ->
describe "if the package's metadata has a `deferredDeserializers` array", ->
it "requires the package's main module attempting to use deserializers named in the array", ->
expect(pack.mainModule).toBeNull()
object = deserialize(deserializer: 'Foo', data: "Hello")
expect(object.constructor.name).toBe 'Foo'
expect(object.data).toBe 'Hello'
expect(pack.mainModule).toBeDefined()
expect(pack.mainModule.activateCallCount).toBe 0
describe ".activate()", ->
beforeEach ->
window.rootView = new RootView
packageMainModule = require 'fixtures/packages/package-with-activation-events/main'
spyOn(packageMainModule, 'activate').andCallThrough()
describe "when the package metadata includes activation events", ->
beforeEach ->
pack.activate()
it "defers activating the package until an activation event bubbles to the root view", ->
expect(packageMainModule.activate).not.toHaveBeenCalled()
rootView.trigger 'activation-event'
expect(packageMainModule.activate).toHaveBeenCalled()
it "triggers the activation event on all handlers registered during activation", ->
rootView.open('sample.js')
editor = rootView.getActiveView()
eventHandler = jasmine.createSpy("activation-event")
editor.command 'activation-event', eventHandler
editor.trigger 'activation-event'
expect(packageMainModule.activate.callCount).toBe 1
expect(packageMainModule.activationEventCallCount).toBe 1
expect(eventHandler.callCount).toBe 1
editor.trigger 'activation-event'
expect(packageMainModule.activationEventCallCount).toBe 2
expect(eventHandler.callCount).toBe 2
expect(packageMainModule.activate.callCount).toBe 1
describe "when a package is activated", ->
it "loads config defaults based on the `configDefaults` key", ->
expect(config.get('package-with-module.numbers.one')).toBeUndefined()
atom.activatePackage("package-with-module")
expect(config.get('package-with-module.numbers.one')).toBe 1
expect(config.get('package-with-module.numbers.two')).toBe 2
describe "when the package has a scoped properties directory", ->
it "loads the scoped properties", ->
spyOn(syntax, 'addProperties')
atom.activatePackage("package-with-scoped-properties")
expect(syntax.addProperties).toHaveBeenCalled()
[selector, properties] = syntax.addProperties.argsForCall[0]
expect(selector).toBe ".source.omg"
expect(properties).toEqual {editor: increaseIndentPattern: '^a'}