@@ -600,3 +600,37 @@ def test_transformed_patch_path():
600600 # from the transform).
601601 patch .set_radius (0.5 )
602602 assert_allclose (tpatch .get_fully_transformed_path ().vertices , points )
603+
604+
605+ @pytest .mark .parametrize ('locked_element' , ['x0' , 'y0' , 'x1' , 'y1' ])
606+ def test_lockable_bbox (locked_element ):
607+ other_elements = ['x0' , 'y0' , 'x1' , 'y1' ]
608+ other_elements .remove (locked_element )
609+
610+ orig = mtransforms .Bbox .unit ()
611+ locked = mtransforms .LockableBbox (orig , ** {locked_element : 2 })
612+
613+ # LockableBbox should keep its locked element as specified in __init__.
614+ assert getattr (locked , locked_element ) == 2
615+ assert getattr (locked , 'get_locked_' + locked_element )() == 2
616+ for elem in other_elements :
617+ assert getattr (locked , elem ) == getattr (orig , elem )
618+
619+ # Changing underlying Bbox should update everything but locked element.
620+ orig .set_points (orig .get_points () + 10 )
621+ assert getattr (locked , locked_element ) == 2
622+ assert getattr (locked , 'get_locked_' + locked_element )() == 2
623+ for elem in other_elements :
624+ assert getattr (locked , elem ) == getattr (orig , elem )
625+
626+ # Unlocking element should revert values back to the underlying Bbox.
627+ getattr (locked , 'set_locked_' + locked_element )(None )
628+ assert getattr (locked , 'get_locked_' + locked_element )() is None
629+ assert np .all (orig .get_points () == locked .get_points ())
630+
631+ # Relocking an element should change its value, but not others.
632+ getattr (locked , 'set_locked_' + locked_element )(3 )
633+ assert getattr (locked , locked_element ) == 3
634+ assert getattr (locked , 'get_locked_' + locked_element )() == 3
635+ for elem in other_elements :
636+ assert getattr (locked , elem ) == getattr (orig , elem )
0 commit comments