@@ -131,6 +131,148 @@ func Test_set_guifont()
131
131
endif
132
132
endfunc
133
133
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
+
134
276
func Test_getwinpos ()
135
277
call assert_match (' Window position: X \d\+, Y \d\+' , execute (' winpos' ))
136
278
call assert_true (getwinposx () >= 0 )
0 commit comments