userland: add archive tools and pinned GoAWK, esbuild, and QuickJS
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
// This test verifies that:
|
||||
// - a running service will not prevent NodeJS to exit if there is no compilation in progress.
|
||||
// - the NodeJS process will continue running if there is a serve() active or a transform or build in progress.
|
||||
|
||||
const assert = require('assert')
|
||||
const { fork } = require('child_process');
|
||||
|
||||
// The tests to run in the child process
|
||||
async function tests() {
|
||||
const esbuild = require('./esbuild').installForTests()
|
||||
|
||||
async function testTransform() {
|
||||
const t1 = await esbuild.transform(`1+2`)
|
||||
const t2 = await esbuild.transform(`1+3`)
|
||||
assert.strictEqual(t1.code, `1 + 2;\n`)
|
||||
assert.strictEqual(t2.code, `1 + 3;\n`)
|
||||
}
|
||||
|
||||
async function testServe() {
|
||||
const context = await esbuild.context({})
|
||||
try {
|
||||
const server = await context.serve({})
|
||||
assert(server.hosts.includes('127.0.0.1'))
|
||||
assert.strictEqual(typeof server.port, 'number')
|
||||
} finally {
|
||||
await context.dispose()
|
||||
}
|
||||
}
|
||||
|
||||
async function testBuild() {
|
||||
const context = await esbuild.context({
|
||||
stdin: { contents: '1+2' },
|
||||
write: false,
|
||||
})
|
||||
try {
|
||||
|
||||
const result = await context.rebuild()
|
||||
assert.deepStrictEqual(result.outputFiles.length, 1);
|
||||
assert.deepStrictEqual(result.outputFiles[0].text, '1 + 2;\n');
|
||||
|
||||
const result2 = await context.rebuild()
|
||||
assert.deepStrictEqual(result2.outputFiles.length, 1);
|
||||
assert.deepStrictEqual(result2.outputFiles[0].text, '1 + 2;\n');
|
||||
} finally {
|
||||
await context.dispose()
|
||||
}
|
||||
}
|
||||
|
||||
async function testWatchAndIncremental() {
|
||||
const context = await esbuild.context({
|
||||
stdin: { contents: '1+2' },
|
||||
write: false,
|
||||
})
|
||||
try {
|
||||
await context.watch()
|
||||
|
||||
const result = await context.rebuild()
|
||||
assert.deepStrictEqual(result.outputFiles.length, 1);
|
||||
assert.deepStrictEqual(result.outputFiles[0].text, '1 + 2;\n');
|
||||
|
||||
} finally {
|
||||
await context.dispose()
|
||||
}
|
||||
}
|
||||
|
||||
await testTransform()
|
||||
await testServe()
|
||||
await testBuild()
|
||||
await testWatchAndIncremental()
|
||||
}
|
||||
|
||||
// Called when this is the child process to run the tests.
|
||||
function runTests() {
|
||||
process.exitCode = 1;
|
||||
tests().then(() => {
|
||||
process.exitCode = 0;
|
||||
}, (error) => {
|
||||
console.error('❌', error)
|
||||
});
|
||||
}
|
||||
|
||||
// A child process need to be started to verify that a running service is not hanging node.
|
||||
function startChildProcess() {
|
||||
const child = fork(__filename, ['__forked__'], { stdio: 'inherit', env: process.env });
|
||||
|
||||
const timeout = setTimeout(() => {
|
||||
console.error('❌ node unref test timeout - child_process.unref() broken?')
|
||||
process.exit(1);
|
||||
}, 5 * 60 * 1000);
|
||||
|
||||
child.on('error', (error) => {
|
||||
console.error('❌', error);
|
||||
process.exit(1);
|
||||
})
|
||||
|
||||
child.on('exit', (code) => {
|
||||
clearTimeout(timeout);
|
||||
if (code) {
|
||||
console.error(`❌ node unref tests failed: child exited with code ${code}`)
|
||||
process.exit(1);
|
||||
} else {
|
||||
console.log(`✅ node unref tests passed`)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (process.argv[2] === '__forked__') {
|
||||
runTests();
|
||||
} else {
|
||||
startChildProcess();
|
||||
}
|
||||
Reference in New Issue
Block a user