From 0c1e3744ff0cd6c17af773046b876b428ff3dded Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 27 Dec 2019 13:49:24 +0100 Subject: [PATCH] patch 8.2.0047: cannot skip tests for specific MS-Windows platform Problem: Cannot skip tests for specific MS-Windows platform. Solution: Add windowsversion(). --- runtime/doc/eval.txt | 7 +++++++ src/evalfunc.c | 12 ++++++++++++ src/globals.h | 3 +++ src/os_win32.c | 8 +++----- src/testdir/gen_opt_test.vim | 4 +++- src/testdir/test_options.vim | 9 +++++++++ src/version.c | 2 ++ 7 files changed, 39 insertions(+), 6 deletions(-) diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index a20f56270..e34cd4b42 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -10382,6 +10382,13 @@ wincol() The result is a Number, which is the virtual column of the cursor in the window. This is counting screen cells from the left side of the window. The leftmost column is one. + *windowsversion()* +windowsversion() + The result is a String. For MS-Windows it indicates the OS + version. E.g, Windows 10 is "10.0", Windows 8 is "6.2", + Windows XP is "5.1". For non-MS-Windows systems the result is + an empty string. + winheight({nr}) *winheight()* The result is a Number, which is the height of window {nr}. {nr} can be the window number or the |window-ID|. diff --git a/src/evalfunc.c b/src/evalfunc.c index 892a7538f..610eca46b 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -276,6 +276,7 @@ static void f_type(typval_T *argvars, typval_T *rettv); static void f_virtcol(typval_T *argvars, typval_T *rettv); static void f_visualmode(typval_T *argvars, typval_T *rettv); static void f_wildmenumode(typval_T *argvars, typval_T *rettv); +static void f_windowsversion(typval_T *argvars, typval_T *rettv); static void f_wordcount(typval_T *argvars, typval_T *rettv); static void f_xor(typval_T *argvars, typval_T *rettv); @@ -864,6 +865,7 @@ static funcentry_T global_functions[] = {"win_splitmove", 2, 3, FEARG_1, f_win_splitmove}, {"winbufnr", 1, 1, FEARG_1, f_winbufnr}, {"wincol", 0, 0, 0, f_wincol}, + {"windowsversion", 0, 0, 0, f_windowsversion}, {"winheight", 1, 1, FEARG_1, f_winheight}, {"winlayout", 0, 1, FEARG_1, f_winlayout}, {"winline", 0, 0, 0, f_winline}, @@ -8407,6 +8409,16 @@ f_wildmenumode(typval_T *argvars UNUSED, typval_T *rettv UNUSED) #endif } +/* + * "windowsversion()" function + */ + static void +f_windowsversion(typval_T *argvars UNUSED, typval_T *rettv UNUSED) +{ + rettv->v_type = VAR_STRING; + rettv->vval.v_string = vim_strsave((char_u *)windowsVersion); +} + /* * "wordcount()" function */ diff --git a/src/globals.h b/src/globals.h index 33082d514..87f7b0be5 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1724,6 +1724,9 @@ EXTERN int did_echo_string_emsg INIT(= FALSE); // Used for checking if local variables or arguments used in a lambda. EXTERN int *eval_lavars_used INIT(= NULL); + +// Only filled for Win32. +EXTERN char windowsVersion[20] INIT(= {0}); #endif #ifdef MSWIN diff --git a/src/os_win32.c b/src/os_win32.c index c5670afd3..844d7941d 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -758,8 +758,6 @@ null_libintl_wputenv(const wchar_t *envstring UNUSED) # define VER_PLATFORM_WIN32_WINDOWS 1 #endif -DWORD g_PlatformId; - #ifdef HAVE_ACL # ifndef PROTO # include @@ -806,8 +804,7 @@ win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable) #endif /* - * Set g_PlatformId to VER_PLATFORM_WIN32_NT (NT) or - * VER_PLATFORM_WIN32_WINDOWS (Win95). + * Set "win8_or_later" and fill in "windowsVersion". */ void PlatformId(void) @@ -821,7 +818,8 @@ PlatformId(void) ovi.dwOSVersionInfoSize = sizeof(ovi); GetVersionEx(&ovi); - g_PlatformId = ovi.dwPlatformId; + vim_snprintf(windowsVersion, sizeof(windowsVersion), "%d.%d", + (int)ovi.dwMajorVersion, (int)ovi.dwMinorVersion); if ((ovi.dwMajorVersion == 6 && ovi.dwMinorVersion >= 2) || ovi.dwMajorVersion > 6) diff --git a/src/testdir/gen_opt_test.vim b/src/testdir/gen_opt_test.vim index f70623b0a..91415e49d 100644 --- a/src/testdir/gen_opt_test.vim +++ b/src/testdir/gen_opt_test.vim @@ -10,6 +10,8 @@ set nomore " The terminal size is restored at the end. " Clear out t_WS, we don't want to resize the actual terminal. let script = [ + \ '" DO NOT EDIT: Generated with gen_opt_test.vim', + \ '', \ 'let save_columns = &columns', \ 'let save_lines = &lines', \ 'let save_term = &term', @@ -123,7 +125,7 @@ let test_values = { \ 'printmbfont': [['', 'r:some', 'b:Bold,c:yes'], ['xxx']], \ 'printoptions': [['', 'header:0', 'left:10pc,top:5pc'], ['xxx']], \ 'scrollopt': [['', 'ver', 'ver,hor'], ['xxx']], - \ 'renderoptions': [['', 'type:directx'], ['xxx']], + \ 'renderoptions': [[''], ['xxx']], \ 'selection': [['old', 'inclusive'], ['', 'xxx']], \ 'selectmode': [['', 'mouse', 'key,cmd'], ['xxx']], \ 'sessionoptions': [['', 'blank', 'help,options,slash'], ['xxx']], diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim index 65600eea9..048356ae7 100644 --- a/src/testdir/test_options.vim +++ b/src/testdir/test_options.vim @@ -389,6 +389,15 @@ func Test_set_values() endif endfunc +func Test_renderoptions() + " Only do this for Windows Vista and later, fails on Windows XP and earlier. + " Doesn't hurt to do this on a non-Windows system. + if windowsversion() !~ '^[345]\.' + set renderoptions=type:directx + set rop=type:directx + endif +endfunc + func ResetIndentexpr() set indentexpr= endfunc diff --git a/src/version.c b/src/version.c index 0185a78c1..420c722d2 100644 --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 47, /**/ 46, /**/ -- 2.40.0