@semantic-ui-react/event-stack
Version:
Issues mentioned in `README` should be solved by other approaches: - `.addEventListener()` is blazing fast and is not a real performance issue - to solve issues with ordering in case when regular DOM event propogation is not available consider to use thi
125 lines (91 loc) • 4.2 kB
text/typescript
import EventPool from './EventPool'
describe('EventPool', () => {
describe('addHandlers', () => {
it('adds handlers', () => {
const handler = jasmine.createSpy()
let pool = new EventPool('default', new Map())
pool = pool.addHandlers('click', [handler])
pool.dispatchEvent('click', document.createEvent('Event'))
expect(handler).toHaveBeenCalledTimes(1)
})
it('adds handlers for multiple event types', () => {
const clickHandler = jasmine.createSpy('click')
const mouseDown = jasmine.createSpy('mouseDown')
let pool = new EventPool('default', new Map())
pool = pool.addHandlers('click', [clickHandler])
pool = pool.addHandlers('mousedown', [mouseDown])
pool.dispatchEvent('click', document.createEvent('Event'))
pool.dispatchEvent('mousedown', document.createEvent('Event'))
expect(clickHandler).toHaveBeenCalledTimes(1)
expect(mouseDown).toHaveBeenCalledTimes(1)
})
it('always returns a new object', () => {
const pool = EventPool.createByType('default', 'click', [])
const anotherPool = pool.addHandlers('click', [])
expect(typeof anotherPool).toBe('object')
expect(anotherPool).not.toBe(pool)
})
it('handler sets are immutable', () => {
const handler1 = jasmine.createSpy('handler1')
const handler2 = jasmine.createSpy('handler2')
const pool = EventPool.createByType('default', 'click', [handler1])
const another = pool.addHandlers('click', [handler2])
pool.dispatchEvent('click', document.createEvent('Event'))
another.dispatchEvent('click', document.createEvent('Event'))
expect(handler1).toHaveBeenCalledTimes(2)
expect(handler2).toHaveBeenCalledTimes(1)
})
})
describe('hasHandlers', () => {
it('returns "true" if has handlers', () => {
const pool = EventPool.createByType('default', 'click', [() => {}])
expect(pool.hasHandlers()).toBeTruthy()
})
it('returns "true" if eventType has handlers', () => {
const pool = EventPool.createByType('default', 'click', [() => {}])
expect(pool.hasHandlers('click')).toBeTruthy()
})
it('returns "false" if eventType has no handlers', () => {
const pool = EventPool.createByType('default', 'click', [() => {}])
expect(pool.hasHandlers('keydown')).toBeFalsy()
})
it('returns "false" if has no handlers', () => {
const pool = new EventPool('default', new Map())
expect(pool.hasHandlers()).toBeFalsy()
})
})
describe('removeHandlers', () => {
it('removes handlers', () => {
const handler = jasmine.createSpy()
let pool = EventPool.createByType('default', 'click', [handler])
pool.dispatchEvent('click', document.createEvent('Event'))
pool = pool.removeHandlers('click', [handler])
pool.dispatchEvent('click', document.createEvent('Event'))
expect(handler).toHaveBeenCalledTimes(1)
})
it('removes handlers for non-existent eventType', () => {
const handler = jasmine.createSpy()
let pool = EventPool.createByType('default', 'click', [handler])
pool.dispatchEvent('click', document.createEvent('Event'))
pool = pool.removeHandlers('mousedown', [handler])
pool.dispatchEvent('click', document.createEvent('Event'))
expect(handler).toHaveBeenCalledTimes(2)
})
it('always returns a new object', () => {
const pool = EventPool.createByType('default', 'click', [])
const anotherPool = pool.removeHandlers('click', [])
expect(typeof anotherPool).toBe('object')
expect(anotherPool).not.toBe(pool)
})
it('handlers are immutable', () => {
const handler1 = jasmine.createSpy('handler1')
const handler2 = jasmine.createSpy('handler2')
const pool = EventPool.createByType('default', 'click', [handler1, handler2])
const another = pool.removeHandlers('click', [handler2])
pool.dispatchEvent('click', document.createEvent('Event'))
another.dispatchEvent('click', document.createEvent('Event'))
expect(handler1).toHaveBeenCalledTimes(2)
expect(handler2).toHaveBeenCalledTimes(1)
})
})
})