@@ -475,6 +475,69 @@ describe('Test lib.js:', function() {
475
475
} ) ;
476
476
} ) ;
477
477
478
+ describe ( 'expandObjectPaths' , function ( ) {
479
+ it ( 'returns the original object' , function ( ) {
480
+ var x = { } ;
481
+ expect ( Lib . expandObjectPaths ( x ) ) . toBe ( x ) ;
482
+ } ) ;
483
+
484
+ it ( 'unpacks top-level paths' , function ( ) {
485
+ var input = { 'marker.color' : 'red' , 'marker.size' : [ 1 , 2 , 3 ] } ;
486
+ var expected = { marker : { color : 'red' , size : [ 1 , 2 , 3 ] } } ;
487
+ expect ( Lib . expandObjectPaths ( input ) ) . toEqual ( expected ) ;
488
+ } ) ;
489
+
490
+ it ( 'unpacks recursively' , function ( ) {
491
+ var input = { 'marker.color' : { 'red.certainty' : 'definitely' } } ;
492
+ var expected = { marker : { color : { red : { certainty : 'definitely' } } } } ;
493
+ expect ( Lib . expandObjectPaths ( input ) ) . toEqual ( expected ) ;
494
+ } ) ;
495
+
496
+ it ( 'unpacks deep paths' , function ( ) {
497
+ var input = { 'foo.bar.baz' : 'red' } ;
498
+ var expected = { foo : { bar : { baz : 'red' } } } ;
499
+ expect ( Lib . expandObjectPaths ( input ) ) . toEqual ( expected ) ;
500
+ } ) ;
501
+
502
+ it ( 'unpacks non-top-level deep paths' , function ( ) {
503
+ var input = { color : { 'foo.bar.baz' : 'red' } } ;
504
+ var expected = { color : { foo : { bar : { baz : 'red' } } } } ;
505
+ expect ( Lib . expandObjectPaths ( input ) ) . toEqual ( expected ) ;
506
+ } ) ;
507
+
508
+ it ( 'merges dotted properties into objects' , function ( ) {
509
+ var input = { marker : { color : 'red' } , 'marker.size' : 8 } ;
510
+ var expected = { marker : { color : 'red' , size : 8 } } ;
511
+ expect ( Lib . expandObjectPaths ( input ) ) . toEqual ( expected ) ;
512
+ } ) ;
513
+
514
+ it ( 'merges objects into dotted properties' , function ( ) {
515
+ var input = { 'marker.size' : 8 , marker : { color : 'red' } } ;
516
+ var expected = { marker : { color : 'red' , size : 8 } } ;
517
+ expect ( Lib . expandObjectPaths ( input ) ) . toEqual ( expected ) ;
518
+ } ) ;
519
+
520
+ it ( 'retains the identity of nested objects' , function ( ) {
521
+ var input = { marker : { size : 8 } } ;
522
+ var origNested = input . marker ;
523
+ var expanded = Lib . expandObjectPaths ( input ) ;
524
+ var newNested = expanded . marker ;
525
+
526
+ expect ( input ) . toBe ( expanded ) ;
527
+ expect ( origNested ) . toBe ( newNested ) ;
528
+ } ) ;
529
+
530
+ it ( 'retains the identity of nested arrays' , function ( ) {
531
+ var input = { 'marker.size' : [ 1 , 2 , 3 ] } ;
532
+ var origArray = input [ 'marker.size' ] ;
533
+ var expanded = Lib . expandObjectPaths ( input ) ;
534
+ var newArray = expanded . marker . size ;
535
+
536
+ expect ( input ) . toBe ( expanded ) ;
537
+ expect ( origArray ) . toBe ( newArray ) ;
538
+ } ) ;
539
+ } ) ;
540
+
478
541
describe ( 'coerce' , function ( ) {
479
542
var coerce = Lib . coerce ,
480
543
out ;
0 commit comments