@@ -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,41 @@ 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 Serif' ]],
81+ ids = ["two fonts" , "one font" ])
82+ def test_fallback_missing (recwarn , font_list ):
83+ fig = plt .figure ()
84+ fig .text (.5 , .5 , "Hello 🙃 World!" , family = font_list )
85+ fig .canvas .draw ()
86+ assert all (isinstance (warn .message , UserWarning ) for warn in recwarn )
87+ e = "Glyph 128579 (\\ N{{UPSIDE-DOWN FACE}}) missing from current font {}."
88+ assert ([(warn .message .args ) for warn in recwarn ] ==
89+ [(e .format (font ),) for font in font_list [::- 1 ]])
90+
91+
8192@pytest .mark .parametrize (
8293 "family_name, file_name" ,
8394 [
8495 ("WenQuanYi Zen Hei" , "wqy-zenhei" ),
8596 ("Noto Sans CJK JP" , "NotoSansCJK" ),
97+ ("Noto Sans TC" , "NotoSansTC-Regular.otf" )
8698 ],
8799)
88100def test__get_fontmap (family_name , file_name ):
89101 fp = fm .FontProperties (family = [family_name ])
102+
90103 found_file_name = Path (fm .findfont (fp )).name
91104 if file_name not in found_file_name :
92105 pytest .skip (f"Font { family_name } ({ file_name } ) is missing" )
93106
94107 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- )
108+
109+ # breaking this out to debug segfault
110+ font_properties = fm .FontProperties (family = ["DejaVu Sans" , family_name ])
111+ fonts = fm . fontManager . _find_fonts_by_props ( font_properties )
112+ ft = fm . get_font ( fonts )
100113
101114 fontmap = ft ._get_fontmap (text )
102115 for char , font in fontmap .items ():
0 commit comments