7
7
* of patent rights can be found in the PATENTS file in the same directory.
8
8
*
9
9
* @emails oncall+react_native
10
+ * @format
10
11
*/
11
12
'use strict' ;
12
13
@@ -38,10 +39,12 @@ describe('MessageQueue', function() {
38
39
queue = new MessageQueue ( ) ;
39
40
queue . registerCallableModule (
40
41
'MessageQueueTestModule' ,
41
- MessageQueueTestModule
42
+ MessageQueueTestModule ,
42
43
) ;
43
- queue . createDebugLookup ( 0 , 'MessageQueueTestModule' ,
44
- [ 'testHook1' , 'testHook2' ] ) ;
44
+ queue . createDebugLookup ( 0 , 'MessageQueueTestModule' , [
45
+ 'testHook1' ,
46
+ 'testHook2' ,
47
+ ] ) ;
45
48
} ) ;
46
49
47
50
it ( 'should enqueue native calls' , ( ) => {
@@ -65,7 +68,15 @@ describe('MessageQueue', function() {
65
68
66
69
it ( 'should call the stored callback' , ( ) => {
67
70
let done = false ;
68
- queue . enqueueNativeCall ( 0 , 1 , [ ] , ( ) => { } , ( ) => { done = true ; } ) ;
71
+ queue . enqueueNativeCall (
72
+ 0 ,
73
+ 1 ,
74
+ [ ] ,
75
+ ( ) => { } ,
76
+ ( ) => {
77
+ done = true ;
78
+ } ,
79
+ ) ;
69
80
queue . __invokeCallback ( 1 , [ ] ) ;
70
81
expect ( done ) . toEqual ( true ) ;
71
82
} ) ;
@@ -83,32 +94,92 @@ describe('MessageQueue', function() {
83
94
} ) ;
84
95
85
96
it ( 'should throw when calling with unknown module' , ( ) => {
86
- const unknownModule = 'UnknownModule' , unknownMethod = 'UnknownMethod' ;
97
+ const unknownModule = 'UnknownModule' ,
98
+ unknownMethod = 'UnknownMethod' ;
87
99
expect ( ( ) => queue . __callFunction ( unknownModule , unknownMethod ) ) . toThrow (
88
100
`Module ${ unknownModule } is not a registered callable module (calling ${ unknownMethod } )` ,
89
101
) ;
90
102
} ) ;
91
103
92
104
it ( 'should return lazily registered module' , ( ) => {
93
- const dummyModule = { } , name = 'modulesName' ;
105
+ const dummyModule = { } ,
106
+ name = 'modulesName' ;
94
107
queue . registerLazyCallableModule ( name , ( ) => dummyModule ) ;
95
108
96
109
expect ( queue . getCallableModule ( name ) ) . toEqual ( dummyModule ) ;
97
110
} ) ;
98
111
99
112
it ( 'should not initialize lazily registered module before it was used for the first time' , ( ) => {
100
- const dummyModule = { } , name = 'modulesName' ;
113
+ const dummyModule = { } ,
114
+ name = 'modulesName' ;
101
115
const factory = jest . fn ( ( ) => dummyModule ) ;
102
116
queue . registerLazyCallableModule ( name , factory ) ;
103
117
expect ( factory ) . not . toHaveBeenCalled ( ) ;
104
118
} ) ;
105
119
106
120
it ( 'should initialize lazily registered module only once' , ( ) => {
107
- const dummyModule = { } , name = 'modulesName' ;
121
+ const dummyModule = { } ,
122
+ name = 'modulesName' ;
108
123
const factory = jest . fn ( ( ) => dummyModule ) ;
109
124
queue . registerLazyCallableModule ( name , factory ) ;
110
125
queue . getCallableModule ( name ) ;
111
126
queue . getCallableModule ( name ) ;
112
127
expect ( factory ) . toHaveBeenCalledTimes ( 1 ) ;
113
128
} ) ;
129
+
130
+ it ( 'should catch all exceptions if the global error handler is installed' , ( ) => {
131
+ const errorMessage = 'intentional error' ;
132
+ const errorModule = {
133
+ explode : function ( ) {
134
+ throw new Error ( errorMessage ) ;
135
+ } ,
136
+ } ;
137
+ const name = 'errorModuleName' ;
138
+ const factory = jest . fn ( ( ) => errorModule ) ;
139
+ queue . __guardSafe = jest . fn ( ( ) => { } ) ;
140
+ queue . __guardUnsafe = jest . fn ( ( ) => { } ) ;
141
+ queue . installGlobalErrorHandler ( ) ;
142
+ queue . registerLazyCallableModule ( name , factory ) ;
143
+ queue . callFunctionReturnFlushedQueue ( name , 'explode' , [ ] ) ;
144
+ expect ( queue . __guardUnsafe ) . toHaveBeenCalledTimes ( 0 ) ;
145
+ expect ( queue . __guardSafe ) . toHaveBeenCalledTimes ( 2 ) ;
146
+ } ) ;
147
+
148
+ it ( 'should propagate exceptions if the global error handler is uninstalled' , ( ) => {
149
+ queue . uninstallGlobalErrorHandler ( ) ;
150
+ const errorMessage = 'intentional error' ;
151
+ const errorModule = {
152
+ explode : function ( ) {
153
+ throw new Error ( errorMessage ) ;
154
+ } ,
155
+ } ;
156
+ const name = 'errorModuleName' ;
157
+ const factory = jest . fn ( ( ) => errorModule ) ;
158
+ queue . __guardUnsafe = jest . fn ( ( ) => { } ) ;
159
+ queue . __guardSafe = jest . fn ( ( ) => { } ) ;
160
+ queue . registerLazyCallableModule ( name , factory ) ;
161
+ queue . uninstallGlobalErrorHandler ( ) ;
162
+ queue . callFunctionReturnFlushedQueue ( name , 'explode' ) ;
163
+ expect ( queue . __guardUnsafe ) . toHaveBeenCalledTimes ( 2 ) ;
164
+ expect ( queue . __guardSafe ) . toHaveBeenCalledTimes ( 0 ) ;
165
+ } ) ;
166
+
167
+ it ( 'should catch all exceptions if the global error handler is re-installed' , ( ) => {
168
+ const errorMessage = 'intentional error' ;
169
+ const errorModule = {
170
+ explode : function ( ) {
171
+ throw new Error ( errorMessage ) ;
172
+ } ,
173
+ } ;
174
+ const name = 'errorModuleName' ;
175
+ const factory = jest . fn ( ( ) => errorModule ) ;
176
+ queue . __guardUnsafe = jest . fn ( ( ) => { } ) ;
177
+ queue . __guardSafe = jest . fn ( ( ) => { } ) ;
178
+ queue . registerLazyCallableModule ( name , factory ) ;
179
+ queue . uninstallGlobalErrorHandler ( ) ;
180
+ queue . installGlobalErrorHandler ( ) ;
181
+ queue . callFunctionReturnFlushedQueue ( name , 'explode' ) ;
182
+ expect ( queue . __guardUnsafe ) . toHaveBeenCalledTimes ( 0 ) ;
183
+ expect ( queue . __guardSafe ) . toHaveBeenCalledTimes ( 2 ) ;
184
+ } ) ;
114
185
} ) ;
0 commit comments