@@ -544,6 +544,78 @@ describe('ReactDOMInput', () => {
544
544
expect ( node . value ) . toBe ( 'foobar' ) ;
545
545
} ) ;
546
546
547
+ it ( 'should not throw for date inputs even if `defaultValue` is an object where valueOf() throws' , ( ) => {
548
+ class Foo {
549
+ valueOf ( ) {
550
+ // Throwing here is the behavior of ECMAScript "Temporal" date/time API.
551
+ // See https://tc39.es/proposal-temporal/docs/plaindate.html#valueOf
552
+ throw new Error ( ) ;
553
+ }
554
+ toString ( ) {
555
+ return '2020-01-01' ;
556
+ }
557
+ }
558
+ const input = ReactDOM . render (
559
+ < input defaultValue = { new Foo ( ) } type = "date" /> ,
560
+ container ,
561
+ ) ;
562
+ expect ( input . value ) . toBe ( '2020-01-01' ) ;
563
+ } ) ;
564
+
565
+ it ( 'should not throw for text inputs even if `defaultValue` is an object where valueOf() throws' , ( ) => {
566
+ class Foo {
567
+ valueOf ( ) {
568
+ // Throwing here is the behavior of ECMAScript "Temporal" date/time API.
569
+ // See https://tc39.es/proposal-temporal/docs/plaindate.html#valueOf
570
+ throw new Error ( ) ;
571
+ }
572
+ toString ( ) {
573
+ return '2020-01-01' ;
574
+ }
575
+ }
576
+ const input = ReactDOM . render (
577
+ < input defaultValue = { new Foo ( ) } type = "text" /> ,
578
+ container ,
579
+ ) ;
580
+ expect ( input . value ) . toBe ( '2020-01-01' ) ;
581
+ } ) ;
582
+
583
+ it ( 'should not throw for date inputs even if `value` is an object where valueOf() throws' , ( ) => {
584
+ class Foo {
585
+ valueOf ( ) {
586
+ // Throwing here is the behavior of ECMAScript "Temporal" date/time API.
587
+ // See https://tc39.es/proposal-temporal/docs/plaindate.html#valueOf
588
+ throw new Error ( ) ;
589
+ }
590
+ toString ( ) {
591
+ return '2020-01-01' ;
592
+ }
593
+ }
594
+ const input = ReactDOM . render (
595
+ < input value = { new Foo ( ) } type = "date" readOnly = { true } /> ,
596
+ container ,
597
+ ) ;
598
+ expect ( input . value ) . toBe ( '2020-01-01' ) ;
599
+ } ) ;
600
+
601
+ it ( 'should not throw for date inputs even if `value` is an object where valueOf() throws' , ( ) => {
602
+ class Foo {
603
+ valueOf ( ) {
604
+ // Throwing here is the behavior of ECMAScript "Temporal" date/time API.
605
+ // See https://tc39.es/proposal-temporal/docs/plaindate.html#valueOf
606
+ throw new Error ( ) ;
607
+ }
608
+ toString ( ) {
609
+ return '2020-01-01' ;
610
+ }
611
+ }
612
+ const input = ReactDOM . render (
613
+ < input value = { new Foo ( ) } type = "text" readOnly = { true } /> ,
614
+ container ,
615
+ ) ;
616
+ expect ( input . value ) . toBe ( '2020-01-01' ) ;
617
+ } ) ;
618
+
547
619
it ( 'should display `value` of number 0' , ( ) => {
548
620
const stub = < input type = "text" value = { 0 } onChange = { emptyFunction } /> ;
549
621
const node = ReactDOM . render ( stub , container ) ;
0 commit comments