8000 TST: add an image test that exercises fallback · matplotlib/matplotlib@b32cd4c · GitHub
[go: up one dir, main page]

Skip to content

Commit b32cd4c

Browse files
committed
TST: add an image test that exercises fallback
1 parent cdcc25d commit b32cd4c

File tree

3 files changed

+74
-46
lines changed

3 files changed

+74
-46
lines changed
Loading

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: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
from pathlib import Path
2+
import io
3+
import pytest
4+
5+
from matplotlib import ft2font
6+
from matplotlib.testing.decorators import image_comparison
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+
@image_comparison(['font_fallback.png'])
58+
def test_font_fallback_chinese():
59+
fp = fm.FontProperties(family=["WenQuanYi Zen Hei"])
60+
if Path(fm.findfont(fp)).name != "wqy-zenhei.ttc":
61+
pytest.skip("Font wqy-zenhei.ttc may be missing")
62+
63+
fp = fm.FontProperties(family=["Noto Sans CJK JP"])
64+
if Path(fm.findfont(fp)).name != "NotoSansCJK-Regular.ttc":
65+
pytest.skip("Noto Sans CJK JP font may be missing.")
66+
67+
text = "There are 几个汉字 in between!"
68+
69+
plt.rcParams["font.size"] = 20
70+
fig = plt.figure(figsize=(4.75, 1.85))
71+
fig.text(0.05, 0.85, text, family=["Noto Sans CJK JP"])
72+
fig.text(0.05, 0.65, text, family=["WenQuanYi Zen Hei"])
73+
fig.text(0.05, 0.45, text, family=["DejaVu Sans", "Noto Sans CJK JP"])
74+
fig.text(0.05, 0.25, text, family=["DejaVu Sans", "WenQuanYi Zen Hei"])

0 commit comments

Comments
 (0)
0