diff options
author | Drew Vogel <dvogel@github> | 2021-11-13 10:50:01 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-11-13 10:50:01 +0000 |
commit | a0fca17251bf491db7b8d302ce22dee844597e82 (patch) | |
tree | 32a0b8da8cefe1d96584689f6676d57fec38fed4 | |
parent | 5300be620c77950caa5296019408ee02e60097e8 (diff) | |
download | vim-git-a0fca17251bf491db7b8d302ce22dee844597e82.tar.gz |
patch 8.2.3590: test for v:colornames sometimes failsv8.2.3590
Problem: Test for v:colornames sometimes fails. (Dominique Pellé)
Solution: Check features. Clear v:colornames between tests. (Drew Vogel,
closes #9105, closes #9073)
-rw-r--r-- | runtime/doc/eval.txt | 2 | ||||
-rw-r--r-- | src/highlight.c | 33 | ||||
-rw-r--r-- | src/proto/highlight.pro | 1 | ||||
-rw-r--r-- | src/testdir/test_highlight.vim | 21 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 24 insertions, 35 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index d072f34c3..88b6f0dbd 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1871,7 +1871,7 @@ v:colornames A dictionary that maps color names to hex color strings. These by setting it in their |.vimrc|. 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 result because the |:colorscheme| and |:highlight| commands will both automatically load all `colors/lists/default.vim` color diff --git a/src/highlight.c b/src/highlight.c index 02790c668..a2935f50b 100644 --- a/src/highlight.c +++ b/src/highlight.c @@ -2332,39 +2332,6 @@ colorname2rgb(char_u *name) 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 * the user to override the color values. Only loaded once. diff --git a/src/proto/highlight.pro b/src/proto/highlight.pro index 7e2631da3..b17f40df3 100644 --- a/src/proto/highlight.pro +++ b/src/proto/highlight.pro @@ -16,7 +16,6 @@ void hl_set_fg_color_name(char_u *name); guicolor_T color_name2handle(char_u *name); guicolor_T decode_hex_color(char_u *hex); 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); guicolor_T gui_get_color_cmn(char_u *name); guicolor_T gui_get_rgb_color_cmn(int r, int g, int b); diff --git a/src/testdir/test_highlight.vim b/src/testdir/test_highlight.vim index 8a7d1d99b..51fd4145f 100644 --- a/src/testdir/test_highlight.vim +++ b/src/testdir/test_highlight.vim @@ -6,6 +6,12 @@ source check.vim source script_util.vim source vim9.vim +func ClearDict(d) + for k in keys(a:d) + call remove(a:d, k) + endfor +endfunc + func Test_highlight() " basic test if ":highlight" doesn't crash highlight @@ -936,19 +942,30 @@ func Test_highlight_default_colorscheme_restores_links() endfunc func Test_colornames_assignment_and_lookup() + CheckAnyOf Feature:gui_running Feature:termguicolors + " Ensure highlight command can find custom color. let v:colornames['a redish white'] = '#ffeedd' highlight Normal guifg='a redish white' highlight clear + call ClearDict(v:colornames) endfunc 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. + call assert_equal(0, len(v:colornames)) 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 + call ClearDict(v:colornames) endfunc func Test_colornames_overwrite_default() + CheckAnyOf Feature:gui_running Feature:termguicolors + " Ensure entries in v:colornames can be overwritten. " Load default color scheme to trigger default color list loading. colorscheme default @@ -961,6 +978,10 @@ func Test_colornames_overwrite_default() endfunc 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. call assert_fails("let v:colornames = {}", 'E46:') diff --git a/src/version.c b/src/version.c index 8e2a10b27..e294d8eb5 100644 --- a/src/version.c +++ b/src/version.c @@ -758,6 +758,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3590, +/**/ 3589, /**/ 3588, |