text: // Flags: --no-warnings
  // The flag suppresses stderr output but the warning event will still emit
  'use strict';
  
  const common = require('../common');
  const assert = require('assert');
  const util = require('util');
  
  process.on('warning', common.mustCall((warning) => {
    assert(warning);
    assert(/^(Warning|CustomWarning)/.test(warning.name));
    assert(warning.message, 'A Warning');
  }, 3));
  
  process.emitWarning('A Warning');
  process.emitWarning('A Warning', 'CustomWarning');
  
  function CustomWarning() {
    Error.call(this);
    this.name = 'CustomWarning';
    this.message = 'A Warning';
    Error.captureStackTrace(this, CustomWarning);
  }
  util.inherits(CustomWarning, Error);
  process.emitWarning(new CustomWarning());
  
  // TypeError is thrown on invalid output
  assert.throws(() => process.emitWarning(1), TypeError);
  assert.throws(() => process.emitWarning({}), TypeError);
  