@@ -212,7 +212,7 @@ describe('scattermapbox convert', function() {
212
212
] , 'geojson feature properties' ) ;
213
213
} ) ;
214
214
215
- it ( 'should fill circle-opacity correctly during selections' , function ( ) {
215
+ it ( 'should fill circle props correctly during selections' , function ( ) {
216
216
var _base = {
217
217
type : 'scattermapbox' ,
218
218
mode : 'markers' ,
@@ -222,46 +222,179 @@ describe('scattermapbox convert', function() {
222
222
} ;
223
223
224
224
var specs = [ {
225
+ msg : 'base case' ,
225
226
patch : {
226
227
selectedpoints : [ 1 , 2 ]
227
228
} ,
228
- expected : [ 0.2 , 1 , 1 ]
229
+ expected : {
230
+ opacity : [ 0.2 , 1 , 1 ]
231
+ }
229
232
} , {
233
+ msg : 'with set trace opacity' ,
230
234
patch : {
231
235
opacity : 0.5 ,
232
236
selectedpoints : [ 1 , 2 ]
233
237
} ,
234
- expected : [ 0.1 , 0.5 , 0.5 ]
238
+ expected : {
239
+ opacity : [ 0.1 , 0.5 , 0.5 ]
240
+ }
235
241
} , {
242
+ msg : 'with set scalar marker.opacity' ,
236
243
patch : {
237
244
marker : { opacity : 0.6 } ,
238
245
selectedpoints : [ 1 , 2 ]
239
246
} ,
240
- expected : [ 0.12 , 0.6 , 0.6 ]
247
+ expected : {
248
+ opacity : [ 0.12 , 0.6 , 0.6 ]
249
+ }
241
250
} , {
251
+ msg : 'width set array marker.opacity' ,
242
252
patch : {
243
253
marker : {
244
254
opacity : [ 0.5 , 1 , 0.6 ] ,
245
255
} ,
246
256
selectedpoints : [ 0 , 2 ]
247
257
} ,
248
- expected : [ 0.5 , 0.2 , 0.6 ]
258
+ expected : {
259
+ opacity : [ 0.5 , 0.2 , 0.6 ]
260
+ }
249
261
} , {
262
+ msg : 'with set array marker.opacity including invalid items' ,
250
263
patch : {
251
264
marker : { opacity : [ 2 , null , - 0.6 ] } ,
252
265
selectedpoints : [ 0 , 1 , 2 ]
253
266
} ,
254
- expected : [ 1 , 0 , 0 ]
267
+ expected : {
268
+ opacity : [ 1 , 0 , 0 ]
269
+ }
270
+ } , {
271
+ msg : 'with set selected & unselected styles' ,
272
+ patch : {
273
+ selected : {
274
+ marker : {
275
+ opacity : 1 ,
276
+ color : 'green' ,
277
+ size : 20
278
+ }
279
+ } ,
280
+ unselected : {
281
+ marker : {
282
+ opacity : 0 ,
283
+ color : 'red' ,
284
+ size : 5
285
+ }
286
+ } ,
287
+ selectedpoints : [ 0 , 2 ]
288
+ } ,
289
+ expected : {
290
+ opacity : [ 1 , 0 , 1 ] ,
291
+ color : [ 'green' , 'red' , 'green' ] ,
292
+ size : [ 10 , 2.5 , 10 ]
293
+ }
294
+ } , {
295
+ msg : 'with set selected styles only' ,
296
+ patch : {
297
+ selected : {
298
+ marker : {
299
+ opacity : 1 ,
300
+ color : 'green' ,
301
+ size : 20
302
+ }
303
+ } ,
304
+ selectedpoints : [ 0 , 2 ]
305
+ } ,
306
+ expected : {
307
+ opacity : [ 1 , 0.2 , 1 ] ,
308
+ color : [ 'green' , '#1f77b4' , 'green' ] ,
309
+ size : [ 10 , 3 , 10 ]
310
+ }
311
+ } , {
312
+ msg : 'with set selected styles only + array items' ,
313
+ patch : {
314
+ marker : {
315
+ opacity : [ 0.5 , 0.6 , 0.7 ] ,
316
+ color : [ 'blue' , 'yellow' , 'cyan' ] ,
317
+ size : [ 50 , 60 , 70 ]
318
+ } ,
319
+ selected : {
320
+ marker : {
321
+ opacity : 1 ,
322
+ color : 'green' ,
323
+ size : 20
324
+ }
325
+ } ,
326
+ selectedpoints : [ 0 , 2 ]
327
+ } ,
328
+ expected : {
329
+ opacity : [ 1 , 0.12 , 1 ] ,
330
+ color : [ 'green' , 'yellow' , 'green' ] ,
331
+ size : [ 10 , 30 , 10 ]
332
+ }
333
+ } , {
334
+ msg : 'with set unselected styles only' ,
335
+ patch : {
336
+ unselected : {
337
+ marker : {
338
+ opacity : 0 ,
339
+ color : 'red' ,
340
+ size : 5
341
+ }
342
+ } ,
343
+ selectedpoints : [ 0 , 2 ]
344
+ } ,
345
+ expected : {
346
+ opacity : [ 1 , 0 , 1 ] ,
347
+ color : [ '#1f77b4' , 'red' , '#1f77b4' ] ,
348
+ size : [ 3 , 2.5 , 3 ]
349
+
350
+ }
351
+ } , {
352
+ msg : 'with set unselected styles only + array items' ,
353
+ patch : {
354
+ marker : {
355
+ opacity : [ 0.5 , 0.6 , 0.7 ] ,
356
+ color : [ 'blue' , 'yellow' , 'cyan' ] ,
357
+ size : [ 50 , 60 , 70 ]
358
+ } ,
359
+ unselected : {
360
+ marker : {
361
+ opacity : 0 ,
362
+ color : 'red' ,
363
+ size : 5
364
+ }
365
+ } ,
366
+ selectedpoints : [ 0 , 2 ]
367
+ } ,
368
+ expected : {
369
+ opacity : [ 0.5 , 0 , 0.7 ] ,
370
+ color : [ 'blue' , 'red' , 'cyan' ] ,
371
+ size : [ 25 , 2.5 , 35 ]
372
+ }
255
373
} ] ;
256
374
257
375
specs . forEach ( function ( s , i ) {
258
- var msg0 = ' - case ' + i + ' ' ;
376
+ var msg0 = s . msg + ' - case ' + i + '- ' ;
259
377
var opts = _convert ( Lib . extendDeep ( { } , _base , s . patch ) ) ;
378
+ var features = opts . circle . geojson . features ;
379
+
380
+ function _assert ( kProp , kExp ) {
381
+ var actual = features . map ( function ( f ) { return f . properties [ kProp ] ; } ) ;
382
+ var expected = s . expected [ kExp ] ;
383
+ var msg = msg0 + ' marker.' + kExp ;
384
+
385
+ if ( Array . isArray ( expected ) ) {
386
+ expect ( actual ) . toEqual ( expected , msg ) ;
387
+ } else {
388
+ actual . forEach ( function ( a ) {
389
+ expect ( a ) . toBe ( undefined , msg ) ;
390
+ } ) ;
391
+ }
392
+ }
260
393
261
- var props = opts . circle . geojson . features . map ( function ( f ) {
262
- return f . properties . mo ;
263
- } ) ;
264
- expect ( props ) . toEqual ( s . expected , msg0 + 'props ') ;
394
+ _assert ( 'mo' , 'opacity' ) ;
395
+ _assert ( 'mcc' , 'color' ) ;
396
+ // N.B. sizes in props should be half of the input values
397
+ _assert ( 'mrc' , 'size ') ;
265
398
} ) ;
266
399
} ) ;
267
400
0 commit comments