'use strict';
require('../common');
const assert = require('assert');
const { spawnSync } = require('child_process');

// --warnings is on by default.
assertHasWarning(spawnWithFlags([]));

// --warnings can be passed alone.
assertHasWarning(spawnWithFlags(['--warnings']));

// --no-warnings can be passed alone.
assertHasNoWarning(spawnWithFlags(['--no-warnings']));

// Last flag takes precedence.
assertHasWarning(spawnWithFlags(['--no-warnings', '--warnings']));

// Non-boolean flags cannot be negated.
assert(spawnWithFlags(['--no-max-http-header-size']).stderr.toString().includes(
  '--no-max-http-header-size is an invalid negation because it is not ' +
  'a boolean option',
));

// Inexistant flags cannot be negated.
assert(spawnWithFlags(['--no-i-dont-exist']).stderr.toString().includes(
  'bad option: --no-i-dont-exist',
));

function spawnWithFlags(flags) {
  return spawnSync(process.execPath, [...flags, '-e', 'new Buffer(0)']);
}

function assertHasWarning(proc) {
  assert(proc.stderr.toString().includes('Buffer() is deprecated'));
}

function assertHasNoWarning(proc) {
  assert(!proc.stderr.toString().includes('Buffer() is deprecated'));
}
