eventHandler.js 9.95 KiB
$(function () {
  'use strict'
  QUnit.module('event handler')
  QUnit.test('should be defined', function (assert) {
    assert.expect(1)
    assert.ok(EventHandler, 'EventHandler is defined')
  })
  QUnit.test('should trigger event correctly', function (assert) {
    assert.expect(1)
    var element = document.createElement('div')
    element.addEventListener('foobar', function () {
      assert.ok(true, 'listener called')
    EventHandler.trigger(element, 'foobar')
  QUnit.test('should trigger event through jQuery event system', function (assert) {
    assert.expect(1)
    var element = document.createElement('div')
    $(element).on('foobar', function () {
      assert.ok(true, 'listener called')
    EventHandler.trigger(element, 'foobar')
  QUnit.test('should trigger namespaced event through jQuery event system', function (assert) {
    assert.expect(2)
    var element = document.createElement('div')
    $(element).on('foobar.namespace', function () {
      assert.ok(true, 'first listener called')
    element.addEventListener('foobar.namespace', function () {
      assert.ok(true, 'second listener called')
    EventHandler.trigger(element, 'foobar.namespace')
  QUnit.test('should mirror preventDefault', function (assert) {
    assert.expect(2)
    var element = document.createElement('div')
    $(element).on('foobar.namespace', function (event) {
      event.preventDefault()
      assert.ok(true, 'first listener called')
    element.addEventListener('foobar.namespace', function (event) {
      assert.ok(event.defaultPrevented, 'defaultPrevented is true in second listener')
    EventHandler.trigger(element, 'foobar.namespace')
  QUnit.test('should mirror preventDefault for native events', function (assert) {
    assert.expect(2)
    var element = document.createElement('div')
    document.body.appendChild(element)
    $(element).on('click', function (event) {
      event.preventDefault()
      assert.ok(true, 'first listener called')
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
}) element.addEventListener('click', function (event) { assert.ok(event.defaultPrevented, 'defaultPrevented is true in second listener') }) EventHandler.trigger(element, 'click') document.body.removeChild(element) }) QUnit.test('on should add event listener', function (assert) { assert.expect(1) var element = document.createElement('div') EventHandler.on(element, 'foobar', function () { assert.ok(true, 'listener called') }) EventHandler.trigger(element, 'foobar') }) QUnit.test('on should add namespaced event listener', function (assert) { assert.expect(1) var element = document.createElement('div') EventHandler.on(element, 'foobar.namespace', function () { assert.ok(true, 'listener called') }) EventHandler.trigger(element, 'foobar.namespace') }) QUnit.test('on should add native namespaced event listener', function (assert) { assert.expect(1) var element = document.createElement('div') document.body.appendChild(element) EventHandler.on(element, 'click.namespace', function () { assert.ok(true, 'listener called') }) EventHandler.trigger(element, 'click') document.body.removeChild(element) }) QUnit.test('on should add delegated event listener', function (assert) { assert.expect(1) var element = document.createElement('div') var subelement = document.createElement('span') element.appendChild(subelement) var anchor = document.createElement('a') element.appendChild(anchor) EventHandler.on(element, 'click.namespace', 'a', function () { assert.ok(true, 'listener called') }) EventHandler.on(element, 'click', 'span', function () { assert.notOk(true, 'listener should not be called') }) document.body.appendChild(element) EventHandler.trigger(anchor, 'click') document.body.removeChild(element) }) QUnit.test('on should add delegated event listener if delegated selector differs', function (assert) { assert.expect(1)
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
var element = document.createElement('div') var subelement = document.createElement('span') element.appendChild(subelement) var anchor = document.createElement('a') element.appendChild(anchor) var i = 0 var handler = function () { i++ } EventHandler.on(element, 'click', 'a', handler) EventHandler.on(element, 'click', 'span', handler) document.body.appendChild(element) EventHandler.trigger(anchor, 'click') EventHandler.trigger(subelement, 'click') document.body.removeChild(element) assert.ok(i === 2, 'listeners called') }) QUnit.test('one should remove the listener after the event', function (assert) { assert.expect(1) var element = document.createElement('div') EventHandler.one(element, 'foobar', function () { assert.ok(true, 'listener called') }) EventHandler.trigger(element, 'foobar') EventHandler.trigger(element, 'foobar') }) QUnit.test('off should remove a listener', function (assert) { assert.expect(1) var element = document.createElement('div') var handler = function () { assert.ok(true, 'listener called') } EventHandler.on(element, 'foobar', handler) EventHandler.trigger(element, 'foobar') EventHandler.off(element, 'foobar', handler) EventHandler.trigger(element, 'foobar') }) QUnit.test('off should remove all the listeners', function (assert) { assert.expect(2) var element = document.createElement('div') EventHandler.on(element, 'foobar', function () { assert.ok(true, 'first listener called') }) EventHandler.on(element, 'foobar', function () { assert.ok(true, 'second listener called') }) EventHandler.trigger(element, 'foobar') EventHandler.off(element, 'foobar') EventHandler.trigger(element, 'foobar') }) QUnit.test('off should remove all the namespaced listeners if namespace is passed', function (assert) { assert.expect(2)
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
var element = document.createElement('div') EventHandler.on(element, 'foobar.namespace', function () { assert.ok(true, 'first listener called') }) EventHandler.on(element, 'foofoo.namespace', function () { assert.ok(true, 'second listener called') }) EventHandler.trigger(element, 'foobar.namespace') EventHandler.trigger(element, 'foofoo.namespace') EventHandler.off(element, '.namespace') EventHandler.trigger(element, 'foobar.namespace') EventHandler.trigger(element, 'foofoo.namespace') }) QUnit.test('off should remove the namespaced listeners', function (assert) { assert.expect(2) var element = document.createElement('div') EventHandler.on(element, 'foobar.namespace', function () { assert.ok(true, 'first listener called') }) EventHandler.on(element, 'foofoo.namespace', function () { assert.ok(true, 'second listener called') }) EventHandler.trigger(element, 'foobar.namespace') EventHandler.off(element, 'foobar.namespace') EventHandler.trigger(element, 'foobar.namespace') EventHandler.trigger(element, 'foofoo.namespace') }) QUnit.test('off should remove the all the namespaced listeners for native events', function (assert) { assert.expect(2) var element = document.createElement('div') document.body.appendChild(element) EventHandler.on(element, 'click.namespace', function () { assert.ok(true, 'first listener called') }) EventHandler.on(element, 'click.namespace2', function () { assert.ok(true, 'second listener called') }) EventHandler.trigger(element, 'click') EventHandler.off(element, 'click') EventHandler.trigger(element, 'click') document.body.removeChild(element) }) QUnit.test('off should remove the specified namespaced listeners for native events', function (assert) { assert.expect(3) var element = document.createElement('div') document.body.appendChild(element) EventHandler.on(element, 'click.namespace', function () { assert.ok(true, 'first listener called') }) EventHandler.on(element, 'click.namespace2', function () { assert.ok(true, 'second listener called') }) EventHandler.trigger(element, 'click') EventHandler.off(element, 'click.namespace') EventHandler.trigger(element, 'click')
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
document.body.removeChild(element) }) QUnit.test('off should remove a listener registered by .one', function (assert) { assert.expect(0) var element = document.createElement('div') var handler = function () { assert.notOk(true, 'listener called') } EventHandler.one(element, 'foobar', handler) EventHandler.off(element, 'foobar', handler) EventHandler.trigger(element, 'foobar') }) QUnit.test('off should remove the correct delegated event listener', function (assert) { assert.expect(5) var element = document.createElement('div') var subelement = document.createElement('span') element.appendChild(subelement) var anchor = document.createElement('a') element.appendChild(anchor) var i = 0 var handler = function () { i++ } EventHandler.on(element, 'click', 'a', handler) EventHandler.on(element, 'click', 'span', handler) document.body.appendChild(element) EventHandler.trigger(anchor, 'click') EventHandler.trigger(subelement, 'click') assert.ok(i === 2, 'first listeners called') EventHandler.off(element, 'click', 'span', handler) EventHandler.trigger(subelement, 'click') assert.ok(i === 2, 'removed listener not called') EventHandler.trigger(anchor, 'click') assert.ok(i === 3, 'not removed listener called') EventHandler.on(element, 'click', 'span', handler) EventHandler.trigger(anchor, 'click') EventHandler.trigger(subelement, 'click') assert.ok(i === 5, 'listener re-registered') EventHandler.off(element, 'click', 'span') EventHandler.trigger(subelement, 'click') assert.ok(i === 5, 'listener removed again') document.body.removeChild(element) }) })