'use strict';
const common = require('../common');

common.skipIfInspectorDisabled();

const fixtures = require('../common/fixtures');
const startCLI = require('../common/debugger');

const assert = require('assert');
const fs = require('fs');
const path = require('path');

const cli = startCLI(['--port=0', fixtures.path('debugger/empty.js')]);

const rootDir = path.resolve(__dirname, '..', '..');

(async () => {
  await cli.waitForInitialBreak();
  await cli.waitForPrompt();
  await cli.command('profile');
  await cli.command('profileEnd');
  assert.match(cli.output, /\[Profile \d+μs\]/);
  await cli.command('profiles');
  assert.match(cli.output, /\[ \[Profile \d+μs\] \]/);
  await cli.command('profiles[0].save()');
  assert.match(cli.output, /Saved profile to .*node\.cpuprofile/);

  const cpuprofile = path.resolve(rootDir, 'node.cpuprofile');
  const data = JSON.parse(fs.readFileSync(cpuprofile, 'utf8'));
  assert.strictEqual(Array.isArray(data.nodes), true);

  fs.rmSync(cpuprofile);
})()
.then(common.mustCall())
.finally(() => cli.quit());
