| 'use strict'; |
| const common = require('../common'); |
| const assert = require('assert'); |
| const dc = require('diagnostics_channel'); |
| const { pathToFileURL } = require('url'); |
| |
| const trace = dc.tracingChannel('module.import'); |
| const events = []; |
| let lastEvent; |
| |
| function track(name) { |
| return common.mustCall((event) => { |
| // Verify every event after the first is the same object |
| if (events.length) { |
| assert.strictEqual(event, lastEvent); |
| } |
| lastEvent = event; |
| |
| events.push({ name, ...event }); |
| }); |
| } |
| |
| trace.subscribe({ |
| start: common.mustCall(track('start')), |
| end: common.mustCall(track('end')), |
| asyncStart: common.mustCall(track('asyncStart')), |
| asyncEnd: common.mustCall(track('asyncEnd')), |
| error: common.mustCall(track('error')), |
| }); |
| |
| assert.rejects(import('does-not-exist'), (error) => { |
| const expectedParentURL = pathToFileURL(module.filename).href; |
| // Verify order and contents of each event |
| assert.deepStrictEqual(events, [ |
| { |
| name: 'start', |
| parentURL: expectedParentURL, |
| url: 'does-not-exist', |
| }, |
| { |
| name: 'end', |
| parentURL: expectedParentURL, |
| url: 'does-not-exist', |
| }, |
| { |
| name: 'error', |
| parentURL: expectedParentURL, |
| url: 'does-not-exist', |
| error, |
| }, |
| { |
| name: 'asyncStart', |
| parentURL: expectedParentURL, |
| url: 'does-not-exist', |
| error, |
| }, |
| { |
| name: 'asyncEnd', |
| parentURL: expectedParentURL, |
| url: 'does-not-exist', |
| error, |
| }, |
| ]); |
| return true; |
| }).then(common.mustCall()); |