'use strict'; const common = require('../../common'); const assert = require('assert'); const path = require('path'); const helper = require('../../common/report.js'); const tmpdir = require('../../common/tmpdir'); const binding = path.resolve(__dirname, `./build/${common.buildType}/binding`); const addon = require(binding); function myAddonMain(method, { hasIsolate, hasEnv }) { tmpdir.refresh(); process.report.directory = tmpdir.path; addon[method](); const reports = helper.findReports(process.pid, tmpdir.path); assert.strictEqual(reports.length, 1); const report = reports[0]; helper.validate(report, [ ['header.event', 'FooMessage'], ['header.trigger', 'BarTrigger'], ]); const content = require(report); // Check that the javascript stack is present. if (hasIsolate) { assert.strictEqual(content.javascriptStack.stack.findIndex((frame) => frame.match('myAddonMain')), 0); } else { assert.strictEqual(content.javascriptStack, undefined); } if (hasEnv) { assert.strictEqual(content.header.threadId, 0); } else { assert.strictEqual(content.header.threadId, null); } } const methods = [ ['triggerReport', true, true], ['triggerReportNoIsolate', false, false], ['triggerReportEnv', true, true], ['triggerReportNoEnv', false, false], ['triggerReportNoContext', true, false], ['triggerReportNewContext', true, false], ]; for (const [method, hasIsolate, hasEnv] of methods) { myAddonMain(method, { hasIsolate, hasEnv }); }