@@ -600,3 +600,37 @@ def test_transformed_patch_path():
600
600
# from the transform).
601
601
patch .set_radius (0.5 )
602
602
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