From 6fc502b0b2f3932bad5d59e8748a0f216a037959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20M=C3=A9tais?= Date: Sat, 17 Jan 2015 09:44:50 +0100 Subject: [PATCH] Offenders layout for DOM queries without results --- lib/metadata/policies.js | 25 ++++++++++++++++++++++++- lib/offendersHelpers.js | 3 +++ test/core/offendersHelpersTest.js | 5 +++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/metadata/policies.js b/lib/metadata/policies.js index f0cdb18..046d9a2 100644 --- a/lib/metadata/policies.js +++ b/lib/metadata/policies.js @@ -39,6 +39,12 @@ var policies = { "offendersTransformFn": function(offenders) { return offenders.map(function(offender) { var parts = /^(.*): (\d) occurrences$/.exec(offender); + + if (!parts) { + debug('DOMidDuplicated offenders transform function error with "%s"', offender); + return offender; + } + return '#' + parts[1] + ': ' + parts[2] + ' occurrences'; }); } @@ -54,6 +60,11 @@ var policies = { return offenders.map(function(offender) { var parts = /^"(.*)" appended to "(.*)"$/.exec(offender); + if (!parts) { + debug('DOMinserts offenders transform function error with "%s"', offender); + return offender; + } + return offendersHelpers.domPathToButton(parts[1]) + ' appended to ' + offendersHelpers.domPathToButton(parts[2]); }); } @@ -81,7 +92,19 @@ var policies = { "message": "

Number of queries that return no result.

It suggests the query is not used on the page, probably because it is some dead code.

Or maybe the code is trying to find an HTML block that is not always here. Look at the JS Timeline to see if the scripts correctly figures out the HTML block is not here and immediatly stops interacting further with the DOM.

", "isOkThreshold": 0, "isBadThreshold": 100, - "isAbnormalThreshold": 200 + "isAbnormalThreshold": 200, + "offendersTransformFn": function(offenders) { + return offenders.map(function(offender) { + var parts = /^(.*) \(in (.*)\) using (.*)$/.exec(offender); + + if (!parts) { + debug('DOMqueriesWithoutResults offenders transform function error with "%s"', offender); + return offender; + } + + return '' + parts[1] + ' (in ' + offendersHelpers.domPathToButton(parts[2]) + ') using ' + parts[3] + ''; + }); + } }, "eventsBound": { "tool": "phantomas", diff --git a/lib/offendersHelpers.js b/lib/offendersHelpers.js index 24a523e..1ce47ef 100644 --- a/lib/offendersHelpers.js +++ b/lib/offendersHelpers.js @@ -76,6 +76,9 @@ var OffendersHelpers = function() { if (domArray[0] === 'head') { return '
head
'; } + if (domArray[0] === '#document') { + return '
document
'; + } if (domArray[0] === 'DocumentFragment') { if (domArray.length === 1) { return '
Fragment
'; diff --git a/test/core/offendersHelpersTest.js b/test/core/offendersHelpersTest.js index 30c2d15..4cea34c 100644 --- a/test/core/offendersHelpersTest.js +++ b/test/core/offendersHelpersTest.js @@ -97,6 +97,11 @@ describe('offendersHelpers', function() { result.should.equal('
head
'); }); + it('should transform #document', function() { + var result = offendersHelpers.domPathToButton('#document'); + result.should.equal('
document
'); + }); + it('should transform a standard in-body element', function() { var result = offendersHelpers.domPathToButton('body > div#colorbox > div#cboxContent'); result.should.equal('
DOM element div#cboxContent
body
div#colorbox
div#cboxContent
');