From f9e9c34ee37bce0768d504925e9e2a001c11a7aa Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Thu, 17 Nov 2022 16:40:52 +0100 Subject: [PATCH] Minor cleanup and add test for offsetbox --- .../test_offsetbox/paddedbox.png | Bin 0 -> 6014 bytes lib/matplotlib/tests/test_offsetbox.py | 65 ++++++++++++++++-- 2 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_offsetbox/paddedbox.png diff --git a/lib/matplotlib/tests/baseline_images/test_offsetbox/paddedbox.png b/lib/matplotlib/tests/baseline_images/test_offsetbox/paddedbox.png new file mode 100644 index 0000000000000000000000000000000000000000..dfb68e2c35a195ee602fda1141034b12345ee5d6 GIT binary patch literal 6014 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 q^qB6doi6jT%0@%bM*qKOr)$VDzqH6pgI& literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/test_offsetbox.py b/lib/matplotlib/tests/test_offsetbox.py index a0116d5dfcd9..cd57122272df 100644 --- a/lib/matplotlib/tests/test_offsetbox.py +++ b/lib/matplotlib/tests/test_offsetbox.py @@ -5,15 +5,15 @@ from numpy.testing import assert_allclose import pytest -from matplotlib.testing.decorators import image_comparison +from matplotlib.testing.decorators import check_figures_equal, image_comparison import matplotlib.pyplot as plt import matplotlib.patches as mpatches import matplotlib.lines as mlines from matplotlib.backend_bases import MouseButton, MouseEvent from matplotlib.offsetbox import ( - AnchoredOffsetbox, AnnotationBbox, AnchoredText, DrawingArea, OffsetBox, - OffsetImage, PaddedBox, TextArea, _get_packed_offsets, HPacker, VPacker) + AnchoredOffsetbox, AnnotationBbox, AnchoredText, DrawingArea, HPacker, + OffsetBox, OffsetImage, PaddedBox, TextArea, VPacker, _get_packed_offsets) @image_comparison(['offsetbox_clipping'], remove_text=True) @@ -28,6 +28,7 @@ def test_offsetbox_clipping(): fig, ax = plt.subplots() size = 100 da = DrawingArea(size, size, clip=True) + assert da.clip_children bg = mpatches.Rectangle((0, 0), size, size, facecolor='#CCCCCC', edgecolor='None', @@ -386,10 +387,66 @@ def test_packers(align): [(px + x_height, py), (px, py - y2)]) -def test_paddedbox(): +def test_paddedbox_default_values(): # smoke test paddedbox for correct default value fig, ax = plt.subplots() at = AnchoredText("foo", 'upper left') pb = PaddedBox(at, patch_attrs={'facecolor': 'r'}, draw_frame=True) ax.add_artist(pb) fig.draw_without_rendering() + + +def test_annotationbbox_properties(): + ab = AnnotationBbox(DrawingArea(20, 20, 0, 0, clip=True), (0.5, 0.5), + xycoords='data') + assert ab.xyann == (0.5, 0.5) # xy if xybox not given + assert ab.anncoords == 'data' # xycoords if boxcoords not given + + ab = AnnotationBbox(DrawingArea(20, 20, 0, 0, clip=True), (0.5, 0.5), + xybox=(-0.2, 0.4), xycoords='data', + boxcoords='axes fraction') + assert ab.xyann == (-0.2, 0.4) # xybox if given + assert ab.anncoords == 'axes fraction' # boxcoords if given + + +def test_textarea_properties(): + ta = TextArea('Foo') + assert ta.get_text() == 'Foo' + assert not ta.get_multilinebaseline() + + ta.set_text('Bar') + ta.set_multilinebaseline(True) + assert ta.get_text() == 'Bar' + assert ta.get_multilinebaseline() + + +@check_figures_equal() +def test_textarea_set_text(fig_test, fig_ref): + ax_ref = fig_ref.add_subplot() + text0 = AnchoredText("Foo", "upper left") + ax_ref.add_artist(text0) + + ax_test = fig_test.add_subplot() + text1 = AnchoredText("Bar", "upper left") + ax_test.add_artist(text1) + text1.txt.set_text("Foo") + + +@image_comparison(['paddedbox.png'], remove_text=True, style='mpl20') +def test_paddedbox(): + fig, ax = plt.subplots() + + ta = TextArea("foo") + pb = PaddedBox(ta, pad=5, patch_attrs={'facecolor': 'r'}, draw_frame=True) + ab = AnchoredOffsetbox('upper left', child=pb) + ax.add_artist(ab) + + ta = TextArea("bar") + pb = PaddedBox(ta, pad=10, patch_attrs={'facecolor': 'b'}) + ab = AnchoredOffsetbox('upper right', child=pb) + ax.add_artist(ab) + + ta = TextArea("foobar") + pb = PaddedBox(ta, pad=15, draw_frame=True) + ab = AnchoredOffsetbox('lower right', child=pb) + ax.add_artist(ab)