364 lines
12 KiB
JavaScript
Executable File
364 lines
12 KiB
JavaScript
Executable File
/*global describe, before, it, after*/
|
|
|
|
"use strict";
|
|
|
|
var fs = require("fs");
|
|
var path = require("path");
|
|
var colors = require("colors");
|
|
var cwd = process.cwd();
|
|
|
|
var chai = require('chai');
|
|
var expect = chai.expect;
|
|
var nexpect = require("nexpect");
|
|
|
|
var tests = "adownload, ambientlight, apng, appearance, applicationcache, arrow, atobbtoa, audio, audioautoplay, audioloop, audiopreload, backdropfilter, backgroundblendmode, backgroundcliptext, backgroundsize, batteryapi, bdi, beacon, bgpositionshorthand, bgpositionxy, bgrepeatround, bgrepeatspace, bgsizecover, blobconstructor, bloburls, blobworkers, borderimage, borderradius, boxdecorationbreak, boxshadow, boxsizing, canvas, canvasblending, canvastext, canvaswinding, capture, checked, classlist, connectioneffectivetype, contains, contenteditable, contextmenu, cookies, cors, createelement-attrs, createelementattrs, cryptography, cssall, cssanimations, csscalc, csschunit, csscolumns, cssescape, cssexunit, cssfilters, cssgradients, cssgrid, cssgridlegacy, csshyphens, cssinvalid, cssmask, csspointerevents, csspositionsticky, csspseudoanimations, csspseudotransitions, cssreflections, cssremunit, cssresize, cssscrollbar, csstransforms, csstransforms3d, csstransformslevel2, csstransitions, cssvalid, cssvhunit, cssvmaxunit, cssvminunit, cssvwunit, cubicbezierrange, customelements, customevent, customproperties, customprotocolhandler, dart, datachannel, datalistelem, dataset, datauri, dataview, dataworkers, details, devicemotion, deviceorientation, directory, display-runin, displaytable, documentfragment, ellipsis, emoji, es5, es5array, es5date, es5function, es5object, es5string, es5syntax, es5undefined, es6array, es6collections, es6math, es6number, es6object, es6string, eventlistener, eventsource, exiforientation, fetch, fileinput, filereader, filesystem, flash, flexbox, flexboxlegacy, flexboxtweener, flexwrap, focuswithin, fontdisplay, fontface, forcetouch, formattribute, formvalidation, framed, fullscreen, gamepads, generatedcontent, generators, geolocation, getrandomvalues, getusermedia, hairline, hashchange, hidden, hiddenscroll, history, hovermq, hsla, htmlimports, ie8compat, imgcrossorigin, indexeddb, indexeddbblob, inlinesvg, input, inputformaction, inputformenctype, inputformmethod, inputformnovalidate, inputformtarget, inputsearchevent, inputtypes, intersectionobserver, intl, jpeg2000, jpegxr, json, lastchild, ligatures, localizednumber, localstorage, lowbandwidth, lowbattery, matchmedia, mathml, mediaqueries, mediasource, messagechannel, meter, microdata, multiplebgs, mutationobserver, notification, nthchild, objectfit, olreversed, oninput, opacity, outputelem, overflowscrolling, pagevisibility, passiveeventlisteners, peerconnection, performance, picture, placeholder, pointerevents, pointerlock, pointermq, postmessage, preserve3d, progressbar, promises, proximity, publicKeyCredential, queryselector, quotamanagement, regions, requestanimationframe, requestautocomplete, rgba, ruby, sandbox, scriptasync, scriptdefer, scrollsnappoints, seamless, serviceworker, sessionstorage, shapes, sharedworkers, siblinggeneral, sizes, smil, softhyphens, softhyphensfind, speechrecognition, speechsynthesis, srcdoc, srcset, strictmode, stylescoped, subpixelfont, supports, svg, svgasimg, svgclippaths, svgfilters, svgforeignobject, target, template, templatestrings, textalignlast, textareamaxlength, textdecoration, textshadow, texttrackapi, time, todataurljpeg, todataurlpng, todataurlwebp, touchevents, track, transferables, typedarrays, unicode, unicoderange, unknownelements, urlparser, urlsearchparams, userdata, userselect, variablefonts, vibrate, video, videoautoplay, videocrossorigin, videoloop, videopreload, vml, webanimations, webaudio, webgl, webglextensions, webintents, webp, webp-lossless, webpalpha, webpanimation, webplossless, websockets, websocketsbinary, websqldatabase, webworkers, willchange, wrapflow, xdomainrequest, xhr2, xhrresponsetype, xhrresponsetypearraybuffer, xhrresponsetypeblob, xhrresponsetypedocument, xhrresponsetypejson, xhrresponsetypetext";
|
|
var testArray = tests.split(", ");
|
|
|
|
var cli = path.join(cwd, "bin", "customizr");
|
|
var settingsPath = path.join(cwd, "test", "settings");
|
|
|
|
var settings = {
|
|
cache: path.join(settingsPath, "cache-invalidate.json"),
|
|
custom: path.join(settingsPath, "custom.json"),
|
|
exclude: path.join(settingsPath, "exclude.json"),
|
|
prefixed: path.join(settingsPath, "prefixed.json"),
|
|
select: path.join(settingsPath, "select.json")
|
|
};
|
|
|
|
describe("customizr", function () {
|
|
var testsLength = testArray.length,
|
|
existingBuild = path.join(cwd, "build", "modernizr-custom.js");
|
|
|
|
it("should find all available tests in project", function (done) {
|
|
process.stdout.write("\n\n");
|
|
|
|
nexpect.spawn(cli, [
|
|
"--config", settings.custom
|
|
], {
|
|
stripColors: true
|
|
})
|
|
.wait("Looking for Modernizr references")
|
|
|
|
.wait(">> " + testsLength + " matches in")
|
|
.expect(">> " + tests)
|
|
|
|
.expect(">> " + testsLength + " matches in")
|
|
.expect(">> " + tests)
|
|
|
|
.expect(">> " + testsLength + " matches in")
|
|
.expect(">> " + tests)
|
|
|
|
.expect(">> Ready to build using these settings:")
|
|
|
|
.wait("Building your customized Modernizr").wait("OK")
|
|
.expect(">> Success! Saved file to build/modernizr-custom.js")
|
|
|
|
.run(function (err) {
|
|
if (!err) {
|
|
done();
|
|
} else {
|
|
throw err;
|
|
}
|
|
});
|
|
});
|
|
|
|
it("should avoid re-building a cached Modernizr build", function (done) {
|
|
process.stdout.write("\n\n");
|
|
|
|
nexpect.spawn(cli, [
|
|
"--config", settings.custom
|
|
], {
|
|
stripColors: true
|
|
})
|
|
.wait("Looking for Modernizr references")
|
|
|
|
.wait(">> " + testsLength + " matches in")
|
|
.expect(">> " + tests)
|
|
|
|
.expect(">> " + testsLength + " matches in")
|
|
.expect(">> " + tests)
|
|
|
|
.expect(">> " + testsLength + " matches in")
|
|
.expect(">> " + tests)
|
|
|
|
.expect("No config or test changes detected")
|
|
.expect(">> The build step has been bypassed. Use `--force` to override.")
|
|
.expect(">> Your current file can be found in build/modernizr-custom.js")
|
|
|
|
.run(function (err) {
|
|
if (!err) {
|
|
done();
|
|
} else {
|
|
throw err;
|
|
}
|
|
});
|
|
});
|
|
|
|
it("should force re-building a cached Modernizr build", function (done) {
|
|
process.stdout.write("\n\n");
|
|
|
|
nexpect.spawn(cli, [
|
|
"--config", settings.custom,
|
|
"--force"
|
|
], {
|
|
stripColors: true
|
|
})
|
|
.wait("Looking for Modernizr references")
|
|
|
|
.wait(">> " + testsLength + " matches in")
|
|
.expect(">> " + tests)
|
|
|
|
.expect(">> " + testsLength + " matches in")
|
|
.expect(">> " + tests)
|
|
|
|
.expect(">> " + testsLength + " matches in")
|
|
.expect(">> " + tests)
|
|
|
|
.expect(">> Ready to build using these settings:")
|
|
|
|
.wait("Building your customized Modernizr").wait("OK")
|
|
.expect(">> Success! Saved file to build/modernizr-custom.js")
|
|
|
|
.run(function (err) {
|
|
if (!err) {
|
|
done();
|
|
} else {
|
|
throw err;
|
|
}
|
|
});
|
|
});
|
|
|
|
it("should invalidate a cached Modernizr build", function (done) {
|
|
process.stdout.write("\n\n");
|
|
|
|
nexpect.spawn(cli, [
|
|
"--config", settings.cache
|
|
], {
|
|
stripColors: true
|
|
})
|
|
.wait("Looking for Modernizr references")
|
|
|
|
.wait(">> " + testsLength + " matches in")
|
|
.expect(">> " + tests)
|
|
|
|
.expect(">> " + testsLength + " matches in")
|
|
.expect(">> " + tests)
|
|
|
|
.expect(">> " + testsLength + " matches in")
|
|
.expect(">> " + tests)
|
|
|
|
.expect(">> Ready to build using these settings:")
|
|
|
|
.wait("Building your customized Modernizr").wait("OK")
|
|
.expect(">> Success! Saved file to build/modernizr-custom.js")
|
|
|
|
.run(function (err) {
|
|
if (!err) {
|
|
done();
|
|
} else {
|
|
throw err;
|
|
}
|
|
});
|
|
});
|
|
|
|
describe("should include all tests", function () {
|
|
var contents;
|
|
|
|
testArray.forEach(function (test) {
|
|
it(test, function (done) {
|
|
contents = contents || fs.readFileSync(existingBuild, "utf8");
|
|
expect(contents.indexOf(test)).to.not.equal(-1);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("custom builds", function () {
|
|
describe("declared tests", function () {
|
|
|
|
it("should only build declared tests", function (done) {
|
|
process.stdout.write("\n\n");
|
|
|
|
nexpect.spawn(cli, [
|
|
"--config", settings.select
|
|
], {
|
|
stripColors: true
|
|
})
|
|
|
|
.wait(">> Explicitly including these tests:")
|
|
.expect(">> siblinggeneral, svg, webintents")
|
|
|
|
.expect("Skipping file traversal")
|
|
|
|
.wait("Building your customized Modernizr").wait("OK")
|
|
.expect(">> Success! Saved file to build/modernizr-select.js")
|
|
|
|
.run(function (err) {
|
|
if (!err) {
|
|
done();
|
|
} else {
|
|
throw err;
|
|
}
|
|
});
|
|
});
|
|
|
|
describe("should only contain references to bundled tests", function () {
|
|
|
|
var includedTestArray = [
|
|
"webintents",
|
|
"siblinggeneral",
|
|
"svg"
|
|
];
|
|
|
|
var testsLength = includedTestArray.length;
|
|
var includedTests = includedTestArray.join(" ");
|
|
|
|
var contents;
|
|
|
|
includedTestArray.forEach(function (test) {
|
|
it(test, function (done) {
|
|
contents = contents || fs.readFileSync(path.join(cwd, "build", "modernizr-select.js"), "utf8");
|
|
expect(contents.indexOf(test)).to.not.equal(-1);
|
|
done();
|
|
});
|
|
});
|
|
|
|
describe("should not contain these references", function (done) {
|
|
var excludedTestArray = testArray.filter(function (test) {
|
|
return includedTestArray.indexOf(test) === -1;
|
|
});
|
|
|
|
excludedTestArray.forEach(function (test) {
|
|
it(test, function (done) {
|
|
contents = contents || fs.readFileSync(path.join(cwd, "build", "modernizr-select.js"), "utf8");
|
|
|
|
var testPattern = "addTest('" + test.toLowerCase();
|
|
expect(contents.indexOf(testPattern)).to.equal(-1);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
describe("excluded tests", function () {
|
|
|
|
it("should build without excluded tests", function (done) {
|
|
process.stdout.write("\n\n");
|
|
|
|
nexpect.spawn(cli, [
|
|
"--config", settings.exclude
|
|
], {
|
|
stripColors: true
|
|
})
|
|
|
|
.wait(">> Explicitly excluding these tests:")
|
|
.expect(">> applicationcache, emoji, notification")
|
|
|
|
.wait("Building your customized Modernizr").wait("OK")
|
|
.expect(">> Success! Saved file to build/modernizr-exclude.js")
|
|
|
|
.run(function (err) {
|
|
if (!err) {
|
|
done();
|
|
} else {
|
|
throw err;
|
|
}
|
|
});
|
|
});
|
|
|
|
describe("should not contain references to excluded tests", function () {
|
|
|
|
var excludedTestArray = [
|
|
"applicationcache",
|
|
"emoji",
|
|
"notification"
|
|
];
|
|
|
|
var testsLength = excludedTestArray.length;
|
|
var excludedTests = excludedTestArray.join(" ");
|
|
|
|
var contents;
|
|
|
|
excludedTestArray.forEach(function (test) {
|
|
it(test, function (done) {
|
|
contents = contents || fs.readFileSync(path.join(cwd, "build", "modernizr-exclude.js"), "utf8");
|
|
expect(contents.indexOf(test)).to.equal(-1);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
describe("prefix test", function () {
|
|
|
|
it("should honor the specified prefix", function (done) {
|
|
process.stdout.write("\n\n");
|
|
|
|
nexpect.spawn(cli, [
|
|
"--config", settings.prefixed
|
|
], {
|
|
stripColors: true
|
|
})
|
|
|
|
.wait("Looking for Modernizr references")
|
|
|
|
.expect(">> 3 matches in test/css/vanilla.css")
|
|
.expect(">> cors, input, smil")
|
|
|
|
.wait("Building your customized Modernizr").wait("OK")
|
|
.expect(">> Success! Saved file to build/modernizr-prefixed.js")
|
|
|
|
.run(function (err) {
|
|
if (!err) {
|
|
done();
|
|
} else {
|
|
throw err;
|
|
}
|
|
});
|
|
});
|
|
|
|
describe("should only contain references to bundled tests", function () {
|
|
|
|
var includedTestArray = [
|
|
"cors",
|
|
"input",
|
|
"smil"
|
|
];
|
|
|
|
var testsLength = includedTestArray.length;
|
|
var includedTests = includedTestArray.join(" ");
|
|
|
|
var contents;
|
|
|
|
includedTestArray.forEach(function (test) {
|
|
it(test, function (done) {
|
|
contents = contents || fs.readFileSync(path.join(cwd, "build", "modernizr-prefixed.js"), "utf8");
|
|
expect(contents.indexOf(test)).to.not.equal(-1);
|
|
done();
|
|
});
|
|
});
|
|
|
|
describe("should not contain these references", function (done) {
|
|
var excludedTestArray = testArray.filter(function (test) {
|
|
return includedTestArray.indexOf(test) === -1;
|
|
});
|
|
|
|
excludedTestArray.forEach(function (test) {
|
|
it(test, function (done) {
|
|
contents = contents || fs.readFileSync(path.join(cwd, "build", "modernizr-prefixed.js"), "utf8");
|
|
|
|
var testPattern = "addTest('" + test.toLowerCase();
|
|
expect(contents.indexOf(testPattern)).to.equal(-1);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
});
|
|
});
|