From f03248e41fb7b2a69e34167a3228ca713fbce492 Mon Sep 17 00:00:00 2001 From: Javan Makhmali Date: Fri, 3 May 2019 06:28:50 -0400 Subject: [PATCH] fix: add EventListener interface support --- src/index.js | 2 +- test/index.js | 30 +++++++++++++++++++++++------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/index.js b/src/index.js index bead827..f9e403b 100644 --- a/src/index.js +++ b/src/index.js @@ -25,7 +25,7 @@ var enhance = module.exports = function enhance(proto) { return originalAddEventListener.call(this, name, originalCallback, optionsOrCapture) } - var callback = originalCallback + var callback = typeof originalCallback !== 'function' && typeof originalCallback.handleEvent === 'function' ? originalCallback.handleEvent.bind(originalCallback) : originalCallback var options = typeof optionsOrCapture === 'boolean' ? {capture: optionsOrCapture} : optionsOrCapture || {} var passive = Boolean(options.passive) var once = Boolean(options.once) diff --git a/test/index.js b/test/index.js index 1b53b80..c45cacd 100644 --- a/test/index.js +++ b/test/index.js @@ -3,10 +3,20 @@ require('core-js/es6/weak-map') var polyfillEventTarget = require('../src') var assert = require('assert') -function testSuite(eventTarget) { +function testSuite(eventTarget, listenerType) { return function() { var i = 0 - function increment() { i += 1 } + var listeners = { + 'Function': function() { i++ }, + 'EventListener': { handleEvent: function() { i++ } }, + 'Ambiguous': (function() { + function listener() { i++ } + listener.handleEvent = function() {} + return listener + })() + } + var increment = listeners[listenerType] + function event(name) { var ev = document.createEvent("CustomEvent") ev.initCustomEvent(name, false, false, null) @@ -200,15 +210,21 @@ function testSuite(eventTarget) { } } -describe('Window add/removeEventListener', testSuite(window)) +['Function', 'EventListener', 'Ambiguous'].forEach(function(listenerType) { + describe(listenerType + ' listener', function() { + + describe('Window add/removeEventListener', testSuite(window, listenerType)) -describe('Document add/removeEventListener', testSuite(document)) + describe('Document add/removeEventListener', testSuite(document, listenerType)) -describe('Div add/removeEventListener', testSuite(document.createElement('div'))) + describe('Div add/removeEventListener', testSuite(document.createElement('div'), listenerType)) -describe('TextNode add/removeEventListener', testSuite(document.createTextNode('testing'))) + describe('TextNode add/removeEventListener', testSuite(document.createTextNode('testing'), listenerType)) + + describe('XHR add/removeEventListener', testSuite(new XMLHttpRequest(), listenerType)) + }) +}) -describe('XHR add/removeEventListener', testSuite(new XMLHttpRequest())) describe('Manual Polyfill', function() {