@@ -11,6 +11,62 @@ describe('ZoneAwareError', () => {
1111 // and there is no point in running them.
1212 if ( ! Error [ 'stackRewrite' ] ) return ;
1313
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+
1470 it ( 'should show zone names in stack frames and remove extra frames' , ( ) => {
1571 const rootZone = getRootZone ( ) ;
1672 const innerZone = rootZone . fork ( { name : 'InnerZone' } ) ;
0 commit comments