-
Notifications
You must be signed in to change notification settings - Fork 784
/
stacktrace.js
99 lines (90 loc) 路 2.63 KB
/
stacktrace.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// Skip on browsers that doesn't support stack trace
(QUnit.stack() ? QUnit.module : QUnit.module.skip)('stacktrace', function () {
function fooCurrent () {
return QUnit.stack();
}
function fooParent () {
return fooCurrent();
}
function fooInternal () {
return QUnit.stack(2);
}
function fooPublic () {
return fooInternal();
}
function barCaller () {
return fooPublic();
}
function norm (str) {
// CRLF
return str.replace(/\\/g, '/');
}
QUnit.test('QUnit.stack()', function (assert) {
var simple = norm(QUnit.stack());
assert.pushResult({
result: simple.indexOf('/main/stacktrace.js') !== -1,
actual: simple,
message: 'current file'
});
var nested = norm(fooParent());
assert.pushResult({
result: nested.indexOf('fooCurrent') !== -1,
actual: nested,
message: 'include current function'
});
assert.pushResult({
result: nested.indexOf('fooParent') !== -1,
actual: nested,
message: 'include parent function'
});
});
QUnit.test('QUnit.stack(offset)', function (assert) {
var stack = norm(barCaller());
var line = stack.split('\n')[0];
assert.pushResult({
result: line.indexOf('/main/stacktrace.js') !== -1,
actual: line,
message: 'current file'
});
assert.pushResult({
result: line.indexOf('barCaller') !== -1,
actual: line,
message: 'start at offset'
});
assert.pushResult({
result: stack.indexOf('fooInternal') === -1,
actual: stack,
message: 'skip internals'
});
});
QUnit.test('QUnit.test() source details', function (assert) {
var stack = norm(QUnit.config.current.stack);
var line = stack.split('\n')[0];
assert.pushResult({
result: line.indexOf('/main/stacktrace.js') !== -1,
expected: '/main/stacktrace.js',
actual: stack,
message: 'start at current file'
});
});
QUnit.test.each('QUnit.test.each(list) source details', [0], function (assert) {
var stack = norm(QUnit.config.current.stack);
var line = stack.split('\n')[0];
assert.pushResult({
result: line.indexOf('/main/stacktrace.js') !== -1,
expected: '/main/stacktrace.js',
actual: stack,
message: 'start at current file'
});
});
QUnit.test.each('QUnit.test.each(object) source details', { a: 0 }, function (assert) {
var stack = norm(QUnit.config.current.stack);
var line = stack.split('\n')[0];
assert.pushResult({
result: line.indexOf('/main/stacktrace.js') !== -1,
expected: '/main/stacktrace.js',
actual: stack,
message: 'start at current file'
});
});
});