@@ -131,6 +131,148 @@ func Test_set_guifont()
131131 endif
132132endfunc
133133
134+ func Test_set_guifontset ()
135+ let skipped = 0
136+
137+ if has (' xfontset' )
138+ let l: ctype_saved = v: ctype
139+
140+ " For UTF-8 locales, XCreateFontSet(3) is likely to fail in constructing a
141+ " fontset automatically from one or two simple XLFDs because it requires
142+ " the host system to have a fairly comprehensive collection of fixed-width
143+ " fonts with various sizes and registries/encodings in order to get the
144+ " job done. To make the test meaningful for a wide variety of hosts, we
145+ " confine ourselves to the following locale for which X11 historically has
146+ " the fonts to use with.
147+ language ctype ja_JP.eucJP
148+
149+ " Since XCreateFontSet(3) is very sensitive to locale, fonts must be
150+ " chosen meticulously.
151+ let l: font_head = ' -misc-fixed-medium-r-normal--14'
152+
153+ let l: font_aw70 = l: font_head . ' -130-75-75-c-70'
154+ let l: font_aw140 = l: font_head . ' -130-75-75-c-140'
155+
156+ let l: font_jisx0201 = l: font_aw70 . ' -jisx0201.1976-0'
157+ let l: font_jisx0208 = l: font_aw140 . ' -jisx0208.1983-0'
158+
159+ " Full XLFDs
160+ let l: fontset_name = join ([ l: font_jisx0208 , l: font_jisx0201 ], ' ,' )
161+ exec ' set guifontset=' . l: fontset_name
162+ call assert_equal (l: fontset_name , &guifontset )
163+
164+ " XLFDs w/o CharSetRegistry and CharSetEncoding
165+ let l: fontset_name = join ([ l: font_aw140 , l: font_aw70 ], ' ,' )
166+ exec ' set guifontset=' . l: fontset_name
167+ call assert_equal (l: fontset_name , &guifontset )
168+
169+ " Singleton
170+ let l: fontset_name = l: font_head . ' -*'
171+ exec ' set guifontset=' . l: fontset_name
172+ call assert_equal (l: fontset_name , &guifontset )
173+
174+ " Aliases
175+ let l: fontset_name = ' k14,r14'
176+ exec ' set guifontset=' . l: fontset_name
177+ call assert_equal (l: fontset_name , &guifontset )
178+
179+ exec ' language ctype' l: ctype_saved
180+
181+ else
182+ let skipped = 1
183+ endif
184+
185+ if skipped
186+ throw " Skipped: Not supported by this GUI"
187+ endif
188+ endfunc
189+
190+ func Test_set_guifontwide ()
191+ let skipped = 0
192+
193+ if has (' gui_gtk' )
194+ let l: guifont_saved = &guifont
195+ let l: guifontwide_saved = &guifontwide
196+
197+ let l: fc_match = exepath (' fc-match' )
198+ if l: fc_match != ' '
199+ let &guifont = system (' fc-match -f "%{family[0]} %{size}" monospace:size=10' )
200+ let l: wide = system (' fc-match -f "%{family[0]} %{size}" monospace:size=10:lang=ja' )
201+ exec ' set guifontwide=' . fnameescape (l: wide )
202+ call assert_equal (l: wide , &guifontwide )
203+ else
204+ let skipped = 3
205+ endif
206+
207+ let &guifontwide = l: guifontwide_saved
208+ let &guifont = l: guifont_saved
209+
210+ elseif has (' gui_athena' ) || has (' gui_motif' )
211+ " guifontwide is premised upon the xfontset feature.
212+ if has (' xfontset' )
213+ let l: encoding_saved = &encoding
214+ let l: guifont_saved = &guifont
215+ let l: guifontset_saved = &guifontset
216+ let l: guifontwide_saved = &guifontwide
217+
218+ let l: nfont = ' -misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1'
219+ let l: wfont = ' -misc-fixed-medium-r-normal-*-18-120-100-100-c-180-iso10646-1'
220+
221+ set encoding = utf- 8
222+
223+ " Case 1: guifontset is empty
224+ set guifontset =
225+
226+ " Case 1-1: Automatic selection
227+ set guifontwide =
228+ exec ' set guifont=' . l: nfont
229+ call assert_equal (l: wfont , &guifontwide )
230+
231+ " Case 1-2: Manual selection
232+ exec ' set guifontwide=' . l: wfont
233+ exec ' set guifont=' . l: nfont
234+ call assert_equal (l: wfont , &guifontwide )
235+
236+ " Case 2: guifontset is invalid
237+ try
238+ set guifontset = -*- notexist-*
239+ call assert_false (1 , " 'set guifontset=notexist' should have failed" )
240+ catch
241+ call assert_exception (' E598' )
242+ endtry
243+ " Set it to an invalid value brutally for preparation.
244+ let &guifontset = ' -*-notexist-*'
245+
246+ " Case 2-1: Automatic selection
247+ set guifontwide =
248+ exec ' set guifont=' . l: nfont
249+ call assert_equal (l: wfont , &guifontwide )
250+
251+ " Case 2-2: Manual selection
252+ exec ' set guifontwide=' . l: wfont
253+ exec ' set guifont=' . l: nfont
254+ call assert_equal (l: wfont , &guifontwide )
255+
256+ let &guifontwide = l: guifontwide_saved
257+ let &guifontset = l: guifontset_saved
258+ let &guifont = l: guifont_saved
259+ let &encoding = l: encoding_saved
260+ else
261+ let skipped = 2
262+ endif
263+ else
264+ let skipped = 1
265+ endif
266+
267+ if skipped == 1
268+ throw " Skipped: Test not implemented yet for this GUI"
269+ elseif skipped == 2
270+ throw " Skipped: Not supported by this GUI"
271+ elseif skipped == 3
272+ throw " Skipped: Test not supported by the environment"
273+ endif
274+ endfunc
275+
134276func Test_getwinpos ()
135277 call assert_match (' Window position: X \d\+, Y \d\+' , execute (' winpos' ))
136278 call assert_true (getwinposx () >= 0 )
0 commit comments