]> source.dussan.org Git - svg.js.git/commitdiff
tests for EventTarget
authorUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Tue, 7 Apr 2020 22:47:16 +0000 (08:47 +1000)
committerUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Tue, 7 Apr 2020 22:47:16 +0000 (08:47 +1000)
spec/spec/types/Base.js
spec/spec/types/EventTarget.js [new file with mode: 0644]
src/elements/Dom.js
src/types/EventTarget.js

index f0cdfaa8ee716fd7d032161ee37f8ef220062fa7..9a5cf162bf5d710fccc305b22542efa7285b918e 100644 (file)
@@ -5,7 +5,7 @@ import Base from '../../../src/types/Base.js'
 const { any } = jasmine
 
 describe('Base.js', () => {
-  it('holds the base class', () => {
+  it('creates a new object of type Base', () => {
     expect(new Base()).toEqual(any(Base))
   })
 })
diff --git a/spec/spec/types/EventTarget.js b/spec/spec/types/EventTarget.js
new file mode 100644 (file)
index 0000000..cfc7f02
--- /dev/null
@@ -0,0 +1,132 @@
+/* globals describe, expect, it, spyOn, jasmine */
+
+import {
+  EventTarget
+} from '../../../src/main.js'
+import { getWindow } from '../../../src/utils/window.js'
+
+const { any, objectContaining, createSpy } = jasmine
+
+const event = (name) => {
+  const CustomEvent = getWindow().CustomEvent
+  return new CustomEvent(name)
+}
+
+describe('EventTarget.js', () => {
+  describe('()', () => {
+    it('creates a new object of type EventTarget', () => {
+      expect(new EventTarget()).toEqual(any(EventTarget))
+    })
+  })
+
+  describe('addEventListener()', () => {
+    it('is a noop', () => {
+      const target = new EventTarget()
+      const frozen = Object.freeze(target)
+      frozen.addEventListener()
+    })
+  })
+
+  describe('dispatch()', () => {
+    it('evemtually calls dispatchEvent on the target and returns the event', () => {
+      const target = new EventTarget()
+      const spy = spyOn(target, 'dispatchEvent').and.callThrough()
+      const options = { cancelable: false }
+      const event = target.dispatch('bla', 'foo', options)
+      expect(spy).toHaveBeenCalledWith(event)
+      expect(event).toEqual(objectContaining({ type: 'bla', detail: 'foo', cancelable: false }))
+    })
+  })
+
+  describe('dispatchEvent()', () => {
+    it('returns true if no events are bound', () => {
+      const target = new EventTarget()
+      expect(target.dispatchEvent(event('event'))).toBe(true)
+    })
+
+    it('calls the handler for a bound event', () => {
+      const target = new EventTarget()
+      const spy = createSpy('event')
+      const ev = event('event')
+      target.on('event', spy)
+      const ret = target.dispatchEvent(ev)
+      expect(spy).toHaveBeenCalledWith(ev)
+      expect(ret).toBe(!ev.defaultPrevented)
+    })
+
+    it('returns negative default prevented', () => {
+      const target = new EventTarget()
+      const ev = event('event')
+      ev.preventDefault()
+      const ret = target.dispatchEvent(ev)
+      expect(ret).toBe(!ev.defaultPrevented)
+    })
+  })
+
+  describe('fire()', () => {
+    it('calls dispatch and returns the element', () => {
+      const target = new EventTarget()
+      const spy = spyOn(target, 'dispatch')
+      expect(target.fire('event', 'foo', 'bar')).toBe(target)
+      expect(spy).toHaveBeenCalledWith('event', 'foo', 'bar')
+    })
+  })
+
+  describe('getEventHolder()', () => {
+    it('returns itself', () => {
+      const target = new EventTarget()
+      expect(target.getEventHolder()).toBe(target)
+    })
+  })
+
+  describe('getEventTarget()', () => {
+    it('returns itself', () => {
+      const target = new EventTarget()
+      expect(target.getEventTarget()).toBe(target)
+    })
+  })
+
+  describe('off()', () => {
+    it('returns itself', () => {
+      const target = new EventTarget()
+      const spy = createSpy()
+      expect(target.on('event', spy)).toBe(target)
+    })
+
+    it('removes an event binding from the target', () => {
+      const target = new EventTarget()
+      const spy = createSpy()
+      target.on('event', spy)
+      target.dispatch('event')
+      expect(spy.calls.count()).toBe(1)
+      target.off('event', spy)
+      target.dispatch('event')
+      expect(spy.calls.count()).toBe(1)
+    })
+  })
+
+  describe('on()', () => {
+    it('returns itself', () => {
+      const target = new EventTarget()
+      const spy = createSpy()
+      expect(target.off('event', spy)).toBe(target)
+    })
+
+    it('adds an event binding to the target', () => {
+      const target = new EventTarget()
+      const spy = createSpy()
+      expect(spy.calls.count()).toBe(0)
+      target.on('event', spy)
+      target.dispatch('event')
+      expect(spy.calls.count()).toBe(1)
+    })
+  })
+
+  describe('removeEventListener()', () => {
+    it('is a noop', () => {
+      const target = new EventTarget()
+      const frozen = Object.freeze(target)
+      frozen.removeEventListener()
+    })
+  })
+})
index c9e695310ad1046a1385b0bdb5462ce03e017746..c67dd18578c08fcc47f784245d175d815bb458ec 100644 (file)
@@ -17,7 +17,7 @@ import attr from '../modules/core/attr.js'
 
 export default class Dom extends EventTarget {
   constructor (node, attrs) {
-    super(node)
+    super()
     this.node = node
     this.type = node.nodeName
 
index b4a137a24aac1201be539f35f9b8ab39cd3ec22b..68896056fa2b03a2674ac6a2c67d3e6dc792b400 100644 (file)
@@ -3,15 +3,10 @@ import { register } from '../utils/adopter.js'
 import Base from './Base.js'
 
 export default class EventTarget extends Base {
-  constructor ({ events = {} } = {}) {
-    super()
-    this.events = events
-  }
-
   addEventListener () {}
 
-  dispatch (event, data) {
-    return dispatch(this, event, data)
+  dispatch (event, data, options) {
+    return dispatch(this, event, data, options)
   }
 
   dispatchEvent (event) {
@@ -30,8 +25,8 @@ export default class EventTarget extends Base {
   }
 
   // Fire given event
-  fire (event, data) {
-    this.dispatch(event, data)
+  fire (event, data, options) {
+    this.dispatch(event, data, options)
     return this
   }