@@ -574,18 +574,23 @@ def test_value_validation() -> None:
574
574
source_param = Parameter ("source" , set_cmd = None , get_cmd = None )
575
575
delegate_param = DelegateParameter ("delegate" , source = source_param )
576
576
577
+ # Test case where source parameter validator is None and delegate parameter validator is
578
+ # specified.
577
579
delegate_param .vals = vals .Numbers (- 10 , 10 )
578
580
source_param .vals = None
579
581
delegate_param .validate (1 )
580
582
with pytest .raises (ValueError ):
581
583
delegate_param .validate (11 )
582
584
585
+ # Test where delegate parameter validator is None and source parameter validator is
586
+ # specified.
583
587
delegate_param .vals = None
584
588
source_param .vals = vals .Numbers (- 5 , 5 )
585
589
delegate_param .validate (1 )
586
590
with pytest .raises (ValueError ):
587
591
delegate_param .validate (6 )
588
592
593
+ # Test case where source parameter validator is more restricted than delegate parameter.
589
594
delegate_param .vals = vals .Numbers (- 10 , 10 )
590
595
source_param .vals = vals .Numbers (- 5 , 5 )
591
596
delegate_param .validate (1 )
@@ -594,6 +599,115 @@ def test_value_validation() -> None:
594
599
with pytest .raises (ValueError ):
595
600
delegate_param .validate (11 )
596
601
602
+ # Test case that the order of setting validator on source and delegate parameters does not matter.
603
+ source_param .vals = vals .Numbers (- 5 , 5 )
604
+ delegate_param .vals = vals .Numbers (- 10 , 10 )
605
+ delegate_param .validate (1 )
606
+ with pytest .raises (ValueError ):
607
+ delegate_param .validate (6 )
608
+ with pytest .raises (ValueError ):
609
+ delegate_param .validate (11 )
610
+
611
+ # Test case where delegate parameter validator is more restricted than source parameter.
612
+ delegate_param .vals = vals .Numbers (- 5 , 5 )
613
+ source_param .vals = vals .Numbers (- 10 , 10 )
614
+ delegate_param .validate (1 )
615
+ with pytest .raises (ValueError ):
616
+ delegate_param .validate (6 )
617
+ with pytest .raises (ValueError ):
618
+ delegate_param .validate (11 )
619
+
620
+ # Test case that the order of setting validator on source and delegate parameters does not matter.
621
+ source_param .vals = vals .Numbers (- 10 , 10 )
622
+ delegate_param .vals = vals .Numbers (- 5 , 5 )
623
+ delegate_param .validate (1 )
624
+ with pytest .raises (ValueError ):
625
+ delegate_param .validate (6 )
626
+ with pytest .raises (ValueError ):
627
+ delegate_param .validate (11 )
628
+
629
+
630
+ def test_validator_delegates_as_expected () -> None :
631
+ source_param = Parameter ("source" , set_cmd = None , get_cmd = None )
632
+ delegate_param = DelegateParameter ("delegate" , source = source_param )
633
+ some_validator = vals .Numbers (- 10 , 10 )
634
+ source_param .vals = some_validator
635
+ delegate_param .vals = None
636
+ delegate_param .validate (1 )
637
+ with pytest .raises (ValueError ):
638
+ delegate_param .validate (11 )
639
+ assert delegate_param .validators == (some_validator ,)
640
+ assert delegate_param .vals == some_validator
641
+
642
+
643
+ def test_validator_delegates_and_source () -> None :
644
+ source_param = Parameter ("source" , set_cmd = None , get_cmd = None )
645
+ delegate_param = DelegateParameter ("delegate" , source = source_param )
646
+ some_validator = vals .Numbers (- 10 , 10 )
647
+ some_other_validator = vals .Numbers (- 5 , 5 )
648
+ source_param .vals = some_validator
649
+ delegate_param .vals = some_other_validator
650
+ delegate_param .validate (1 )
651
+ with pytest .raises (ValueError ):
652
+ delegate_param .validate (6 )
653
+ assert delegate_param .validators == (some_other_validator , some_validator )
654
+ assert delegate_param .vals == some_other_validator
655
+
656
+ assert delegate_param .source is not None
657
+ delegate_param .source .vals = None
658
+
659
+ assert delegate_param .validators == (some_other_validator ,)
660
+ assert delegate_param .vals == some_other_validator
661
+
662
+
663
+ def test_validator_delegates_and_source_chain () -> None :
664
+ source_param = Parameter ("source" , set_cmd = None , get_cmd = None )
665
+ delegate_inner = DelegateParameter ("delegate_inner" , source = source_param )
666
+ delegate_outer = DelegateParameter ("delegate_outer" , source = delegate_inner )
667
+ source_validator = vals .Numbers (- 10 , 10 )
668
+ delegate_inner_validator = vals .Numbers (- 7 , 7 )
669
+ delegate_outer_validator = vals .Numbers (- 5 , 5 )
670
+
671
+ source_param .vals = source_validator
672
+ delegate_inner .vals = delegate_inner_validator
673
+ delegate_outer .vals = delegate_outer_validator
674
+
675
+ delegate_outer .validate (1 )
676
+ with pytest .raises (ValueError ):
677
+ delegate_outer .validate (6 )
678
+
679
+ delegate_inner .validate (6 )
680
+ source_param .validate (6 )
681
+
682
+ assert delegate_outer .validators == (
683
+ delegate_outer_validator ,
684
+ delegate_inner_validator ,
685
+ source_validator ,
686
+ )
687
+ assert delegate_outer .vals == delegate_outer_validator
688
+
689
+ assert delegate_inner .validators == (
690
+ delegate_inner_validator ,
691
+ source_validator ,
692
+ )
693
+ assert delegate_inner .vals == delegate_inner_validator
694
+
695
+ assert delegate_outer .source is not None
696
+ delegate_outer .source .vals = None
697
+
698
+ assert delegate_outer .validators == (
699
+ delegate_outer_validator ,
700
+ source_validator ,
701
+ )
702
+ assert delegate_outer .vals == delegate_outer_validator
703
+
704
+ assert isinstance (delegate_outer .source , DelegateParameter )
705
+ assert delegate_outer .source .source is not None
706
+ delegate_outer .source .source .vals = None
707
+
708
+ assert delegate_outer .validators == (delegate_outer_validator ,)
709
+ assert delegate_outer .vals == delegate_outer_validator
710
+
597
711
598
712
def test_value_validation_with_offset_and_scale () -> None :
599
713
source_param = Parameter (
0 commit comments