PHP WebShell
Текущая директория: /opt/BitGoJS/node_modules/tape/test
Просмотр файла: throws.js
'use strict';
var tape = require('../');
var tap = require('tap');
var concat = require('concat-stream');
var stripFullStack = require('./common').stripFullStack;
function getNonFunctionMessage(fn) {
try {
fn();
} catch (e) {
return e.message;
}
return '';
}
var getter = function () { return 'message'; };
var messageGetterError = Object.defineProperty(
{ custom: 'error' },
'message',
{ configurable: true, enumerable: true, get: getter }
);
var thrower = function () { throw messageGetterError; };
tap.test('failures', function (tt) {
tt.plan(1);
var test = tape.createHarness();
test.createStream().pipe(concat(function (body) {
tt.same(stripFullStack(body.toString('utf8')), [
'TAP version 13',
'# non functions',
'not ok 1 should throw',
' ---',
' operator: throws',
' expected: |-',
' undefined',
' actual: |-',
' { [TypeError: ' + getNonFunctionMessage() + "] message: '" + getNonFunctionMessage() + "' }",
' at: Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' stack: |-',
String(' TypeError: ' + getNonFunctionMessage(undefined)),
' [... stack stripped ...]',
' at Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' [... stack stripped ...]',
' ...',
'not ok 2 should throw',
' ---',
' operator: throws',
' expected: |-',
' undefined',
' actual: |-',
' { [TypeError: ' + getNonFunctionMessage(null) + "] message: '" + getNonFunctionMessage(null) + "' }",
' at: Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' stack: |-',
String(' TypeError: ' + getNonFunctionMessage(null)),
' [... stack stripped ...]',
' at Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' [... stack stripped ...]',
' ...',
'not ok 3 should throw',
' ---',
' operator: throws',
' expected: |-',
' undefined',
' actual: |-',
' { [TypeError: ' + getNonFunctionMessage(true) + "] message: '" + getNonFunctionMessage(true) + "' }",
' at: Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' stack: |-',
String(' TypeError: ' + getNonFunctionMessage(true)),
' [... stack stripped ...]',
' at Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' [... stack stripped ...]',
' ...',
'not ok 4 should throw',
' ---',
' operator: throws',
' expected: |-',
' undefined',
' actual: |-',
' { [TypeError: ' + getNonFunctionMessage(false) + "] message: '" + getNonFunctionMessage(false) + "' }",
' at: Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' stack: |-',
String(' TypeError: ' + getNonFunctionMessage(false)),
' [... stack stripped ...]',
' at Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' [... stack stripped ...]',
' ...',
'not ok 5 should throw',
' ---',
' operator: throws',
' expected: |-',
' undefined',
' actual: |-',
' { [TypeError: ' + getNonFunctionMessage('abc') + "] message: '" + getNonFunctionMessage('abc') + "' }",
' at: Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' stack: |-',
String(' TypeError: ' + getNonFunctionMessage('abc')),
' [... stack stripped ...]',
' at Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' [... stack stripped ...]',
' ...',
'not ok 6 should throw',
' ---',
' operator: throws',
' expected: |-',
' undefined',
' actual: |-',
' { [TypeError: ' + getNonFunctionMessage(/a/g) + "] message: '" + getNonFunctionMessage(/a/g) + "' }",
' at: Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' stack: |-',
String(' TypeError: ' + getNonFunctionMessage(/a/g)),
' [... stack stripped ...]',
' at Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' [... stack stripped ...]',
' ...',
'not ok 7 should throw',
' ---',
' operator: throws',
' expected: |-',
' undefined',
' actual: |-',
' { [TypeError: ' + getNonFunctionMessage([]) + "] message: '" + getNonFunctionMessage([]) + "' }",
' at: Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' stack: |-',
String(' TypeError: ' + getNonFunctionMessage([])),
' [... stack stripped ...]',
' at Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' [... stack stripped ...]',
' ...',
'not ok 8 should throw',
' ---',
' operator: throws',
' expected: |-',
' undefined',
' actual: |-',
' { [TypeError: ' + getNonFunctionMessage({}) + "] message: '" + getNonFunctionMessage({}) + "' }",
' at: Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' stack: |-',
String(' TypeError: ' + getNonFunctionMessage({})),
' [... stack stripped ...]',
' at Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' [... stack stripped ...]',
' ...',
'# function',
'not ok 9 should throw',
' ---',
' operator: throws',
' expected: undefined',
' actual: undefined',
' at: Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' stack: |-',
' Error: should throw',
' [... stack stripped ...]',
' at Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' [... stack stripped ...]',
' ...',
'# custom error messages',
'ok 10 "message" is enumerable',
"ok 11 { custom: 'error', message: 'message' }",
'ok 12 getter is still the same',
'# throws null',
'ok 13 throws null',
'# wrong type of error',
'not ok 14 throws actual',
' ---',
' operator: throws',
' expected: |-',
' [Function: TypeError]',
' actual: |-',
" { [RangeError: actual!] message: 'actual!' }",
' at: Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' stack: |-',
' RangeError: actual!',
' at Test.<anonymous> ($TEST/throws.js:$LINE:$COL)',
' [... stack stripped ...]',
' ...',
'# non-extensible throw match',
'ok 15 error is non-extensible',
'ok 16 non-extensible error matches',
'ok 17 errorWithMessage is non-extensible',
'ok 18 non-extensible error with message matches',
'# frozen `message` property',
'ok 19 error is non-writable',
'ok 20 error is non-configurable',
'ok 21 non-writable error matches',
'',
'1..21',
'# tests 21',
'# pass 11',
'# fail 10',
''
]);
}));
test('non functions', function (t) {
t.plan(8);
t['throws']();
t['throws'](null);
t['throws'](true);
t['throws'](false);
t['throws']('abc');
t['throws'](/a/g);
t['throws']([]);
t['throws']({});
});
test('function', function (t) {
t.plan(1);
t['throws'](function () {});
});
test('custom error messages', function (t) {
t.plan(3);
t.equal(Object.prototype.propertyIsEnumerable.call(messageGetterError, 'message'), true, '"message" is enumerable');
t['throws'](thrower, "{ custom: 'error', message: 'message' }");
t.equal(Object.getOwnPropertyDescriptor(messageGetterError, 'message').get, getter, 'getter is still the same');
});
test('throws null', function (t) {
t.plan(1);
t['throws'](function () { throw null; }, 'throws null');
t.end();
});
test('wrong type of error', function (t) {
t.plan(1);
var actual = new RangeError('actual!');
t['throws'](function () { throw actual; }, TypeError, 'throws actual');
t.end();
});
test('non-extensible throw match', { skip: !Object.seal }, function (t) {
var error = { foo: 1 };
Object.seal(error);
t.throws(function () { error.x = 1; }, TypeError, 'error is non-extensible');
t.throws(function () { throw error; }, error, 'non-extensible error matches');
var errorWithMessage = { message: 'abc' };
Object.seal(errorWithMessage);
t.throws(function () { errorWithMessage.x = 1; }, TypeError, 'errorWithMessage is non-extensible');
t.throws(function () { throw errorWithMessage; }, error, 'non-extensible error with message matches');
t.end();
});
test('frozen `message` property', { skip: !Object.defineProperty }, function (t) {
var error = { message: 'abc' };
Object.defineProperty(error, 'message', { configurable: false, enumerable: false, writable: false });
t.throws(function () { error.message = 'def'; }, TypeError, 'error is non-writable');
t.throws(function () { delete error.message; }, TypeError, 'error is non-configurable');
t.throws(function () { throw error; }, { message: 'abc' }, 'non-writable error matches');
t.end();
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!