'use strict'; const common = require('../../common'); const test_error = require(`./build/${common.buildType}/test_error`); const assert = require('assert'); const theError = new Error('Some error'); const theTypeError = new TypeError('Some type error'); const theSyntaxError = new SyntaxError('Some syntax error'); const theRangeError = new RangeError('Some type error'); const theReferenceError = new ReferenceError('Some reference error'); const theURIError = new URIError('Some URI error'); const theEvalError = new EvalError('Some eval error'); class MyError extends Error { } const myError = new MyError('Some MyError'); // Test that native error object is correctly classed assert.strictEqual(test_error.checkError(theError), true, 'Error object correctly classed by napi_is_error'); // Test that native type error object is correctly classed assert.strictEqual(test_error.checkError(theTypeError), true, 'Type error object correctly classed by napi_is_error'); // Test that native syntax error object is correctly classed assert.strictEqual(test_error.checkError(theSyntaxError), true, 'Syntax error object correctly classed by napi_is_error'); // Test that native range error object is correctly classed assert.strictEqual(test_error.checkError(theRangeError), true, 'Range error object correctly classed by napi_is_error'); // Test that native reference error object is correctly classed assert.strictEqual(test_error.checkError(theReferenceError), true, 'Reference error object correctly classed by' + ' napi_is_error'); // Test that native URI error object is correctly classed assert.strictEqual(test_error.checkError(theURIError), true, 'URI error object correctly classed by napi_is_error'); // Test that native eval error object is correctly classed assert.strictEqual(test_error.checkError(theEvalError), true, 'Eval error object correctly classed by napi_is_error'); // Test that class derived from native error is correctly classed assert.strictEqual(test_error.checkError(myError), true, 'Class derived from native error correctly classed by' + ' napi_is_error'); // Test that non-error object is correctly classed assert.strictEqual(test_error.checkError({}), false, 'Non-error object correctly classed by napi_is_error'); // Test that non-error primitive is correctly classed assert.strictEqual(test_error.checkError('non-object'), false, 'Non-error primitive correctly classed by napi_is_error'); assert.throws(() => { test_error.throwExistingError(); }, /^Error: existing error$/); assert.throws(() => { test_error.throwError(); }, /^Error: error$/); assert.throws(() => { test_error.throwRangeError(); }, /^RangeError: range error$/); assert.throws(() => { test_error.throwTypeError(); }, /^TypeError: type error$/); let error = test_error.createError(); assert.ok(error instanceof Error, 'expected error to be an instance of Error'); assert.strictEqual(error.message, 'error', 'expected message to be "error"'); error = test_error.createRangeError(); assert.ok(error instanceof RangeError, 'expected error to be an instance of RangeError'); assert.strictEqual(error.message, 'range error', 'expected message to be "range error"'); error = test_error.createTypeError(); assert.ok(error instanceof TypeError, 'expected error to be an instance of TypeError'); assert.strictEqual(error.message, 'type error', 'expected message to be "type error"');