122 lines
3.1 KiB
JavaScript
122 lines
3.1 KiB
JavaScript
|
|
var test = require("tap").test;
|
|
var chain = require('../../');
|
|
var produce = require('../produce.js');
|
|
|
|
Error.stackTraceLimit = Infinity;
|
|
|
|
test("stack extend part", function (t) {
|
|
var extend = function (error, frames) {
|
|
frames.splice(1, 0, 'EXTEND', 'FILTER ME');
|
|
return frames;
|
|
};
|
|
|
|
var filter = function (error, frames) {
|
|
return frames.filter(function (callSite) {
|
|
return callSite !== 'FILTER ME';
|
|
});
|
|
};
|
|
|
|
var callSites = function (level, options) {
|
|
var limit = Error.stackTraceLimit;
|
|
var callSites;
|
|
produce.deepStack(0, level, function () {
|
|
Error.stackTraceLimit = level;
|
|
callSites = chain.callSite(options);
|
|
Error.stackTraceLimit = limit;
|
|
});
|
|
|
|
return callSites.slice(1, Infinity);
|
|
};
|
|
|
|
t.test("callSite method matches simple case property length", function (t) {
|
|
var method = chain.callSite();
|
|
var propery = chain.originalCallSite(new Error());
|
|
t.strictEqual(method.length, propery.length);
|
|
|
|
// The other stuff still works
|
|
t.equal(produce.real(3), produce.fake([
|
|
'Error: trace',
|
|
' at {where}:18:17',
|
|
' at deepStack ({where}:5:5)',
|
|
' at deepStack ({where}:7:5)'
|
|
]));
|
|
|
|
t.end();
|
|
});
|
|
|
|
t.test("pretest: toString of callSites array", function (t) {
|
|
t.equal(produce.convert(callSites(3)), produce.fake([
|
|
' at deepStack ({where}:5:5)',
|
|
' at deepStack ({where}:7:5)'
|
|
]));
|
|
|
|
t.end();
|
|
});
|
|
|
|
t.test("callSite with extend", function (t) {
|
|
chain.extend.attach(extend);
|
|
var textA = produce.convert(callSites(3, { extend: true }));
|
|
var textB = produce.convert(callSites(3));
|
|
chain.extend.deattach(extend);
|
|
|
|
t.equal(textA, produce.fake([
|
|
' at EXTEND',
|
|
' at FILTER ME',
|
|
' at deepStack ({where}:5:5)',
|
|
' at deepStack ({where}:7:5)'
|
|
]));
|
|
|
|
t.equal(textB, produce.fake([
|
|
' at deepStack ({where}:5:5)',
|
|
' at deepStack ({where}:7:5)'
|
|
]));
|
|
|
|
t.end();
|
|
});
|
|
|
|
t.test("callSite with extend and filter", function (t) {
|
|
chain.extend.attach(extend);
|
|
chain.filter.attach(filter);
|
|
var textA = produce.convert(callSites(3, { extend: true, filter: true }));
|
|
var textB = produce.convert(callSites(3, { filter: true }));
|
|
chain.filter.deattach(filter);
|
|
chain.extend.deattach(extend);
|
|
|
|
t.equal(textA, produce.fake([
|
|
' at EXTEND',
|
|
' at deepStack ({where}:5:5)',
|
|
' at deepStack ({where}:7:5)'
|
|
]));
|
|
|
|
t.equal(textB, produce.fake([
|
|
' at deepStack ({where}:5:5)',
|
|
' at deepStack ({where}:7:5)'
|
|
]));
|
|
|
|
t.end();
|
|
});
|
|
|
|
t.test("callSite with extend and filter and slice", function (t) {
|
|
chain.extend.attach(extend);
|
|
chain.filter.attach(filter);
|
|
var textA = produce.convert(callSites(3, { extend: true, filter: true, slice: 1 }));
|
|
var textB = produce.convert(callSites(3, { slice: 1 }));
|
|
chain.filter.deattach(filter);
|
|
chain.extend.deattach(extend);
|
|
|
|
t.equal(textA, produce.fake([
|
|
' at EXTEND',
|
|
' at deepStack ({where}:7:5)'
|
|
]));
|
|
|
|
t.equal(textB, produce.fake([
|
|
' at deepStack ({where}:7:5)'
|
|
]));
|
|
|
|
t.end();
|
|
});
|
|
|
|
t.end();
|
|
});
|