@@ -30,25 +30,21 @@ def test_ft2font_positive_hinting_factor():
3030 ft2font .FT2Font (file_name , 0 )
3131
3232
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" )
4242 plt .rcParams ['font.size' ] = 20
4343 fig = plt .figure (figsize = (4.75 , 1.85 ))
4444 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 ])
5046 fig .text (0.05 , 0.85 , "There are 几个汉字 in between!" ,
51- family = ["WenQuanYi Zen Hei" ])
47+ family = [family_name ])
5248
5349 # TODO enable fallback for other backends!
5450 for fmt in ['png' , 'raw' ]: # ["svg", "pdf", "ps"]:
@@ -57,7 +53,8 @@ def test_fallback_smoke():
5753
5854@pytest .mark .parametrize ('family_name, file_name' ,
5955 [("WenQuanYi Zen Hei" , "wqy-zenhei" ),
60- ("Noto Sans CJK JP" , "NotoSansCJK" )]
56+ ("Noto Sans CJK JP" , "NotoSansCJK" ),
57+ ("Noto Sans TC" , "NotoSansTC-Regular.otf" )]
6158 )
6259@check_figures_equal (extensions = ["png" , "pdf" , "eps" , "svg" ])
6360def 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):
7875 fig_test .text (0.05 , .85 - 0.15 * j , txt , family = test_font )
7976
8077
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+
8196@pytest .mark .parametrize (
8297 "family_name, file_name" ,
8398 [
8499 ("WenQuanYi Zen Hei" , "wqy-zenhei" ),
85100 ("Noto Sans CJK JP" , "NotoSansCJK" ),
101+ ("Noto Sans TC" , "NotoSansTC-Regular.otf" )
86102 ],
87103)
88104def test__get_fontmap (family_name , file_name ):
89105 fp = fm .FontProperties (family = [family_name ])
106+
90107 found_file_name = Path (fm .findfont (fp )).name
91108 if file_name not in found_file_name :
92109 pytest .skip (f"Font { family_name } ({ file_name } ) is missing" )
93110
94111 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 )
100117
101118 fontmap = ft ._get_fontmap (text )
102119 for char , font in fontmap .items ():
0 commit comments