@@ -6,52 +6,53 @@ let rewriteFrames: RewriteFrames;
6
6
let messageEvent : Event ;
7
7
let exceptionEvent : Event ;
8
8
let windowsExceptionEvent : Event ;
9
+ let multipleStacktracesEvent : Event ;
9
10
10
11
describe ( 'RewriteFrames' , ( ) => {
11
12
beforeEach ( ( ) => {
12
13
messageEvent = {
13
14
stacktrace : {
14
- frames : [
15
- {
16
- filename : '/www/src/app/file1.js' ,
17
- } ,
15
+ frames : [ { filename : '/www/src/app/file1.js' } , { filename : '/www/src/app/mo\\dule/file2.js' } ] ,
16
+ } ,
17
+ } ;
18
+ exceptionEvent = {
19
+ exception : {
20
+ values : [
18
21
{
19
- filename : '/www/src/app/mo\\dule/file2.js' ,
22
+ stacktrace : {
23
+ frames : [ { filename : '/www/src/app/file1.js' } , { filename : '/www/src/app/mo\\dule/file2.js' } ] ,
24
+ } ,
20
25
} ,
21
26
] ,
22
27
} ,
23
28
} ;
24
- exceptionEvent = {
29
+ windowsExceptionEvent = {
25
30
exception : {
26
31
values : [
27
32
{
28
33
stacktrace : {
29
- frames : [
30
- {
31
- filename : '/www/src/app/file1.js' ,
32
- } ,
33
- {
34
- filename : '/www/src/app/mo\\dule/file2.js' ,
35
- } ,
36
- ] ,
34
+ frames : [ { filename : 'C:\\www\\src\\app\\file1.js' } , { filename : 'C:\\www\\src\\app\\file2.js' } ] ,
37
35
} ,
38
36
} ,
39
37
] ,
40
38
} ,
41
39
} ;
42
- windowsExceptionEvent = {
40
+ multipleStacktracesEvent = {
43
41
exception : {
44
42
values : [
45
43
{
46
44
stacktrace : {
47
- frames : [
48
- {
49
- filename : 'C:\\www\\src\\app\\file1.js' ,
50
- } ,
51
- {
52
- filename : 'C:\\www\\src\\app\\file2.js' ,
53
- } ,
54
- ] ,
45
+ frames : [ { filename : '/www/src/app/file1.js' } , { filename : '/www/src/app/mo\\dule/file2.js' } ] ,
46
+ } ,
47
+ } ,
48
+ {
49
+ stacktrace : {
50
+ frames : [ { filename : '/www/src/app/file3.js' } , { filename : '/www/src/app/mo\\dule/file4.js' } ] ,
51
+ } ,
52
+ } ,
53
+ {
54
+ stacktrace : {
55
+ frames : [ { filename : '/www/src/app/file5.js' } , { filename : '/www/src/app/mo\\dule/file6.js' } ] ,
55
56
} ,
56
57
} ,
57
58
] ,
@@ -125,20 +126,103 @@ describe('RewriteFrames', () => {
125
126
} ) ;
126
127
} ) ;
127
128
128
- it ( 'transforms messageEvent frames' , async ( ) => {
129
+ it ( 'transforms messageEvent frames' , ( ) => {
129
130
const event = rewriteFrames . process ( messageEvent ) ;
130
131
expect ( event . stacktrace ! . frames ! [ 0 ] . filename ) . toEqual ( '/www/src/app/file1.js' ) ;
131
132
expect ( event . stacktrace ! . frames ! [ 0 ] . function ) . toEqual ( 'whoops' ) ;
132
133
expect ( event . stacktrace ! . frames ! [ 1 ] . filename ) . toEqual ( '/www/src/app/mo\\dule/file2.js' ) ;
133
134
expect ( event . stacktrace ! . frames ! [ 1 ] . function ) . toEqual ( 'whoops' ) ;
134
135
} ) ;
135
136
136
- it ( 'transforms exceptionEvent frames' , async ( ) => {
137
+ it ( 'transforms exceptionEvent frames' , ( ) => {
137
138
const event = rewriteFrames . process ( exceptionEvent ) ;
138
139
expect ( event . exception ! . values ! [ 0 ] . stacktrace ! . frames ! [ 0 ] . filename ) . toEqual ( '/www/src/app/file1.js' ) ;
139
140
expect ( event . exception ! . values ! [ 0 ] . stacktrace ! . frames ! [ 0 ] . function ) . toEqual ( 'whoops' ) ;
140
141
expect ( event . exception ! . values ! [ 0 ] . stacktrace ! . frames ! [ 1 ] . filename ) . toEqual ( '/www/src/app/mo\\dule/file2.js' ) ;
141
142
expect ( event . exception ! . values ! [ 0 ] . stacktrace ! . frames ! [ 1 ] . function ) . toEqual ( 'whoops' ) ;
142
143
} ) ;
143
144
} ) ;
145
+
146
+ describe ( 'can process events that contain multiple stacktraces' , ( ) => {
147
+ it ( 'with defaults' , ( ) => {
148
+ rewriteFrames = new RewriteFrames ( ) ;
149
+ const event = rewriteFrames . process ( multipleStacktracesEvent ) ;
150
+ // first stacktrace
151
+ expect ( event . exception ! . values ! [ 0 ] . stacktrace ! . frames ! [ 0 ] . filename ) . toEqual ( 'app:///file1.js' ) ;
152
+ expect ( event . exception ! . values ! [ 0 ] . stacktrace ! . frames ! [ 1 ] . filename ) . toEqual ( 'app:///file2.js' ) ;
153
+ // second stacktrace
154
+ expect ( event . exception ! . values ! [ 1 ] . stacktrace ! . frames ! [ 0 ] . filename ) . toEqual ( 'app:///file3.js' ) ;
155
+ expect ( event . exception ! . values ! [ 1 ] . stacktrace ! . frames ! [ 1 ] . filename ) . toEqual ( 'app:///file4.js' ) ;
156
+ // third stacktrace
157
+ expect ( event . exception ! . values ! [ 2 ] . stacktrace ! . frames ! [ 0 ] . filename ) . toEqual ( 'app:///file5.js' ) ;
158
+ expect ( event . exception ! . values ! [ 2 ] . stacktrace ! . frames ! [ 1 ] . filename ) . toEqual ( 'app:///file6.js' ) ;
159
+ } ) ;
160
+
161
+ it ( 'with custom root' , ( ) => {
162
+ rewriteFrames = new RewriteFrames ( {
163
+ root : '/www' ,
164
+ } ) ;
165
+ const event = rewriteFrames . process ( multipleStacktracesEvent ) ;
166
+ // first stacktrace
167
+ expect ( event . exception ! . values ! [ 0 ] . stacktrace ! . frames ! [ 0 ] . filename ) . toEqual ( 'app:///src/app/file1.js' ) ;
168
+ expect ( event . exception ! . values ! [ 0 ] . stacktrace ! . frames ! [ 1 ] . filename ) . toEqual ( 'app:///src/app/mo\\dule/file2.js' ) ;
169
+ // second stacktrace
170
+ expect ( event . exception ! . values ! [ 1 ] . stacktrace ! . frames ! [ 0 ] . filename ) . toEqual ( 'app:///src/app/file3.js' ) ;
171
+ expect ( event . exception ! . values ! [ 1 ] . stacktrace ! . frames ! [ 1 ] . filename ) . toEqual ( 'app:///src/app/mo\\dule/file4.js' ) ;
172
+ // third stacktrace
173
+ expect ( event . exception ! . values ! [ 2 ] . stacktrace ! . frames ! [ 0 ] . filename ) . toEqual ( 'app:///src/app/file5.js' ) ;
174
+ expect ( event . exception ! . values ! [ 2 ] . stacktrace ! . frames ! [ 1 ] . filename ) . toEqual ( 'app:///src/app/mo\\dule/file6.js' ) ;
175
+ } ) ;
176
+
177
+ it ( 'with custom iteratee' , ( ) => {
178
+ rewriteFrames = new RewriteFrames ( {
179
+ iteratee : ( frame : StackFrame ) => ( {
180
+ ...frame ,
181
+ function : 'whoops' ,
182
+ } ) ,
183
+ } ) ;
184
+ const event = rewriteFrames . process ( multipleStacktracesEvent ) ;
185
+ // first stacktrace
186
+ expect ( event . exception ! . values ! [ 0 ] . stacktrace ! . frames ! [ 0 ] . filename ) . toEqual ( '/www/src/app/file1.js' ) ;
187
+ expect ( event . exception ! . values ! [ 0 ] . stacktrace ! . frames ! [ 0 ] . function ) . toEqual ( 'whoops' ) ;
188
+ expect ( event . exception ! . values ! [ 0 ] . stacktrace ! . frames ! [ 1 ] . filename ) . toEqual ( '/www/src/app/mo\\dule/file2.js' ) ;
189
+ expect ( event . exception ! . values ! [ 0 ] . stacktrace ! . frames ! [ 1 ] . function ) . toEqual ( 'whoops' ) ;
190
+ // second stacktrace
191
+ expect ( event . exception ! . values ! [ 1 ] . stacktrace ! . frames ! [ 0 ] . filename ) . toEqual ( '/www/src/app/file3.js' ) ;
192
+ expect ( event . exception ! . values ! [ 1 ] . stacktrace ! . frames ! [ 0 ] . function ) . toEqual ( 'whoops' ) ;
193
+ expect ( event . exception ! . values ! [ 1 ] . stacktrace ! . frames ! [ 1 ] . filename ) . toEqual ( '/www/src/app/mo\\dule/file4.js' ) ;
194
+ expect ( event . exception ! . values ! [ 1 ] . stacktrace ! . frames ! [ 1 ] . function ) . toEqual ( 'whoops' ) ;
195
+ // third stacktrace
196
+ expect ( event . exception ! . values ! [ 2 ] . stacktrace ! . frames ! [ 0 ] . filename ) . toEqual ( '/www/src/app/file5.js' ) ;
197
+ expect ( event . exception ! . values ! [ 2 ] . stacktrace ! . frames ! [ 0 ] . function ) . toEqual ( 'whoops' ) ;
198
+ expect ( event . exception ! . values ! [ 2 ] . stacktrace ! . frames ! [ 1 ] . filename ) . toEqual ( '/www/src/app/mo\\dule/file6.js' ) ;
199
+ expect ( event . exception ! . values ! [ 2 ] . stacktrace ! . frames ! [ 1 ] . function ) . toEqual ( 'whoops' ) ;
200
+ } ) ;
201
+ } ) ;
202
+
203
+ describe ( 'bails when unable to extract frames' , ( ) => {
204
+ it ( 'no exception values' , ( ) => {
205
+ rewriteFrames = new RewriteFrames ( { } ) ;
206
+ const brokenEvent = {
207
+ exception : {
208
+ values : undefined ,
209
+ } ,
210
+ } ;
211
+ expect ( rewriteFrames . process ( brokenEvent ) ) . toEqual ( brokenEvent ) ;
212
+ } ) ;
213
+
214
+ it ( 'no frames' , ( ) => {
215
+ rewriteFrames = new RewriteFrames ( { } ) ;
216
+ const brokenEvent = {
217
+ exception : {
218
+ values : [
219
+ {
220
+ stacktrace : { } ,
221
+ } ,
222
+ ] ,
223
+ } ,
224
+ } ;
225
+ expect ( rewriteFrames . process ( brokenEvent ) ) . toEqual ( brokenEvent ) ;
226
+ } ) ;
227
+ } ) ;
144
228
} ) ;
0 commit comments