@@ -507,4 +507,74 @@ describe('Object', function () {
507
507
} ) ;
508
508
}
509
509
} ) ;
510
+ describe ( 'CreateDataProperty' , function ( ) {
511
+ describe ( 'name version' , function ( ) {
512
+ it ( 'should create data property' , function ( ) {
513
+ var o = { } ;
514
+ var key = 'foo' ;
515
+ assert . strictEqual ( module . Object_CreateDataProperty ( o , key , 42 ) , true ) ;
516
+ var desc = Object . getOwnPropertyDescriptor ( o , key ) ;
517
+ assert . strictEqual ( desc . value , 42 ) ;
518
+ assert . strictEqual ( desc . configurable , true ) ;
519
+ assert . strictEqual ( desc . enumerable , true ) ;
520
+ assert . strictEqual ( desc . writable , true ) ;
521
+ } ) ;
522
+ it ( 'should not override existing non-configurable property' , function ( ) {
523
+ var o = { } ;
524
+ var key = 'foo' ;
525
+ Object . defineProperty ( o , key , { value : 211 } ) ;
526
+ assert . strictEqual ( module . Object_CreateDataProperty ( o , key , 42 ) , false ) ;
527
+ var desc = Object . getOwnPropertyDescriptor ( o , key ) ;
528
+ assert . strictEqual ( desc . value , 211 ) ;
529
+ assert . strictEqual ( desc . configurable , false ) ;
530
+ assert . strictEqual ( desc . enumerable , false ) ;
531
+ assert . strictEqual ( desc . writable , false ) ;
532
+ } ) ;
533
+ it ( 'should not create data property on non-extensible object' , function ( ) {
534
+ var o = Object . freeze ( { } ) ;
535
+ var key = 'foo' ;
536
+ assert . strictEqual ( module . Object_CreateDataProperty ( o , key , 42 ) , false ) ;
537
+ assert . strictEqual ( Object . getOwnPropertyDescriptor ( o , key ) , undefined ) ;
538
+ } ) ;
539
+ } ) ;
540
+ describe ( 'index version' , function ( ) {
541
+ it ( 'should create data property' , function ( ) {
542
+ var o = { } ;
543
+ var key = 123 ;
544
+ assert . strictEqual ( module . Object_CreateDataPropertyIndex ( o , key , 42 ) , true ) ;
545
+ var desc = Object . getOwnPropertyDescriptor ( o , key ) ;
546
+ assert . strictEqual ( desc . value , 42 ) ;
547
+ assert . strictEqual ( desc . configurable , true ) ;
548
+ assert . strictEqual ( desc . enumerable , true ) ;
549
+ assert . strictEqual ( desc . writable , true ) ;
550
+ } ) ;
551
+ it ( 'should not override existing non-configurable property' , function ( ) {
552
+ var o = { } ;
553
+ var key = 123 ;
554
+ Object . defineProperty ( o , key , { value : 211 } ) ;
555
+ assert . strictEqual ( module . Object_CreateDataPropertyIndex ( o , key , 42 ) , false ) ;
556
+ var desc = Object . getOwnPropertyDescriptor ( o , key ) ;
557
+ assert . strictEqual ( desc . value , 211 ) ;
558
+ assert . strictEqual ( desc . configurable , false ) ;
559
+ assert . strictEqual ( desc . enumerable , false ) ;
560
+ assert . strictEqual ( desc . writable , false ) ;
561
+ } ) ;
562
+ it ( 'should not create data property on non-extensible object' , function ( ) {
563
+ var o = Object . freeze ( { } ) ;
564
+ var key = 123 ;
565
+ assert . strictEqual ( module . Object_CreateDataPropertyIndex ( o , key , 42 ) , false ) ;
566
+ assert . strictEqual ( Object . getOwnPropertyDescriptor ( o , key ) , undefined ) ;
567
+ } ) ;
568
+ it ( 'should work for indices that do not fit into int32' , function ( ) {
569
+ var o = { } ;
570
+ var key = 4294967295 ;
571
+ assert . strictEqual ( module . Object_CreateDataPropertyIndex ( o , key , 42 ) , true ) ;
572
+ var desc = Object . getOwnPropertyDescriptor ( o , key ) ;
573
+ assert . strictEqual ( desc . value , 42 ) ;
574
+ assert . strictEqual ( desc . configurable , true ) ;
575
+ assert . strictEqual ( desc . enumerable , true ) ;
576
+ assert . strictEqual ( desc . writable , true ) ;
577
+ } ) ;
578
+ } ) ;
579
+ } ) ;
510
580
} ) ;
0 commit comments