Path: blob/main/src/vs/base/test/common/errors.test.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import { toErrorMessage } from '../../common/errorMessage.js';7import { ensureNoDisposablesAreLeakedInTestSuite } from './utils.js';8import { transformErrorForSerialization, transformErrorFromSerialization } from '../../common/errors.js';9import { assertType } from '../../common/types.js';1011suite('Errors', () => {12ensureNoDisposablesAreLeakedInTestSuite();1314test('Get Error Message', function () {15assert.strictEqual(toErrorMessage('Foo Bar'), 'Foo Bar');16assert.strictEqual(toErrorMessage(new Error('Foo Bar')), 'Foo Bar');1718let error: any = new Error();19error = new Error();20error.detail = {};21error.detail.exception = {};22error.detail.exception.message = 'Foo Bar';23assert.strictEqual(toErrorMessage(error), 'Foo Bar');24assert.strictEqual(toErrorMessage(error, true), 'Foo Bar');2526assert(toErrorMessage());27assert(toErrorMessage(null));28assert(toErrorMessage({}));2930try {31throw new Error();32} catch (error) {33assert.strictEqual(toErrorMessage(error), 'An unknown error occurred. Please consult the log for more details.');34assert.ok(toErrorMessage(error, true).length > 'An unknown error occurred. Please consult the log for more details.'.length);35}36});3738test('Transform Error for Serialization', function () {39const error = new Error('Test error');40const serializedError = transformErrorForSerialization(error);41assert.strictEqual(serializedError.name, 'Error');42assert.strictEqual(serializedError.message, 'Test error');43assert.strictEqual(serializedError.stack, error.stack);44assert.strictEqual(serializedError.noTelemetry, false);45assert.strictEqual(serializedError.cause, undefined);46});4748test('Transform Error with Cause for Serialization', function () {49const cause = new Error('Cause error');50const error = new Error('Test error', { cause });51const serializedError = transformErrorForSerialization(error);52assert.strictEqual(serializedError.name, 'Error');53assert.strictEqual(serializedError.message, 'Test error');54assert.strictEqual(serializedError.stack, error.stack);55assert.strictEqual(serializedError.noTelemetry, false);56assert.ok(serializedError.cause);57assert.strictEqual(serializedError.cause?.name, 'Error');58assert.strictEqual(serializedError.cause?.message, 'Cause error');59assert.strictEqual(serializedError.cause?.stack, cause.stack);60});6162test('Transform Error from Serialization', function () {63const serializedError = transformErrorForSerialization(new Error('Test error'));64const error = transformErrorFromSerialization(serializedError);65assert.strictEqual(error.name, 'Error');66assert.strictEqual(error.message, 'Test error');67assert.strictEqual(error.stack, serializedError.stack);68assert.strictEqual(error.cause, undefined);69});7071test('Transform Error with Cause from Serialization', function () {72const cause = new Error('Cause error');73const serializedCause = transformErrorForSerialization(cause);74const error = new Error('Test error', { cause });75const serializedError = transformErrorForSerialization(error);76const deserializedError = transformErrorFromSerialization(serializedError);77assert.strictEqual(deserializedError.name, 'Error');78assert.strictEqual(deserializedError.message, 'Test error');79assert.strictEqual(deserializedError.stack, serializedError.stack);80assert.ok(deserializedError.cause);81assertType(deserializedError.cause instanceof Error);82assert.strictEqual(deserializedError.cause?.name, 'Error');83assert.strictEqual(deserializedError.cause?.message, 'Cause error');84assert.strictEqual(deserializedError.cause?.stack, serializedCause.stack);85});86});878889