@@ -30,25 +30,21 @@ def test_ft2font_positive_hinting_factor():
30
30
ft2font .FT2Font (file_name , 0 )
31
31
32
32
33
- def test_fallback_smoke ():
34
- fp = fm . FontProperties ( family = [ "WenQuanYi Zen Hei" ])
35
- if Path ( fm . findfont ( fp )). name != "wqy-zenhei .ttc":
36
- pytest . skip ( "Font wqy-zenhei.ttc may be missing" )
37
-
38
- fp = fm . FontProperties ( family = [ "Noto Sans CJK JP" ])
39
- if Path ( fm . findfont ( fp )). name != "NotoSansCJK-Regular.ttc" :
40
- pytest . skip ( "Noto Sans CJK JP font may be missing." )
41
-
33
+ @ pytest . mark . parametrize ( 'family_name, file_name' ,
34
+ [( "WenQuanYi Zen Hei" , "wqy-zenhei.ttc" ),
35
+ ( "Noto Sans CJK JP" , "NotoSansCJK .ttc"),
36
+ ( "Noto Sans TC" , "NotoSansTC-Regular.otf" )]
37
+ )
38
+ def test_fallback_smoke ( family_name , file_name ):
39
+ fp = fm . FontProperties ( family = [ family_name ])
40
+ if Path ( fm . findfont ( fp )). name != file_name :
41
+ pytest . skip ( f"Font { family_name } ( { file_name } ) is missing" )
42
42
plt .rcParams ['font.size' ] = 20
43
43
fig = plt .figure (figsize = (4.75 , 1.85 ))
44
44
fig .text (0.05 , 0.45 , "There are 几个汉字 in between!" ,
45
- family = ['DejaVu Sans' , "Noto Sans CJK JP" ])
46
- fig .text (0.05 , 0.25 , "There are 几个汉字 in between!" ,
47
- family = ['DejaVu Sans' , "WenQuanYi Zen Hei" ])
48
- fig .text (0.05 , 0.65 , "There are 几个汉字 in between!" ,
49
- family = ["Noto Sans CJK JP" ])
45
+ family = ['DejaVu Sans' , family_name ])
50
46
fig .text (0.05 , 0.85 , "There are 几个汉字 in between!" ,
51
- family = ["WenQuanYi Zen Hei" ])
47
+ family = [family_name ])
52
48
53
49
# TODO enable fallback for other backends!
54
50
for fmt in ['png' , 'raw' ]: # ["svg", "pdf", "ps"]:
@@ -57,7 +53,8 @@ def test_fallback_smoke():
57
53
58
54
@pytest .mark .parametrize ('family_name, file_name' ,
59
55
[("WenQuanYi Zen Hei" , "wqy-zenhei" ),
60
- ("Noto Sans CJK JP" , "NotoSansCJK" )]
56
+ ("Noto Sans CJK JP" , "NotoSansCJK" ),
57
+ ("Noto Sans TC" , "NotoSansTC-Regular.otf" )]
61
58
)
62
59
@check_figures_equal (extensions = ["png" , "pdf" , "eps" , "svg" ])
63
60
def test_font_fallback_chinese (fig_test , fig_ref , family_name , file_name ):
@@ -78,25 +75,45 @@ def test_font_fallback_chinese(fig_test, fig_ref, family_name, file_name):
78
75
fig_test .text (0.05 , .85 - 0.15 * j , txt , family = test_font )
79
76
80
77
78
+ @pytest .mark .parametrize ("font_list" ,
79
+ [['DejaVu Serif' , 'DejaVu Sans' ],
80
+ ['DejaVu Sans Mono' ]],
81
+ ids = ["two fonts" , "one font" ])
82
+ def test_fallback_missing (recwarn , font_list ):
83
+ for family_name in font_list :
84
+ if not fm .findfont (fm .FontProperties (family = family_name )):
85
+ pytest .skip (f"Font { family_name } is missing" )
86
+
87
+ fig = plt .figure ()
88
+ fig .text (.5 , .5 , "Hello 🙃 World!" , family = font_list )
89
+ fig .canvas .draw ()
90
+ assert all (isinstance (warn .message , UserWarning ) for warn in recwarn )
91
+ e = "Glyph 128579 (\\ N{{UPSIDE-DOWN FACE}}) missing from current font {}."
92
+ assert ([(warn .message .args ) for warn in recwarn ] ==
93
+ [(e .format (font ),) for font in font_list [::- 1 ]])
94
+
95
+
81
96
@pytest .mark .parametrize (
82
97
"family_name, file_name" ,
83
98
[
84
99
("WenQuanYi Zen Hei" , "wqy-zenhei" ),
85
100
("Noto Sans CJK JP" , "NotoSansCJK" ),
101
+ ("Noto Sans TC" , "NotoSansTC-Regular.otf" )
86
102
],
87
103
)
88
104
def test__get_fontmap (family_name , file_name ):
89
105
fp = fm .FontProperties (family = [family_name ])
106
+
90
107
found_file_name = Path (fm .findfont (fp )).name
91
108
if file_name not in found_file_name :
92
109
pytest .skip (f"Font { family_name } ({ file_name } ) is missing" )
93
110
94
111
text = "There are 几个汉字 in between!"
95
- ft = fm . get_font (
96
- fm . fontManager . _find_fonts_by_props (
97
- fm .FontProperties (family = ["DejaVu Sans" , family_name ])
98
- )
99
- )
112
+
113
+ # breaking this out to debug segfault
114
+ font_properties = fm .FontProperties (family = ["DejaVu Sans" , family_name ])
115
+ fonts = fm . fontManager . _find_fonts_by_props ( font_properties )
116
+ ft = fm . get_font ( fonts )
100
117
101
118
fontmap = ft ._get_fontmap (text )
102
119
for char , font in fontmap .items ():
0 commit comments