@@ -127,6 +127,27 @@ mod tests {
127
127
) ;
128
128
}
129
129
130
+ #[ test]
131
+ fn dynamic_enum_should_apply_dynamic_enum ( ) {
132
+ let mut a = DynamicEnum :: from ( MyEnum :: B ( 123 , 321 ) ) ;
133
+ let b = DynamicEnum :: from ( MyEnum :: B ( 123 , 321 ) ) ;
134
+
135
+ // Sanity check that equality check works
136
+ assert ! (
137
+ a. reflect_partial_eq( & b) . unwrap_or_default( ) ,
138
+ "dynamic enums should be equal"
139
+ ) ;
140
+
141
+ a. set_variant ( "A" , ( ) ) ;
142
+ assert ! (
143
+ !a. reflect_partial_eq( & b) . unwrap_or_default( ) ,
144
+ "dynamic enums should not be equal"
145
+ ) ;
146
+
147
+ a. apply ( & b) ;
148
+ assert ! ( a. reflect_partial_eq( & b) . unwrap_or_default( ) ) ;
149
+ }
150
+
130
151
#[ test]
131
152
fn dynamic_enum_should_change_variant ( ) {
132
153
let mut value = MyEnum :: A ;
@@ -429,6 +450,120 @@ mod tests {
429
450
) ;
430
451
}
431
452
453
+ #[ test]
454
+ fn enum_should_apply ( ) {
455
+ let mut value: Box < dyn Reflect > = Box :: new ( MyEnum :: A ) ;
456
+
457
+ // === MyEnum::A -> MyEnum::A === //
458
+ value. apply ( & MyEnum :: A ) ;
459
+ assert ! ( value. reflect_partial_eq( & MyEnum :: A ) . unwrap_or_default( ) ) ;
460
+
461
+ // === MyEnum::A -> MyEnum::B === //
462
+ value. apply ( & MyEnum :: B ( 123 , 321 ) ) ;
463
+ assert ! ( value
464
+ . reflect_partial_eq( & MyEnum :: B ( 123 , 321 ) )
465
+ . unwrap_or_default( ) ) ;
466
+
467
+ // === MyEnum::B -> MyEnum::B === //
468
+ value. apply ( & MyEnum :: B ( 321 , 123 ) ) ;
469
+ assert ! ( value
470
+ . reflect_partial_eq( & MyEnum :: B ( 321 , 123 ) )
471
+ . unwrap_or_default( ) ) ;
472
+
473
+ // === MyEnum::B -> MyEnum::C === //
474
+ value. apply ( & MyEnum :: C {
475
+ foo : 1.23 ,
476
+ bar : true ,
477
+ } ) ;
478
+ assert ! ( value
479
+ . reflect_partial_eq( & MyEnum :: C {
480
+ foo: 1.23 ,
481
+ bar: true
482
+ } )
483
+ . unwrap_or_default( ) ) ;
484
+
485
+ // === MyEnum::C -> MyEnum::C === //
486
+ value. apply ( & MyEnum :: C {
487
+ foo : 3.21 ,
488
+ bar : false ,
489
+ } ) ;
490
+ assert ! ( value
491
+ . reflect_partial_eq( & MyEnum :: C {
492
+ foo: 3.21 ,
493
+ bar: false
494
+ } )
495
+ . unwrap_or_default( ) ) ;
496
+
497
+ // === MyEnum::C -> MyEnum::B === //
498
+ value. apply ( & MyEnum :: B ( 123 , 321 ) ) ;
499
+ assert ! ( value
500
+ . reflect_partial_eq( & MyEnum :: B ( 123 , 321 ) )
501
+ . unwrap_or_default( ) ) ;
502
+
503
+ // === MyEnum::B -> MyEnum::A === //
504
+ value. apply ( & MyEnum :: A ) ;
505
+ assert ! ( value. reflect_partial_eq( & MyEnum :: A ) . unwrap_or_default( ) ) ;
506
+ }
507
+
508
+ #[ test]
509
+ fn enum_should_set ( ) {
510
+ let mut value: Box < dyn Reflect > = Box :: new ( MyEnum :: A ) ;
511
+
512
+ // === MyEnum::A -> MyEnum::A === //
513
+ value. set ( Box :: new ( MyEnum :: A ) ) . unwrap ( ) ;
514
+ assert ! ( value. reflect_partial_eq( & MyEnum :: A ) . unwrap_or_default( ) ) ;
515
+
516
+ // === MyEnum::A -> MyEnum::B === //
517
+ value. set ( Box :: new ( MyEnum :: B ( 123 , 321 ) ) ) . unwrap ( ) ;
518
+ assert ! ( value
519
+ . reflect_partial_eq( & MyEnum :: B ( 123 , 321 ) )
520
+ . unwrap_or_default( ) ) ;
521
+
522
+ // === MyEnum::B -> MyEnum::B === //
523
+ value. set ( Box :: new ( MyEnum :: B ( 321 , 123 ) ) ) . unwrap ( ) ;
524
+ assert ! ( value
525
+ . reflect_partial_eq( & MyEnum :: B ( 321 , 123 ) )
526
+ . unwrap_or_default( ) ) ;
527
+
528
+ // === MyEnum::B -> MyEnum::C === //
529
+ value
530
+ . set ( Box :: new ( MyEnum :: C {
531
+ foo : 1.23 ,
532
+ bar : true ,
533
+ } ) )
534
+ . unwrap ( ) ;
535
+ assert ! ( value
536
+ . reflect_partial_eq( & MyEnum :: C {
537
+ foo: 1.23 ,
538
+ bar: true
539
+ } )
540
+ . unwrap_or_default( ) ) ;
541
+
542
+ // === MyEnum::C -> MyEnum::C === //
543
+ value
544
+ . set ( Box :: new ( MyEnum :: C {
545
+ foo : 3.21 ,
546
+ bar : false ,
547
+ } ) )
548
+ . unwrap ( ) ;
549
+ assert ! ( value
550
+ . reflect_partial_eq( & MyEnum :: C {
551
+ foo: 3.21 ,
552
+ bar: false
553
+ } )
554
+ . unwrap_or_default( ) ) ;
555
+
556
+ // === MyEnum::C -> MyEnum::B === //
557
+ value. set ( Box :: new ( MyEnum :: B ( 123 , 321 ) ) ) . unwrap ( ) ;
558
+ assert ! ( value
559
+ . reflect_partial_eq( & MyEnum :: B ( 123 , 321 ) )
560
+ . unwrap_or_default( ) ) ;
561
+
562
+ // === MyEnum::B -> MyEnum::A === //
563
+ value. set ( Box :: new ( MyEnum :: A ) ) . unwrap ( ) ;
564
+ assert ! ( value. reflect_partial_eq( & MyEnum :: A ) . unwrap_or_default( ) ) ;
565
+ }
566
+
432
567
#[ test]
433
568
fn enum_should_partial_eq ( ) {
434
569
#[ derive( Reflect ) ]
0 commit comments