diff options
author | Timmy Willison <timmywil@users.noreply.github.com> | 2023-09-18 12:39:00 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-18 12:39:00 -0400 |
commit | 2bdecf8b7bd10864e5337a4e24e39476c78cf23a (patch) | |
tree | 4685fc5ca912e368c294a3949c7ef5b663fec980 /build/tasks/node_smoke_tests.js | |
parent | f75daab09102a4dd5107deadb55d4a169f86254a (diff) | |
download | jquery-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.js | 97 |
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(); |