| 'use strict'; |
| // This tests that sync and async hooks can be mixed. |
| |
| require('../common'); |
| const { spawnSyncAndAssert } = require('../common/child_process'); |
| const fixtures = require('../common/fixtures'); |
| |
| const app = fixtures.path('module-hooks', 'sync-and-async', 'app.js'); |
| |
| const testCases = [ |
| // When mixing sync and async hooks, the sync ones always run first. |
| { preload: ['sync-customize', 'async-customize'], stdout: 'customized by sync hook' }, |
| { preload: ['async-customize', 'sync-customize'], stdout: 'customized by sync hook' }, |
| // It should still work when neither hook does any customization. |
| { preload: ['sync-forward', 'async-forward'], stdout: 'Hello world' }, |
| { preload: ['async-forward', 'sync-forward'], stdout: 'Hello world' }, |
| // It should work when only one hook is customizing. |
| { preload: ['sync-customize', 'async-forward'], stdout: 'customized by sync hook' }, |
| { preload: ['async-customize', 'sync-forward'], stdout: 'customized by async hook' }, |
| ]; |
| |
| |
| for (const { preload, stdout } of testCases) { |
| const importArgs = []; |
| for (const p of preload) { |
| importArgs.push('--import', fixtures.fileURL(`module-hooks/sync-and-async/${p}.js`)); |
| } |
| spawnSyncAndAssert(process.execPath, [...importArgs, app], { |
| stdout, |
| trim: true, |
| }); |
| } |