Files
atom/spec/focusable-spec.coffee
Nathan Sobo 4e99d003ee Add Focusable mixin and FocusContext
Focusable objects have ::focus and ::blur methods and a ::focused
property. Focusable objects can be assigned a ::focusContext, and the
::focused property will only be true for at most one object with the
same context.
2014-01-09 12:19:01 -07:00

37 lines
1.1 KiB
CoffeeScript

{Model} = require 'theorist'
Focusable = require '../src/focusable'
FocusContext = require '../src/focus-context'
describe "Focusable mixin", ->
it "ensures that only a single model is focused for a given focus manager", ->
class Item extends Model
Focusable.includeInto(this)
focusContext = new FocusContext
item1 = new Item({focusContext})
item2 = new Item({focusContext})
item3 = new Item({focusContext})
expect(focusContext.focusedObject).toBe null
expect(item1.focused).toBe false
expect(item2.focused).toBe false
expect(item3.focused).toBe false
item1.focus()
expect(focusContext.focusedObject).toBe item1
expect(item1.focused).toBe true
expect(item2.focused).toBe false
expect(item3.focused).toBe false
item2.focus()
expect(focusContext.focusedObject).toBe item2
expect(item1.focused).toBe false
expect(item2.focused).toBe true
expect(item3.focused).toBe false
item2.blur()
expect(focusContext.focusedObject).toBe null
expect(item1.focused).toBe false
expect(item2.focused).toBe false
expect(item3.focused).toBe false