Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 884dd03

Browse files
committed
TST: add an figure comparison test that exercise fallback
1 parent cdcc25d commit 884dd03

File tree

2 files changed

+78
-46
lines changed

2 files changed

+78
-46
lines changed

lib/matplotlib/tests/test_font_manager.py

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -132,31 +132,6 @@ def test_find_noto():
132132
fig.savefig(BytesIO(), format=fmt)
133133

134134

135-
def test_fallback_smoke():
136-
fp = FontProperties(family=["WenQuanYi Zen Hei"])
137-
if Path(findfont(fp)).name != "wqy-zenhei.ttc":
138-
pytest.skip("Font wqy-zenhei.ttc may be missing")
139-
140-
fp = FontProperties(family=["Noto Sans CJK JP"])
141-
if Path(findfont(fp)).name != "NotoSansCJK-Regular.ttc":
142-
pytest.skip("Noto Sans CJK JP font may be missing.")
143-
144-
plt.rcParams['font.size'] = 20
145-
fig = plt.figure(figsize=(4.75, 1.85))
146-
fig.text(0.05, 0.45, "There are 几个汉字 in between!",
147-
family=['DejaVu Sans', "Noto Sans CJK JP"])
148-
fig.text(0.05, 0.25, "There are 几个汉字 in between!",
149-
family=['DejaVu Sans', "WenQuanYi Zen Hei"])
150-
fig.text(0.05, 0.65, "There are 几个汉字 in between!",
151-
family=["Noto Sans CJK JP"])
152-
fig.text(0.05, 0.85, "There are 几个汉字 in between!",
153-
family=["WenQuanYi Zen Hei"])
154-
155-
# TODO enable fallback for other backends!
156-
for fmt in ['png', 'raw']: # ["svg", "pdf", "ps"]:
157-
fig.savefig(BytesIO(), format=fmt)
158-
159-
160135
def test_find_invalid(tmpdir):
161136
tmp_path = Path(tmpdir)
162137

@@ -347,24 +322,3 @@ def test_get_font_names():
347322
assert set(available_fonts) == set(mpl_font_names)
348323
assert len(available_fonts) == len(mpl_font_names)
349324
assert available_fonts == mpl_font_names
350-
351-
352-
def test_fallback_errors():
353-
file_name = findfont('DejaVu Sans')
354-
355-
with pytest.raises(TypeError, match="Fallback list must be a list"):
356-
# failing to be a list will fail before the 0
357-
ft2font.FT2Font(file_name, _fallback_list=(0,))
358-
359-
with pytest.raises(
360-
TypeError, match="Fallback fonts must be FT2Font objects."
361-
):
362-
ft2font.FT2Font(file_name, _fallback_list=[0])
363-
364-
365-
def test_ft2font_positive_hinting_factor():
366-
file_name = findfont('DejaVu Sans')
367-
with pytest.raises(
368-
ValueError, match="hinting_factor must be greater than 0"
369-
):
370-
ft2font.FT2Font(file_name, 0)

lib/matplotlib/tests/test_ft2font.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
from pathlib import Path
2+
import io
3+
import pytest
4+
5+
from matplotlib import ft2font
6+
from matplotlib.testing.decorators import check_figures_equal
7+
import matplotlib.font_manager as fm
8+
import matplotlib.pyplot as plt
9+
10+
11+
def test_fallback_errors():
12+
file_name = fm.findfont('DejaVu Sans')
13+
14+
with pytest.raises(TypeError, match="Fallback list must be a list"):
15+
# failing to be a list will fail before the 0
16+
ft2font.FT2Font(file_name, _fallback_list=(0,))
17+
18+
with pytest.raises(
19+
TypeError, match="Fallback fonts must be FT2Font objects."
20+
):
21+
ft2font.FT2Font(file_name, _fallback_list=[0])
22+
23+
24+
def test_ft2font_positive_hinting_factor():
25+
file_name = fm.findfont('DejaVu Sans')
26+
with pytest.raises(
27+
ValueError, match="hinting_factor must be greater than 0"
28+
):
29+
ft2font.FT2Font(file_name, 0)
30+
31+
32+
def test_fallback_smoke():
33+
fp = fm.FontProperties(family=["WenQuanYi Zen Hei"])
34+
if Path(fm.findfont(fp)).name != "wqy-zenhei.ttc":
35+
pytest.skip("Font wqy-zenhei.ttc may be missing")
36+
37+
fp = fm.FontProperties(family=["Noto Sans CJK JP"])
38+
if Path(fm.findfont(fp)).name != "NotoSansCJK-Regular.ttc":
39+
pytest.skip("Noto Sans CJK JP font may be missing.")
40+
41+
plt.rcParams['font.size'] = 20
42+
fig = plt.figure(figsize=(4.75, 1.85))
43+
fig.text(0.05, 0.45, "There are 几个汉字 in between!",
44+
family=['DejaVu Sans', "Noto Sans CJK JP"])
45+
fig.text(0.05, 0.25, "There are 几个汉字 in between!",
46+
family=['DejaVu Sans', "WenQuanYi Zen Hei"])
47+
fig.text(0.05, 0.65, "There are 几个汉字 in between!",
48+
family=["Noto Sans CJK JP"])
49+
fig.text(0.05, 0.85, "There are 几个汉字 in between!",
50+
family=["WenQuanYi Zen Hei"])
51+
52+
# TODO enable fallback for other backends!
53+
for fmt in ['png', 'raw']: # ["svg", "pdf", "ps"]:
54+
fig.savefig(io.BytesIO(), format=fmt)
55+
56+
57+
@pytest.mark.parametrize('ch_font',
58+
[("WenQuanYi Zen Hei", "wqy-zenhei.ttc"),
59+
("Noto Sans CJK JP", "NotoSansCJK-Regular.ttc")]
60+
)
61+
@check_figures_equal(extensions=["png"])
62+
def test_font_fallback_chinese(fig_test, fig_ref, ch_font):
63+
family_name, file_name = ch_font
64+
fp = fm.FontProperties(family=[family_name])
65+
if Path(fm.findfont(fp)).name != file_name:
66+
pytest.skip(f"Font {family_name} ({file_name}) is missing")
67+
68+
text = ["There are", "几个汉字", "in between!"]
69+
70+
plt.rcParams["font.size"] = 20
71+
test_fonts = [["DejaVu Sans", family_name]] * 3
72+
ref_fonts = [["DejaVu Sans"], [family_name], ["DejaVu Sans"]]
73+
74+
for j, (txt, test_font, ref_font) in enumerate(
75+
zip(text, test_fonts, ref_fonts)
76+
):
77+
fig_ref.text(0.05, .85 - 0.15*j, txt, family=ref_font)
78+
fig_test.text(0.05, .85 - 0.15*j, txt, family=test_font)

0 commit comments

Comments
 (0)