@@ -11,6 +11,62 @@ describe('ZoneAwareError', () => {
11
11
// and there is no point in running them.
12
12
if ( ! Error [ 'stackRewrite' ] ) return ;
13
13
14
+ it ( 'should keep error prototype chain correctly' , ( ) => {
15
+ class MyError extends Error { }
16
+ const myError = new MyError ( ) ;
17
+ expect ( myError instanceof Error ) . toBe ( true ) ;
18
+ expect ( myError instanceof MyError ) . toBe ( true ) ;
19
+ expect ( myError . stack ) . not . toBe ( undefined ) ;
20
+ } ) ;
21
+
22
+ it ( 'should instanceof error correctly' , ( ) => {
23
+ let myError = Error ( 'myError' ) ;
24
+ expect ( myError instanceof Error ) . toBe ( true ) ;
25
+ let myError1 = Error . call ( undefined , 'myError' ) ;
26
+ expect ( myError1 instanceof Error ) . toBe ( true ) ;
27
+ let myError2 = Error . call ( global , 'myError' ) ;
28
+ expect ( myError2 instanceof Error ) . toBe ( true ) ;
29
+ let myError3 = Error . call ( { } , 'myError' ) ;
30
+ expect ( myError3 instanceof Error ) . toBe ( true ) ;
31
+ let myError4 = Error . call ( { test : 'test' } , 'myError' ) ;
32
+ expect ( myError4 instanceof Error ) . toBe ( true ) ;
33
+ } ) ;
34
+
35
+ it ( 'should return error itself from constructor' , ( ) => {
36
+ class MyError1 extends Error {
37
+ constructor ( ) {
38
+ const err : any = super ( 'MyError1' ) ;
39
+ this . message = err . message ;
40
+ }
41
+ }
42
+ let myError1 = new MyError1 ( ) ;
43
+ expect ( myError1 . message ) . toEqual ( 'MyError1' ) ;
44
+ expect ( myError1 . name ) . toEqual ( 'Error' ) ;
45
+ } ) ;
46
+
47
+ it ( 'should return error by calling error directly' , ( ) => {
48
+ let myError = Error ( 'myError' ) ;
49
+ expect ( myError . message ) . toEqual ( 'myError' ) ;
50
+ let myError1 = Error . call ( undefined , 'myError' ) ;
51
+ expect ( myError1 . message ) . toEqual ( 'myError' ) ;
52
+ let myError2 = Error . call ( global , 'myError' ) ;
53
+ expect ( myError2 . message ) . toEqual ( 'myError' ) ;
54
+ let myError3 = Error . call ( { } , 'myError' ) ;
55
+ expect ( myError3 . message ) . toEqual ( 'myError' ) ;
56
+ } ) ;
57
+
58
+ it ( 'should have browser specified property' , ( ) => {
59
+ let myError = new Error ( 'myError' ) ;
60
+ if ( Object . prototype . hasOwnProperty . call ( Error . prototype , 'description' ) ) {
61
+ // in IE, error has description property
62
+ expect ( ( < any > myError ) . description ) . toEqual ( 'myError' ) ;
63
+ }
64
+ if ( Object . prototype . hasOwnProperty . call ( Error . prototype , 'fileName' ) ) {
65
+ // in firefox, error has fileName property
66
+ expect ( ( < any > myError ) . fileName ) . toContain ( 'zone' ) ;
67
+ }
68
+ } ) ;
69
+
14
70
it ( 'should show zone names in stack frames and remove extra frames' , ( ) => {
15
71
const rootZone = getRootZone ( ) ;
16
72
const innerZone = rootZone . fork ( { name : 'InnerZone' } ) ;
0 commit comments