Skip to content

Commit 88f0e6d

Browse files
committed
AC-391: Static test to cover "deprecated" jQuery methods
- Fix detection of jQuery ids
1 parent 7edcf26 commit 88f0e6d

10 files changed

+146
-38
lines changed

Magento2/Tests/Eslint/AndSelfTest.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
$(function () {
2-
'use strict';
1+
define([
2+
'jquery',
3+
], function ($) {
4+
$(function () {
5+
'use strict';
36

4-
$('div').find('p').andSelf().addClass('border');
7+
$('div').find('p').andSelf().addClass('border');
8+
});
59
});
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
$(function () {
2-
'use strict';
1+
define([
2+
'jquery',
3+
], function ($) {
4+
$(function () {
5+
'use strict';
36

4-
$('.btn1').bind('click');
7+
$('.btn1').bind('click');
8+
});
59
});
Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
$(function () {
2-
'use strict';
1+
define([
2+
'jquery',
3+
], function ($) {
4+
$(function () {
5+
'use strict';
36

4-
$('table').delegate('td', 'click', function () {
5-
$(this).toggleClass('chosen');
7+
$('table').delegate('td', 'click', function () {
8+
$(this).toggleClass('chosen');
9+
});
610
});
711
});
Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1-
$(function () {
2-
'use strict';
1+
define([
2+
'jquery',
3+
], function (jQuery) {
4+
$(function () {
5+
'use strict';
36

4-
$.extend($.expr[':'], {});
5-
jQuery.extend($.expr.filters, {});
7+
jQuery.extend(jQuery.expr[':'], {});
8+
jQuery.extend(jQuery.expr.filters, {});
9+
});
610
});
Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1-
$(document).ready(function () {
2-
'use strict';
3-
$('#result').unload(function () {});
1+
define([
2+
'jquery',
3+
], function (jQuery) {
4+
jQuery(document).ready(function () {
5+
'use strict';
6+
jQuery('#result').unload(function () {
7+
});
8+
});
49
});
510

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1-
$(function () {
2-
'use strict';
1+
define([
2+
'jquery',
3+
], function ($) {
4+
$(function () {
5+
'use strict';
36

4-
$('#result').blur();
5-
$.fn.focus(function () {});
7+
$('#result').blur();
8+
$.fn.focus(function () {
9+
});
10+
});
611
});
Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1-
$(function () {
2-
'use strict';
1+
define([
2+
'jquery',
3+
], function ($) {
4+
$(function () {
5+
'use strict';
36

4-
$.parseJSON('');
5-
jQuery.type({});
6-
$.isArray({});
7-
$.isFunction({});
7+
$.parseJSON('');
8+
$.type({});
9+
$.isArray({});
10+
$.isFunction({});
11+
});
812
});

Magento2/Tests/Eslint/SizeTest.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
$(function () {
2-
'use strict';
1+
define([
2+
'jquery',
3+
], function ($) {
4+
$(function () {
5+
'use strict';
36

4-
$('div').size();
7+
$('div').size();
8+
});
59
});

Magento2/Tests/Eslint/TrimTest.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
$(function () {
2-
'use strict';
1+
define([
2+
'jquery',
3+
], function ($) {
4+
$(function () {
5+
'use strict';
36

4-
$.trim(' hello, how are you? ');
7+
$.trim(' hello, how are you? ');
8+
});
59
});

eslint/rules/utils.js

Lines changed: 75 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,74 @@
11
/**
2-
* Traverses the node to identify its type
2+
* Get representation of define object
3+
* @param node
4+
* @returns object
5+
*/
6+
function define(node) {
7+
'use strict';
8+
var defineStmt, args;
9+
defineStmt = node.body.find(function (stmt) {
10+
return (
11+
stmt.type === 'ExpressionStatement' &&
12+
stmt.expression.type === 'CallExpression' &&
13+
stmt.expression.callee.type === 'Identifier' &&
14+
stmt.expression.callee.name === 'define' &&
15+
stmt.expression.arguments.length > 0 &&
16+
stmt.expression.arguments[0].type === 'ArrayExpression'
17+
);
18+
});
19+
if (!defineStmt) {
20+
return;
21+
}
22+
23+
args = defineStmt.expression.arguments;
24+
25+
return {
26+
func: defineStmt.expression,
27+
modulePaths: args[0].elements,
28+
moduleNames: args.length > 1 && args[1].params || []
29+
};
30+
}
31+
32+
/**
33+
* Get jQueryName from define
34+
* @param defineObject
35+
* @returns {null|*}
36+
*/
37+
function getJqueryName(defineObject) {
38+
var jQueryPathIndex;
39+
if (!defineObject.modulePaths || !defineObject.moduleNames) {
40+
return null;
41+
}
42+
jQueryPathIndex = defineObject.modulePaths.findIndex(function (paths) {
43+
return paths.value.toLowerCase() === 'jquery';
44+
});
45+
if (jQueryPathIndex === -1 || jQueryPathIndex >= defineObject.moduleNames.length) {
46+
return null;
47+
}
48+
return defineObject.moduleNames[jQueryPathIndex];
49+
50+
}
51+
52+
/**
53+
* Get Root Program node
54+
*/
55+
function getProgramNode(node) {
56+
'use strict';
57+
if (!node.parent) {
58+
return node;
59+
}
60+
return getProgramNode(node.parent);
61+
}
62+
63+
64+
65+
/**
66+
* Traverses the node to identify its id
367
*
468
* @param {Object} node - The node to check
569
* @returns {Object|Null}
670
*/
7-
function traverse(node) {
71+
function getExpressionId(node) {
872
'use strict';
973

1074
while (node) {
@@ -37,13 +101,19 @@ function traverse(node) {
37101

38102
function isjQuery(node) {
39103
'use strict';
104+
var parentNode = getProgramNode(node);
105+
var defineNode = define(parentNode);
106+
if (!defineNode) {
107+
return false;
108+
}
109+
var jQueryID = getJqueryName(defineNode);
40110

41-
var id = traverse(node);
111+
var id = getExpressionId(node);
42112

43-
return id && (id.name === '$' || id.name.toLowerCase() === 'jquery');
113+
return id && jQueryID && id.name === jQueryID.name;
44114
}
45115

46116
module.exports = {
47-
traverse: traverse,
117+
traverse: getExpressionId,
48118
isjQuery: isjQuery
49119
};

0 commit comments

Comments
 (0)