]> granicus.if.org Git - vim/commitdiff
patch 8.2.0047: cannot skip tests for specific MS-Windows platform v8.2.0047
authorBram Moolenaar <Bram@vim.org>
Fri, 27 Dec 2019 12:49:24 +0000 (13:49 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 27 Dec 2019 12:49:24 +0000 (13:49 +0100)
Problem:    Cannot skip tests for specific MS-Windows platform.
Solution:   Add windowsversion().

runtime/doc/eval.txt
src/evalfunc.c
src/globals.h
src/os_win32.c
src/testdir/gen_opt_test.vim
src/testdir/test_options.vim
src/version.c

index a20f5627062900a127dfe596f5f8711c777b5219..e34cd4b42756a79ab6639592fd35a42077dab78b 100644 (file)
@@ -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|.
index 892a7538f158e163314a70055fc6d938c6385d63..610eca46b84249a588f1f6c53ebd72cce10caf4a 100644 (file)
@@ -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
  */
index 33082d514b898a6bb4a948cdbd813e026561407a..87f7b0be54bda3524baf7269720d6bf8b6f008b5 100644 (file)
@@ -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
index c5670afd300a7bf9e93a9812f60ed61ca0993e90..844d7941d43c7e12c4e2a0afd54f1be8bd4391ee 100644 (file)
@@ -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 <aclapi.h>
@@ -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)
index f70623b0a1800aabf8c00cea25310466d8a573f2..91415e49dd0e3a38c7e1ca87911a9a9df017af8f 100644 (file)
@@ -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']],
index 65600eea937688b80f760cec3c73241c87bb6b50..048356ae79db7ca6ef2a9289a876a194f5accf7d 100644 (file)
@@ -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
index 0185a78c18e7abe0a523cfbf2decf9e603056168..420c722d240eb856b5d7e33339bbd13304925f8f 100644 (file)
@@ -742,6 +742,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    47,
 /**/
     46,
 /**/