@@ -214,6 +214,53 @@ describe('Test gl plot side effects', function() {
214
214
. catch ( failTest )
215
215
. then ( done ) ;
216
216
} ) ;
217
+
218
+ it ( '@gl should fire *plotly_webglcontextlost* when on webgl context lost' , function ( done ) {
219
+ var _mock = Lib . extendDeep ( { } , require ( '@mocks/gl2d_12.json' ) ) ;
220
+
221
+ function _trigger ( name ) {
222
+ var ev = new window . WebGLContextEvent ( 'webglcontextlost' ) ;
223
+ var canvas = gd . querySelector ( '.gl-canvas-' + name ) ;
224
+ canvas . dispatchEvent ( ev ) ;
225
+ }
226
+
227
+ Plotly . plot ( gd , _mock ) . then ( function ( ) {
228
+ return new Promise ( function ( resolve , reject ) {
229
+ gd . once ( 'plotly_webglcontextlost' , resolve ) ;
230
+ setTimeout ( reject , 10 ) ;
231
+ _trigger ( 'context' ) ;
232
+ } ) ;
233
+ } )
234
+ . then ( function ( eventData ) {
235
+ expect ( ( eventData || { } ) . event ) . toBeDefined ( ) ;
236
+ expect ( ( eventData || { } ) . layer ) . toBe ( 'contextLayer' ) ;
237
+ } )
238
+ . then ( function ( ) {
239
+ return new Promise ( function ( resolve , reject ) {
240
+ gd . once ( 'plotly_webglcontextlost' , resolve ) ;
241
+ setTimeout ( reject , 10 ) ;
242
+ _trigger ( 'focus' ) ;
243
+ } ) ;
244
+ } )
245
+ . then ( function ( eventData ) {
246
+ expect ( ( eventData || { } ) . event ) . toBeDefined ( ) ;
247
+ expect ( ( eventData || { } ) . layer ) . toBe ( 'focusLayer' ) ;
248
+ } )
249
+ . then ( function ( ) {
250
+ return new Promise ( function ( resolve , reject ) {
251
+ gd . once ( 'plotly_webglcontextlost' , reject ) ;
252
+ setTimeout ( resolve , 10 ) ;
253
+ _trigger ( 'pick' ) ;
254
+ } ) ;
255
+ } )
256
+ . then ( function ( eventData ) {
257
+ // should add event listener on pick canvas which
258
+ // isn't used for scattergl traces
259
+ expect ( eventData ) . toBeUndefined ( ) ;
260
+ } )
261
+ . catch ( failTest )
262
+ . then ( done ) ;
263
+ } ) ;
217
264
} ) ;
218
265
219
266
describe ( 'Test gl2d plots' , function ( ) {
0 commit comments