'use strict'; const common = require('../common'); const assert = require('assert'); common.expectWarning( 'DeprecationWarning', 'assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DEP0094' ); // Two args only, operator defaults to '!=' assert.throws(() => { assert.fail('first', 'second'); }, { code: 'ERR_ASSERTION', name: 'AssertionError', message: '\'first\' != \'second\'', operator: '!=', actual: 'first', expected: 'second', generatedMessage: true }); // Three args assert.throws(() => { assert.fail('ignored', 'ignored', 'another custom message'); }, { code: 'ERR_ASSERTION', name: 'AssertionError', message: 'another custom message', operator: 'fail', actual: 'ignored', expected: 'ignored', generatedMessage: false }); // Three args with custom Error assert.throws(() => { assert.fail(typeof 1, 'object', new TypeError('another custom message')); }, { name: 'TypeError', message: 'another custom message' }); // No third arg (but a fourth arg) assert.throws(() => { assert.fail('first', 'second', undefined, 'operator'); }, { code: 'ERR_ASSERTION', name: 'AssertionError', message: '\'first\' operator \'second\'', operator: 'operator', actual: 'first', expected: 'second' }); // The stackFrameFunction should exclude the foo frame assert.throws( function foo() { assert.fail('first', 'second', 'message', '!==', foo); }, (err) => !/^\s*at\sfoo\b/m.test(err.stack) );