aboutsummaryrefslogtreecommitdiffstats
path: root/build/tasks/node_smoke_tests.js
diff options
context:
space:
mode:
authorTimmy Willison <timmywil@users.noreply.github.com>2023-09-18 12:39:00 -0400
committerGitHub <noreply@github.com>2023-09-18 12:39:00 -0400
commit2bdecf8b7bd10864e5337a4e24e39476c78cf23a (patch)
tree4685fc5ca912e368c294a3949c7ef5b663fec980 /build/tasks/node_smoke_tests.js
parentf75daab09102a4dd5107deadb55d4a169f86254a (diff)
downloadjquery-2bdecf8b7bd10864e5337a4e24e39476c78cf23a.tar.gz
jquery-2bdecf8b7bd10864e5337a4e24e39476c78cf23a.zip
Build: migrate most grunt tasks off of grunt
Updated tasks include: - lint - npmcopy - build, minify, and process for distribution. - new custom build command using yargs - compare size of minified/gzip built files - pretest scripts, including qunit-fixture, babel transpilation, and npmcopy - node smoke tests - promises aplus tests - new watch task using `rollup.watch` directly Also: - upgraded husky and added the new lint command - updated lint config to use new "flat" config format. See https://eslint.org/docs/latest/use/configure/configuration-files-new - Temporarily disabled one lint rule until flat config is supported by eslint-plugin-import. See https://github.com/import-js/eslint-plugin-import/issues/2556 - committed package-lock.json - updated all test scripts to use the new build - added an express test server that uses middleware-mockserver (this can be used to run tests without karma) - build-all-variants is now build:all Close gh-5318
Diffstat (limited to 'build/tasks/node_smoke_tests.js')
-rw-r--r--build/tasks/node_smoke_tests.js97
1 files changed, 48 insertions, 49 deletions
diff --git a/build/tasks/node_smoke_tests.js b/build/tasks/node_smoke_tests.js
index 7edbac881..5aa7660b0 100644
--- a/build/tasks/node_smoke_tests.js
+++ b/build/tasks/node_smoke_tests.js
@@ -1,51 +1,50 @@
"use strict";
-module.exports = ( grunt ) => {
- const fs = require( "fs" );
- const spawnTest = require( "./lib/spawn_test.js" );
- const nodeV16OrNewer = !/^v1[0-5]\./.test( process.version );
-
- grunt.registerTask( "node_smoke_tests", function( moduleType, jQueryModuleSpecifier ) {
- if (
- ( moduleType !== "commonjs" && moduleType !== "module" ) ||
- !jQueryModuleSpecifier
- ) {
- grunt.fatal( "Use `node_smoke_tests:commonjs:JQUERY` " +
- "or `node_smoke_tests:module:JQUERY.\n" +
- "JQUERY can be `jquery`, `jquery/slim` or a path to any of them." );
- }
-
- if ( !nodeV16OrNewer ) {
- grunt.log.writeln( "Old Node.js detected, running the task " +
- `"node_smoke_tests:${ moduleType }:${ jQueryModuleSpecifier }" skipped...` );
- return;
- }
-
- const testsDir = `./test/node_smoke_tests/${ moduleType }`;
- const nodeSmokeTests = [];
-
- // Fire up all tests defined in test/node_smoke_tests/*.js in spawned sub-processes.
- // All the files under test/node_smoke_tests/*.js are supposed to exit with 0 code
- // on success or another one on failure. Spawning in sub-processes is
- // important so that the tests & the main process don't interfere with
- // each other, e.g. so that they don't share the `require` cache.
-
- fs.readdirSync( testsDir )
- .filter( ( testFilePath ) =>
- fs.statSync( `${ testsDir }/${ testFilePath }` ).isFile() &&
- /\.[cm]?js$/.test( testFilePath )
- )
- .forEach( ( testFilePath ) => {
- const taskName = `node_${ testFilePath.replace( /\.[cm]?js$/, "" ) }:${ moduleType }:${ jQueryModuleSpecifier }`;
-
- grunt.registerTask( taskName, function() {
- spawnTest( this.async(), `node "${ testsDir }/${
- testFilePath }" ${ jQueryModuleSpecifier }` );
- } );
-
- nodeSmokeTests.push( taskName );
- } );
-
- grunt.task.run( nodeSmokeTests );
- } );
-};
+const fs = require( "fs" );
+const util = require( "util" );
+const exec = util.promisify( require( "child_process" ).exec );
+const verifyNodeVersion = require( "./lib/verifyNodeVersion" );
+
+const allowedModules = [ "commonjs", "module" ];
+
+if ( !verifyNodeVersion() ) {
+ return;
+}
+
+// Fire up all tests defined in test/node_smoke_tests/*.js in spawned sub-processes.
+// All the files under test/node_smoke_tests/*.js are supposed to exit with 0 code
+// on success or another one on failure. Spawning in sub-processes is
+// important so that the tests & the main process don't interfere with
+// each other, e.g. so that they don't share the `require` cache.
+
+async function runTests( sourceType, module ) {
+ if ( !allowedModules.includes( sourceType ) ) {
+ throw new Error(
+ `Usage: \`node_smoke_tests [${allowedModules.join( "|" )}]:JQUERY\``
+ );
+ }
+ const dir = `./test/node_smoke_tests/${sourceType}`;
+ const files = await fs.promises.readdir( dir, { withFileTypes: true } );
+ const testFiles = files.filter( ( testFilePath ) => testFilePath.isFile() );
+ await Promise.all(
+ testFiles.map( ( testFile ) =>
+ exec( `node "${dir}/${testFile.name}" "${module}"` )
+ )
+ );
+ console.log( `Node smoke tests passed for ${sourceType} "${module}".` );
+}
+
+async function runDefaultTests() {
+ await Promise.all( [
+ runTests( "commonjs", "jquery" ),
+ runTests( "commonjs", "jquery/slim" ),
+ runTests( "commonjs", "./dist/jquery.js" ),
+ runTests( "commonjs", "./dist/jquery.slim.js" ),
+ runTests( "module", "jquery" ),
+ runTests( "module", "jquery/slim" ),
+ runTests( "module", "./dist-module/jquery.module.js" ),
+ runTests( "module", "./dist-module/jquery.slim.module.js" )
+ ] );
+}
+
+runDefaultTests();