@@ -660,6 +660,55 @@ def test_validator_delegates_and_source() -> None:
660
660
assert delegate_param .vals == some_other_validator
661
661
662
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
+
711
+
663
712
def test_value_validation_with_offset_and_scale () -> None :
664
713
source_param = Parameter (
665
714
"source" , set_cmd = None , get_cmd = None , vals = vals .Numbers (- 5 , 5 )
0 commit comments