123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- /*
- * tst.werror.js: tests basic functionality of the WError class.
- */
- var mod_assert = require('assert');
- var mod_verror = require('../lib/verror');
- var VError = mod_verror.VError;
- var WError = mod_verror.WError;
- var err, suberr, stack, substack;
- /*
- * Remove full paths and relative line numbers from stack traces so that we can
- * compare against "known-good" output.
- */
- function cleanStack(stacktxt)
- {
- var re = new RegExp(__filename + ':\\d+:\\d+', 'gm');
- stacktxt = stacktxt.replace(re, 'tst.werror.js');
- return (stacktxt);
- }
- /*
- * Save the generic parts of all stack traces so we can avoid hardcoding
- * Node-specific implementation details in our testing of stack traces.
- */
- var nodestack = new Error().stack.split('\n').slice(2).join('\n');
- /* no arguments */
- err = new WError();
- mod_assert.equal(err.name, 'WError');
- mod_assert.ok(err instanceof Error);
- mod_assert.ok(err instanceof WError);
- mod_assert.equal(err.message, '');
- mod_assert.equal(err.toString(), 'WError');
- mod_assert.ok(err.cause() === undefined);
- stack = cleanStack(err.stack);
- mod_assert.equal(stack, [
- 'WError',
- ' at Object.<anonymous> (tst.werror.js)'
- ].join('\n') + '\n' + nodestack);
- /* options-argument form */
- err = new WError({});
- mod_assert.equal(err.message, '');
- mod_assert.equal(err.toString(), 'WError');
- mod_assert.ok(err.cause() === undefined);
- /* simple message */
- err = new WError('my error');
- mod_assert.equal(err.message, 'my error');
- mod_assert.equal(err.toString(), 'WError: my error');
- mod_assert.ok(err.cause() === undefined);
- stack = cleanStack(err.stack);
- mod_assert.equal(stack, [
- 'WError: my error',
- ' at Object.<anonymous> (tst.werror.js)'
- ].join('\n') + '\n' + nodestack);
- err = new WError({}, 'my error');
- mod_assert.equal(err.message, 'my error');
- mod_assert.equal(err.toString(), 'WError: my error');
- mod_assert.ok(err.cause() === undefined);
- /* printf-style message */
- err = new WError('%s error: %3d problems', 'very bad', 15);
- mod_assert.equal(err.message, 'very bad error: 15 problems');
- mod_assert.equal(err.toString(), 'WError: very bad error: 15 problems');
- mod_assert.ok(err.cause() === undefined);
- err = new WError({}, '%s error: %3d problems', 'very bad', 15);
- mod_assert.equal(err.message, 'very bad error: 15 problems');
- mod_assert.equal(err.toString(), 'WError: very bad error: 15 problems');
- mod_assert.ok(err.cause() === undefined);
- /* caused by another error, with no additional message */
- suberr = new Error('root cause');
- err = new WError(suberr);
- mod_assert.equal(err.message, '');
- mod_assert.equal(err.toString(), 'WError; caused by Error: root cause');
- mod_assert.ok(err.cause() === suberr);
- err = new WError({ 'cause': suberr });
- mod_assert.equal(err.message, '');
- mod_assert.equal(err.toString(), 'WError; caused by Error: root cause');
- mod_assert.ok(err.cause() === suberr);
- /* caused by another error, with annotation */
- err = new WError(suberr, 'proximate cause: %d issues', 3);
- mod_assert.equal(err.message, 'proximate cause: 3 issues');
- mod_assert.equal(err.toString(), 'WError: proximate cause: 3 issues; ' +
- 'caused by Error: root cause');
- mod_assert.ok(err.cause() === suberr);
- stack = cleanStack(err.stack);
- mod_assert.equal(stack, [
- 'WError: proximate cause: 3 issues; caused by Error: root cause',
- ' at Object.<anonymous> (tst.werror.js)'
- ].join('\n') + '\n' + nodestack);
- err = new WError({ 'cause': suberr }, 'proximate cause: %d issues', 3);
- mod_assert.equal(err.message, 'proximate cause: 3 issues');
- mod_assert.equal(err.toString(), 'WError: proximate cause: 3 issues; ' +
- 'caused by Error: root cause');
- mod_assert.ok(err.cause() === suberr);
- stack = cleanStack(err.stack);
- mod_assert.equal(stack, [
- 'WError: proximate cause: 3 issues; caused by Error: root cause',
- ' at Object.<anonymous> (tst.werror.js)'
- ].join('\n') + '\n' + nodestack);
- /* caused by another WError, with annotation. */
- suberr = err;
- err = new WError(suberr, 'top');
- mod_assert.equal(err.message, 'top');
- mod_assert.equal(err.toString(), 'WError: top; caused by WError: ' +
- 'proximate cause: 3 issues; caused by Error: root cause');
- mod_assert.ok(err.cause() === suberr);
- err = new WError({ 'cause': suberr }, 'top');
- mod_assert.equal(err.message, 'top');
- mod_assert.equal(err.toString(), 'WError: top; caused by WError: ' +
- 'proximate cause: 3 issues; caused by Error: root cause');
- mod_assert.ok(err.cause() === suberr);
- /* caused by a VError */
- suberr = new VError(new Error('root cause'), 'mid');
- err = new WError(suberr, 'top');
- mod_assert.equal(err.message, 'top');
- mod_assert.equal(err.toString(),
- 'WError: top; caused by VError: mid: root cause');
- mod_assert.ok(err.cause() === suberr);
- /* null cause (for backwards compatibility with older versions) */
- err = new WError(null, 'my error');
- mod_assert.equal(err.message, 'my error');
- mod_assert.equal(err.toString(), 'WError: my error');
- mod_assert.ok(err.cause() === undefined);
- stack = cleanStack(err.stack);
- mod_assert.equal(stack, [
- 'WError: my error',
- ' at Object.<anonymous> (tst.werror.js)'
- ].join('\n') + '\n' + nodestack);
- err = new WError({ 'cause': null }, 'my error');
- mod_assert.equal(err.message, 'my error');
- mod_assert.equal(err.toString(), 'WError: my error');
- mod_assert.ok(err.cause() === undefined);
- err = new WError(null);
- mod_assert.equal(err.message, '');
- mod_assert.equal(err.toString(), 'WError');
- mod_assert.ok(err.cause() === undefined);
- stack = cleanStack(err.stack);
- mod_assert.equal(stack, [
- 'WError',
- ' at Object.<anonymous> (tst.werror.js)'
- ].join('\n') + '\n' + nodestack);
- /* constructorOpt */
- function makeErr(options) {
- return (new WError(options, 'test error'));
- }
- err = makeErr({});
- mod_assert.equal(err.toString(), 'WError: test error');
- stack = cleanStack(err.stack);
- mod_assert.equal(stack, [
- 'WError: test error',
- ' at makeErr (tst.werror.js)',
- ' at Object.<anonymous> (tst.werror.js)'
- ].join('\n') + '\n' + nodestack);
- err = makeErr({ 'constructorOpt': makeErr });
- mod_assert.equal(err.toString(), 'WError: test error');
- stack = cleanStack(err.stack);
- mod_assert.equal(stack, [
- 'WError: test error',
- ' at Object.<anonymous> (tst.werror.js)'
- ].join('\n') + '\n' + nodestack);
|