@@ -169,4 +169,85 @@ describe('Test scatterpolargl interactions:', function() {
169
169
. catch ( failTest )
170
170
. then ( done ) ;
171
171
} ) ;
172
+
173
+ it ( '@gl should be able to toggle from svg to gl (on graph with scattergl subplot)' , function ( done ) {
174
+ gd = createGraphDiv ( ) ;
175
+
176
+ var sceneXY , scenePolar ;
177
+
178
+ Plotly . plot ( gd , [ {
179
+ type : 'scattergl' ,
180
+ y : [ 1 , 2 , 1 ]
181
+ } , {
182
+ type : 'scatterpolargl' ,
183
+ r : [ 1 , 2 , 1 ]
184
+ } ] , {
185
+ grid : { rows : 1 , columns : 2 } ,
186
+ yaxis : { domain : { column : 0 } } ,
187
+ polar : { domain : { column : 1 } } ,
188
+ width : 400 ,
189
+ height : 400
190
+ } )
191
+ . then ( function ( ) {
192
+ expect ( countCanvases ( ) ) . toBe ( 3 ) ;
193
+ expect ( totalPixels ( ) ) . not . toBe ( 0 ) ;
194
+ expect ( d3 . selectAll ( '.scatterlayer > .trace' ) . size ( ) ) . toBe ( 0 ) ;
195
+
196
+ sceneXY = gd . _fullLayout . _plots . xy . _scene ;
197
+ spyOn ( sceneXY , 'destroy' ) . and . callThrough ( ) ;
198
+
199
+ scenePolar = gd . _fullLayout . polar . _subplot . _scene ;
200
+ spyOn ( scenePolar , 'destroy' ) . and . callThrough ( ) ;
201
+
202
+ return Plotly . restyle ( gd , 'type' , 'scatterpolar' , [ 1 ] ) ;
203
+ } )
204
+ . then ( function ( ) {
205
+ expect ( countCanvases ( ) ) . toBe ( 3 ) ;
206
+ expect ( totalPixels ( ) ) . not . toBe ( 0 ) ;
207
+ expect ( d3 . selectAll ( '.scatterlayer > .trace' ) . size ( ) ) . toBe ( 1 ) ;
208
+
209
+ expect ( sceneXY . destroy ) . toHaveBeenCalledTimes ( 0 ) ;
210
+ expect ( gd . _fullLayout . _plots . xy . _scene ) . not . toBe ( null ) ;
211
+
212
+ // N.B. does not destroy scene in this case,
213
+ // we don't need as the same gl canvases are still there
214
+ expect ( scenePolar . destroy ) . toHaveBeenCalledTimes ( 0 ) ;
215
+ expect ( gd . _fullLayout . polar . _subplot . _scene ) . not . toBe ( null ) ;
216
+
217
+ return Plotly . restyle ( gd , 'type' , 'scatterpolargl' , [ 1 ] ) ;
218
+ } )
219
+ . then ( function ( ) {
220
+ expect ( countCanvases ( ) ) . toBe ( 3 ) ;
221
+ expect ( totalPixels ( ) ) . not . toBe ( 0 ) ;
222
+ expect ( d3 . selectAll ( '.scatterlayer > .trace' ) . size ( ) ) . toBe ( 0 ) ;
223
+
224
+ return Plotly . restyle ( gd , 'type' , 'scatter' , [ 0 ] ) ;
225
+ } )
226
+ . then ( function ( ) {
227
+ expect ( countCanvases ( ) ) . toBe ( 3 ) ;
228
+ expect ( totalPixels ( ) ) . not . toBe ( 0 ) ;
229
+ expect ( d3 . selectAll ( '.scatterlayer > .trace' ) . size ( ) ) . toBe ( 1 ) ;
230
+
231
+ // Similarly, does not destroy scene in this case,
232
+ // we don't need as the same gl canvases are still there
233
+ expect ( sceneXY . destroy ) . toHaveBeenCalledTimes ( 0 ) ;
234
+ expect ( gd . _fullLayout . _plots . xy . _scene ) . not . toBe ( null ) ;
235
+
236
+ expect ( scenePolar . destroy ) . toHaveBeenCalledTimes ( 0 ) ;
237
+ expect ( gd . _fullLayout . polar . _subplot . _scene ) . not . toBe ( null ) ;
238
+
239
+ return Plotly . restyle ( gd , 'type' , 'scatterpolar' , [ 1 ] ) ;
240
+ } )
241
+ . then ( function ( ) {
242
+ expect ( countCanvases ( ) ) . toBe ( 0 ) ;
243
+ expect ( d3 . selectAll ( '.scatterlayer > .trace' ) . size ( ) ) . toBe ( 2 ) ;
244
+
245
+ expect ( sceneXY . destroy ) . toHaveBeenCalledTimes ( 1 ) ;
246
+ expect ( gd . _fullLayout . _plots . xy . _scene ) . toBe ( null ) ;
247
+ expect ( scenePolar . destroy ) . toHaveBeenCalledTimes ( 1 ) ;
248
+ expect ( gd . _fullLayout . polar . _subplot . _scene ) . toBe ( null ) ;
249
+ } )
250
+ . catch ( failTest )
251
+ . then ( done ) ;
252
+ } ) ;
172
253
} ) ;
0 commit comments