Add addEventListeners to the JS execution tree

This commit is contained in:
Gaël Métais
2014-08-25 18:33:35 +02:00
parent 96e5eb72df
commit 3170deef28
2 changed files with 45 additions and 0 deletions
+1
View File
@@ -37,6 +37,7 @@ var PhantomasWrapper = function() {
'domComplexity',
'domMutations',
'domQueries',
'eventListeners',
'filmStrip',
'jQuery',
'jserrors',
@@ -0,0 +1,44 @@
/**
* Analyzes events bound to DOM elements
*/
/* global Document: true, Element: true, window: true */
'use strict';
exports.version = '0.2.a';
exports.module = function(phantomas) {
phantomas.setMetric('eventsBound'); // @desc number of EventTarget.addEventListener calls
// spy calls to EventTarget.addEventListener
// @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener
phantomas.once('init', function() {
phantomas.evaluate(function() {
(function(phantomas) {
function eventSpyBefore(eventType) {
/* jshint validthis: true */
var path = phantomas.getDOMPath(this);
//phantomas.log('DOM event: "' + eventType + '" bound to "' + path + '"');
phantomas.incrMetric('eventsBound');
phantomas.addOffender('eventsBound', '"%s" bound to "%s"', eventType, path);
phantomas.enterContext({
type: 'addEventListener',
callDetails: {
context: {
domElement: path
},
arguments: [eventType]
},
caller: phantomas.getCaller(1),
backtrace: phantomas.getBacktrace()
});
}
phantomas.spy(Element.prototype, 'addEventListener', eventSpyBefore, phantomas.leaveContext);
phantomas.spy(Document.prototype, 'addEventListener', eventSpyBefore, phantomas.leaveContext);
phantomas.spy(window, 'addEventListener', eventSpyBefore, phantomas.leaveContext);
})(window.__phantomas);
});
});
};