Change the way context is saved in jsExecutionTree

This commit is contained in:
Gaël Métais
2015-03-02 17:10:21 +01:00
parent d3444e9aa0
commit a7c96f77fe
4 changed files with 43 additions and 24 deletions
+19
View File
@@ -1,5 +1,7 @@
var debug = require('debug')('ylt:jsExecutionTransformer');
var offendersHelpers = require('../offendersHelpers');
var jsExecutionTransformer = function() {
this.transform = function(data) {
@@ -46,6 +48,14 @@ var jsExecutionTransformer = function() {
data.toolsResults.phantomas.metrics.domComplete = node.data.timestamp;
break;
}
// Change the list of dom paths into a tree
treeRecursiveParser(node, function(node) {
if (node.data.callDetails && node.data.callDetails.context && node.data.callDetails.context.length > 0) {
var domArrays = node.data.callDetails.context.elements.map(offendersHelpers.domPathToArray);
node.data.callDetails.context.elements = offendersHelpers.listOfDomArraysToTree(domArrays);
}
});
});
}
@@ -57,6 +67,15 @@ var jsExecutionTransformer = function() {
return javascriptExecutionTree;
};
function treeRecursiveParser(node, fn) {
if (node.children) {
node.children.forEach(function(child) {
treeRecursiveParser(child, fn);
});
}
fn(node);
}
};
module.exports = new jsExecutionTransformer();
@@ -33,9 +33,6 @@ exports.module = function(phantomas) {
phantomas.enterContext({
type: 'getElementById',
callDetails: {
context: {
domElement: '#document'
},
arguments: ['#' + id]
},
backtrace: phantomas.getBacktrace()
@@ -65,7 +62,8 @@ exports.module = function(phantomas) {
type: 'getElementsByClassName',
callDetails: {
context: {
domElement: context
length: 1,
elements: [context]
},
arguments: ['.' + className]
},
@@ -103,7 +101,8 @@ exports.module = function(phantomas) {
type: 'getElementsByTagName',
callDetails: {
context: {
domElement: context
length: 1,
elements: [context]
},
arguments: [tagName]
},
@@ -145,7 +144,8 @@ exports.module = function(phantomas) {
type: 'querySelector',
callDetails: {
context: {
domElement: context
length: 1,
elements: [context]
},
arguments: [selector]
},
@@ -177,7 +177,8 @@ exports.module = function(phantomas) {
type: 'querySelectorAll',
callDetails: {
context: {
domElement: context
length: 1,
elements: [context]
},
arguments: [selector]
},
@@ -237,7 +238,8 @@ exports.module = function(phantomas) {
type: 'appendChild',
callDetails: {
context: {
domElement: context
length: 1,
elements: [context]
},
arguments: [appended]
},
@@ -256,7 +258,8 @@ exports.module = function(phantomas) {
type: 'insertBefore',
callDetails: {
context: {
domElement: context
length: 1,
elements: [context]
},
arguments: [appended]
},
@@ -277,9 +280,6 @@ exports.module = function(phantomas) {
phantomas.enterContext({
type: 'createElement',
callDetails: {
context: {
domElement: '#document'
},
arguments: [tagName]
},
backtrace: phantomas.getBacktrace()
@@ -295,9 +295,6 @@ exports.module = function(phantomas) {
phantomas.enterContext({
type: 'createTextNode',
callDetails: {
context: {
domElement: '#document'
},
arguments: [text]
},
backtrace: phantomas.getBacktrace()
@@ -313,9 +310,6 @@ exports.module = function(phantomas) {
phantomas.enterContext({
type: 'createDocumentFragment',
callDetails: {
context: {
domElement: '#document'
},
arguments: []
},
backtrace: phantomas.getBacktrace()
@@ -27,7 +27,8 @@ exports.module = function(phantomas) {
type: 'addEventListener',
callDetails: {
context: {
domElement: path
length: 1,
elements: [path]
},
arguments: [eventType]
},
@@ -197,8 +197,8 @@ exports.module = function(phantomas) {
type: 'jQuery - Sizzle call',
callDetails: {
context: {
length: this.length,
firstElementPath: phantomas.getDOMPath(context)
length: 1,
elements: [phantomas.getDOMPath(context)]
},
arguments: [selector]
},
@@ -221,7 +221,7 @@ exports.module = function(phantomas) {
callDetails: {
context: {
length: 1,
firstElementPath: '#document'
elements: ['#document']
},
arguments: [selector]
},
@@ -234,7 +234,8 @@ exports.module = function(phantomas) {
var data = phantomas.getContextData();
if (data.type === 'jQuery - find' &&
data.callDetails.context.firstElementPath === '#document' &&
data.callDetails.context.elements.length === 1 &&
data.callDetails.context.elements[0] === '#document' &&
data.callDetails.arguments.length === 1 &&
/^#([\w\-]*)$/.exec(data.callDetails.arguments[0]) !== null) {
@@ -335,13 +336,17 @@ exports.module = function(phantomas) {
args[index] = arg;
});
var elements = [];
for (var i = 0 ; i < this.length ; i++) {
elements.push(phantomas.getDOMPath(this[i]));
}
phantomas.enterContext({
type: 'jQuery - ' + functionName,
callDetails: {
context: {
length: this.length,
firstElementPath: phantomas.getDOMPath(this[0])
elements: elements
},
arguments: args
},