123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 |
- /*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();
- });
- });
- });
- });
- });
- });
|