@@ -212,7 +212,7 @@ describe('scattermapbox convert', function() {
212212 ] , 'geojson feature properties' ) ;
213213 } ) ;
214214
215- it ( 'should fill circle-opacity correctly during selections' , function ( ) {
215+ it ( 'should fill circle props correctly during selections' , function ( ) {
216216 var _base = {
217217 type : 'scattermapbox' ,
218218 mode : 'markers' ,
@@ -222,46 +222,179 @@ describe('scattermapbox convert', function() {
222222 } ;
223223
224224 var specs = [ {
225+ msg : 'base case' ,
225226 patch : {
226227 selectedpoints : [ 1 , 2 ]
227228 } ,
228- expected : [ 0.2 , 1 , 1 ]
229+ expected : {
230+ opacity : [ 0.2 , 1 , 1 ]
231+ }
229232 } , {
233+ msg : 'with set trace opacity' ,
230234 patch : {
231235 opacity : 0.5 ,
232236 selectedpoints : [ 1 , 2 ]
233237 } ,
234- expected : [ 0.1 , 0.5 , 0.5 ]
238+ expected : {
239+ opacity : [ 0.1 , 0.5 , 0.5 ]
240+ }
235241 } , {
242+ msg : 'with set scalar marker.opacity' ,
236243 patch : {
237244 marker : { opacity : 0.6 } ,
238245 selectedpoints : [ 1 , 2 ]
239246 } ,
240- expected : [ 0.12 , 0.6 , 0.6 ]
247+ expected : {
248+ opacity : [ 0.12 , 0.6 , 0.6 ]
249+ }
241250 } , {
251+ msg : 'width set array marker.opacity' ,
242252 patch : {
243253 marker : {
244254 opacity : [ 0.5 , 1 , 0.6 ] ,
245255 } ,
246256 selectedpoints : [ 0 , 2 ]
247257 } ,
248- expected : [ 0.5 , 0.2 , 0.6 ]
258+ expected : {
259+ opacity : [ 0.5 , 0.2 , 0.6 ]
260+ }
249261 } , {
262+ msg : 'with set array marker.opacity including invalid items' ,
250263 patch : {
251264 marker : { opacity : [ 2 , null , - 0.6 ] } ,
252265 selectedpoints : [ 0 , 1 , 2 ]
253266 } ,
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+ }
255373 } ] ;
256374
257375 specs . forEach ( function ( s , i ) {
258- var msg0 = ' - case ' + i + ' ' ;
376+ var msg0 = s . msg + ' - case ' + i + '- ' ;
259377 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+ }
260393
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 ') ;
265398 } ) ;
266399 } ) ;
267400
0 commit comments