Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitfae5fee

Browse files
authored
Tests: Exclude tests based on compilation flags, not API presence
Introduces a new test API, `includesModule`. The method returns whethera particular module like "ajax" or "deprecated" is included in the currentjQuery build; it handles the slim build as well. The util was created so thatwe don't treat presence of particular APIs to decide whether to run a test asthen if we accidentally remove an API, the tests would still not fail.Fixesgh-5069Closesgh-5046
1 parent52f452b commitfae5fee

24 files changed

+157
-59
lines changed

‎build/tasks/build.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ module.exports = function( grunt ) {
1010
constfs=require("fs");
1111
constpath=require("path");
1212
constrollup=require("rollup");
13+
constslimBuildFlags=require("./lib/slim-build-flags");
1314
constrollupFileOverrides=require("./lib/rollup-plugin-file-overrides");
1415
constInsight=require("insight");
1516
constpkg=require("../../package.json");
@@ -60,7 +61,6 @@ module.exports = function( grunt ) {
6061
constdone=this.async();
6162

6263
try{
63-
constslimFlags=["-ajax","-callbacks","-deferred","-effects","-queue"];
6464
constflags=this.flags;
6565
constoptIn=flags["*"];
6666
letname=grunt.option("filename");
@@ -79,7 +79,7 @@ module.exports = function( grunt ) {
7979

8080
if(flags.slim){
8181
deleteflags.slim;
82-
for(constflagofslimFlags){
82+
for(constflagofslimBuildFlags){
8383
flags[flag]=true;
8484
}
8585
}

‎build/tasks/lib/slim-build-flags.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
"use strict";
2+
3+
// NOTE: keep it in sync with test/data/testinit.js
4+
module.exports=[
5+
"-ajax",
6+
"-callbacks",
7+
"-deferred",
8+
"-effects",
9+
"-queue"
10+
];

‎test/.eslintrc.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"createDashboardXML":false,
2222
"createWithFriesXML":false,
2323
"createXMLFragment":false,
24+
"includesModule":false,
2425
"moduleTeardown":false,
2526
"url":false,
2627
"q":false,

‎test/data/testinit-jsdom.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ function url( value ) {
4242
newDate().getTime()+""+parseInt(Math.random()*100000,10);
4343
}
4444

45+
// We only run basic tests in jsdom so we don't need to repeat the logic
46+
// from the regular testinit.js
47+
this.includesModule=function(){
48+
returntrue;
49+
};
50+
4551
// The file-loading part of testinit.js#loadTests is handled by
4652
// jsdom Karma config; here we just need to trigger relevant APIs.
4753
this.loadTests=function(){

‎test/data/testinit.js

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,16 @@ var FILEPATH = "/test/data/testinit.js",
1717
supportjQuery=this.jQuery,
1818

1919
// see RFC 2606
20-
externalHost="example.com";
20+
externalHost="example.com",
21+
22+
// NOTE: keep it in sync with build/tasks/lib/slim-build-flags.js
23+
slimBuildFlags=[
24+
"-ajax",
25+
"-callbacks",
26+
"-deferred",
27+
"-effects",
28+
"-queue"
29+
];
2130

2231
this.hasPHP=true;
2332
this.isLocal=window.location.protocol==="file:";
@@ -309,6 +318,58 @@ QUnit.jQuerySelectors = true;
309318
QUnit.isIE=!!window.document.documentMode;
310319
QUnit.testUnlessIE=QUnit.isIE ?QUnit.skip :QUnit.test;
311320

321+
// Returns whether a particular module like "ajax" or "deprecated"
322+
// is included in the current jQuery build; it handles the slim build
323+
// as well. The util was created so that we don't treat presence of
324+
// particular APIs to decide whether to run a test as then if we
325+
// accidentally remove an API, the tests would still not fail.
326+
this.includesModule=function(moduleName){
327+
328+
varexcludedModulesPart,excludedModules;
329+
330+
// A short-cut for the slim build, e.g. "4.0.0-pre slim"
331+
if(jQuery.fn.jquery.indexOf(" slim")>-1){
332+
333+
// The module is included if it does NOT exist on the list
334+
// of modules excluded in the slim build
335+
returnslimBuildFlags.indexOf("-"+moduleName)===-1;
336+
}
337+
338+
// example version for `grunt custom:-deprecated`:
339+
// "4.0.0-pre -deprecated,-deprecated/ajax-event-alias,-deprecated/event"
340+
excludedModulesPart=jQuery.fn.jquery
341+
342+
// Take the flags out of the version string.
343+
// Example: "-deprecated,-deprecated/ajax-event-alias,-deprecated/event"
344+
.split(" ")[1];
345+
346+
if(!excludedModulesPart){
347+
348+
// No build part => the full build where everything is included.
349+
returntrue;
350+
}
351+
352+
excludedModules=excludedModulesPart
353+
354+
// Turn to an array.
355+
// Example: [ "-deprecated", "-deprecated/ajax-event-alias", "-deprecated/event" ]
356+
.split(",")
357+
358+
// Remove the leading "-".
359+
// Example: [ "deprecated", "deprecated/ajax-event-alias", "deprecated/event" ]
360+
.map(function(moduleName){
361+
returnmoduleName.slice(1);
362+
})
363+
364+
// Filter out deep names - ones that contain a slash.
365+
// Example: [ "deprecated" ]
366+
.filter(function(moduleName){
367+
returnmoduleName.indexOf("/")===-1;
368+
});
369+
370+
returnexcludedModules.indexOf(moduleName)===-1;
371+
};
372+
312373
this.loadTests=function(){
313374

314375
// QUnit.config is populated from QUnit.urlParams but only at the beginning

‎test/unit/ajax.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ QUnit.module( "ajax", {
1313
assert.ok(!isLocal,"Unit tests are not ran from file:// (especially in Chrome. If you must test from file:// with Chrome, run it with the --allow-file-access-from-files flag!)");
1414
});
1515

16-
if(!jQuery.ajax||(isLocal&&!hasPHP)){
16+
if(!includesModule("ajax")||(isLocal&&!hasPHP)){
1717
return;
1818
}
1919

‎test/unit/animation.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
(function(){
22

33
// Can't test what ain't there
4-
if(!jQuery.fx){
4+
if(!includesModule("effects")){
55
return;
66
}
77

‎test/unit/attributes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -921,7 +921,7 @@ QUnit.test( "val()", function( assert ) {
921921
"Select-one with only option disabled (trac-12584)"
922922
);
923923

924-
if(jQuery.fn.serialize){
924+
if(includesModule("serialize")){
925925
checks=jQuery("<input type='checkbox' name='test' value='1'/><input type='checkbox' name='test' value='2'/><input type='checkbox' name='test' value=''/><input type='checkbox' name='test'/>").appendTo("#form");
926926

927927
assert.deepEqual(checks.serialize(),"","Get unchecked values.");

‎test/unit/basic.js

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
QUnit.module("basic",{afterEach:moduleTeardown});
22

3-
if(jQuery.ajax){
3+
if(includesModule("ajax")){
44
QUnit.test("ajax",function(assert){
55
assert.expect(4);
66

@@ -33,6 +33,7 @@ QUnit.test( "ajax", function( assert ) {
3333
});
3434
}
3535

36+
if(includesModule("attributes")){
3637
QUnit.test("attributes",function(assert){
3738
assert.expect(6);
3839

@@ -51,8 +52,9 @@ QUnit.test( "attributes", function( assert ) {
5152

5253
assert.strictEqual(input.val("xyz").val(),"xyz",".val getter/setter");
5354
});
55+
}
5456

55-
if(jQuery.css){
57+
if(includesModule("css")){
5658
QUnit.test("css",function(assert){
5759
assert.expect(1);
5860

@@ -62,7 +64,7 @@ QUnit.test( "css", function( assert ) {
6264
});
6365
}
6466

65-
if(jQuery.fn.show&&jQuery.fn.hide){
67+
if(includesModule("css")){
6668
QUnit.test("show/hide",function(assert){
6769
assert.expect(2);
6870

@@ -123,6 +125,7 @@ QUnit.test( "core", function( assert ) {
123125
2,"jQuery.parseHTML");
124126
});
125127

128+
if(includesModule("data")){
126129
QUnit.test("data",function(assert){
127130
assert.expect(4);
128131

@@ -133,7 +136,9 @@ QUnit.test( "data", function( assert ) {
133136
assert.strictEqual(elem.data("c"),"d",".data from data-* attributes");
134137
assert.ok(jQuery.hasData(elem[0]),"jQuery.hasData - true");
135138
});
139+
}
136140

141+
if(includesModule("dimensions")){
137142
QUnit.test("dimensions",function(assert){
138143
assert.expect(3);
139144

@@ -145,7 +150,9 @@ QUnit.test( "dimensions", function( assert ) {
145150
assert.strictEqual(elem.innerWidth(),64,".innerWidth getter");
146151
assert.strictEqual(elem.outerWidth(),68,".outerWidth getter");
147152
});
153+
}
148154

155+
if(includesModule("event")){
149156
QUnit.test("event",function(assert){
150157
assert.expect(1);
151158

@@ -162,7 +169,9 @@ QUnit.test( "event", function( assert ) {
162169
})
163170
.trigger("click");
164171
});
172+
}
165173

174+
if(includesModule("manipulation")){
166175
QUnit.test("manipulation",function(assert){
167176
assert.expect(5);
168177

@@ -195,6 +204,9 @@ QUnit.test( "manipulation", function( assert ) {
195204
".after/.before"
196205
);
197206
});
207+
}
208+
209+
if(includesModule("offset")){
198210

199211
// Support: jsdom 13.2+
200212
// jsdom returns 0 for offset-related properties
@@ -208,6 +220,7 @@ QUnit[ /jsdom\//.test( navigator.userAgent ) ? "skip" : "test" ]( "offset", func
208220
assert.strictEqual(elem.position().top,5,".position getter");
209221
assert.strictEqual(elem.offsetParent()[0],parent[0],".offsetParent");
210222
});
223+
}
211224

212225
QUnit.test("selector",function(assert){
213226
assert.expect(2);
@@ -219,6 +232,7 @@ QUnit.test( "selector", function( assert ) {
219232
assert.strictEqual(elem.find("span.b a")[0].nodeName,"A",".find - one result");
220233
});
221234

235+
if(includesModule("serialize")){
222236
QUnit.test("serialize",function(assert){
223237
assert.expect(2);
224238

@@ -232,6 +246,7 @@ QUnit.test( "serialize", function( assert ) {
232246
"&select1=&select2=3&select3=1&select3=2&select5=3",
233247
"form serialization as query string");
234248
});
249+
}
235250

236251
QUnit.test("traversing",function(assert){
237252
assert.expect(12);
@@ -253,6 +268,7 @@ QUnit.test( "traversing", function( assert ) {
253268
assert.strictEqual(elem.contents()[3].nodeType,3,".contents");
254269
});
255270

271+
if(includesModule("wrap")){
256272
QUnit.test("wrap",function(assert){
257273
assert.expect(3);
258274

@@ -283,3 +299,4 @@ QUnit.test( "wrap", function( assert ) {
283299
);
284300

285301
});
302+
}

‎test/unit/callbacks.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ QUnit.module( "callbacks", {
44

55
(function(){
66

7-
if(!jQuery.Callbacks){
7+
if(!includesModule("callbacks")){
88
return;
99
}
1010

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp