1
0
forked from aniani/vim

patch 8.2.3590: test for v:colornames sometimes fails

Problem:    Test for v:colornames sometimes fails. (Dominique Pellé)
Solution:   Check features.  Clear v:colornames between tests. (Drew Vogel,
            closes #9105, closes #9073)
This commit is contained in:
Drew Vogel
2021-11-13 10:50:01 +00:00
committed by Bram Moolenaar
parent 5300be620c
commit a0fca17251
5 changed files with 24 additions and 35 deletions

View File

@@ -1871,7 +1871,7 @@ v:colornames A dictionary that maps color names to hex color strings. These
by setting it in their |.vimrc|. by setting it in their |.vimrc|.
It is possible to remove entries from this dictionary but It is possible to remove entries from this dictionary but
doing so is *NOT* recommended. Doing so is disruptive to doing so is NOT recommended, because it is disruptive to
other scripts. It is also unlikely to achieve the desired other scripts. It is also unlikely to achieve the desired
result because the |:colorscheme| and |:highlight| commands will result because the |:colorscheme| and |:highlight| commands will
both automatically load all `colors/lists/default.vim` color both automatically load all `colors/lists/default.vim` color

View File

@@ -2332,39 +2332,6 @@ colorname2rgb(char_u *name)
return INVALCOLOR; return INVALCOLOR;
} }
// Maps the given name to the given color value, overwriting any current
// mapping. If allocation fails the named color will no longer exist in the
// table and the user will receive an error message.
void
save_colorname_hexstr(int r, int g, int b, char_u *name)
{
int result;
dict_T *colornames_table;
dictitem_T *existing;
char_u hexstr[8];
if (vim_snprintf((char *)hexstr, sizeof(hexstr),
"#%02x%02x%02x", r, g, b) < 0)
{
semsg(_(e_cannot_allocate_color_str), name);
return;
}
colornames_table = get_vim_var_dict(VV_COLORNAMES);
// The colornames_table dict is safe to use here because it is allocated at
// startup in evalvars.c
existing = dict_find(colornames_table, name, -1);
if (existing != NULL)
{
dictitem_remove(colornames_table, existing);
existing = NULL; // dictitem_remove freed the item
}
result = dict_add_string(colornames_table, (char *)name, hexstr);
if (result == FAIL)
semsg(_(e_cannot_allocate_color_str), name);
}
/* /*
* Load a default color list. Intended to support legacy color names but allows * Load a default color list. Intended to support legacy color names but allows
* the user to override the color values. Only loaded once. * the user to override the color values. Only loaded once.

View File

@@ -16,7 +16,6 @@ void hl_set_fg_color_name(char_u *name);
guicolor_T color_name2handle(char_u *name); guicolor_T color_name2handle(char_u *name);
guicolor_T decode_hex_color(char_u *hex); guicolor_T decode_hex_color(char_u *hex);
guicolor_T colorname2rgb(char_u *name); guicolor_T colorname2rgb(char_u *name);
void save_colorname_hexstr(int r, int g, int b, char_u *name);
void load_default_colors_lists(void); void load_default_colors_lists(void);
guicolor_T gui_get_color_cmn(char_u *name); guicolor_T gui_get_color_cmn(char_u *name);
guicolor_T gui_get_rgb_color_cmn(int r, int g, int b); guicolor_T gui_get_rgb_color_cmn(int r, int g, int b);

View File

@@ -6,6 +6,12 @@ source check.vim
source script_util.vim source script_util.vim
source vim9.vim source vim9.vim
func ClearDict(d)
for k in keys(a:d)
call remove(a:d, k)
endfor
endfunc
func Test_highlight() func Test_highlight()
" basic test if ":highlight" doesn't crash " basic test if ":highlight" doesn't crash
highlight highlight
@@ -936,19 +942,30 @@ func Test_highlight_default_colorscheme_restores_links()
endfunc endfunc
func Test_colornames_assignment_and_lookup() func Test_colornames_assignment_and_lookup()
CheckAnyOf Feature:gui_running Feature:termguicolors
" Ensure highlight command can find custom color. " Ensure highlight command can find custom color.
let v:colornames['a redish white'] = '#ffeedd' let v:colornames['a redish white'] = '#ffeedd'
highlight Normal guifg='a redish white' highlight Normal guifg='a redish white'
highlight clear highlight clear
call ClearDict(v:colornames)
endfunc endfunc
func Test_colornames_default_list() func Test_colornames_default_list()
CheckAnyOf Feature:gui_running Feature:termguicolors
" Ensure default lists are loaded automatically and can be used for all gui fields. " Ensure default lists are loaded automatically and can be used for all gui fields.
call assert_equal(0, len(v:colornames))
highlight Normal guifg='rebecca purple' guibg='rebecca purple' guisp='rebecca purple' highlight Normal guifg='rebecca purple' guibg='rebecca purple' guisp='rebecca purple'
call assert_notequal(0, len(v:colornames))
echo v:colornames['rebecca purple']
highlight clear highlight clear
call ClearDict(v:colornames)
endfunc endfunc
func Test_colornames_overwrite_default() func Test_colornames_overwrite_default()
CheckAnyOf Feature:gui_running Feature:termguicolors
" Ensure entries in v:colornames can be overwritten. " Ensure entries in v:colornames can be overwritten.
" Load default color scheme to trigger default color list loading. " Load default color scheme to trigger default color list loading.
colorscheme default colorscheme default
@@ -961,6 +978,10 @@ func Test_colornames_overwrite_default()
endfunc endfunc
func Test_colornames_assignment_and_unassignment() func Test_colornames_assignment_and_unassignment()
" No feature check is needed for this test because the v:colornames dict
" always exists with +eval. The feature checks are only required for
" commands that do color lookup.
" Ensure we cannot overwrite the v:colornames dict. " Ensure we cannot overwrite the v:colornames dict.
call assert_fails("let v:colornames = {}", 'E46:') call assert_fails("let v:colornames = {}", 'E46:')

View File

@@ -757,6 +757,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
3590,
/**/ /**/
3589, 3589,
/**/ /**/