To: vim_dev@googlegroups.com Subject: Patch 8.0.0392 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.0392 Problem: GUI test fails with Athena and Motif. Solution: Add test_ignore_error(). Use it to ignore the "failed to create input context" error. Files: src/message.c, src/proto/message.pro, src/evalfunc.c, src/testdir/test_gui.vim, runtime/doc/eval.txt *** ../vim-8.0.0391/src/message.c 2017-01-14 19:24:48.654828136 +0100 --- src/message.c 2017-03-01 14:43:50.650575988 +0100 *************** *** 539,544 **** --- 539,569 ---- return FALSE; } + #ifdef FEAT_EVAL + static garray_T ignore_error_list = GA_EMPTY; + + void + ignore_error_for_testing(char_u *error) + { + if (ignore_error_list.ga_itemsize == 0) + ga_init2(&ignore_error_list, sizeof(char_u *), 1); + + ga_add_string(&ignore_error_list, error); + } + + static int + ignore_error(char_u *msg) + { + int i; + + for (i = 0; i < ignore_error_list.ga_len; ++i) + if (strstr((char *)msg, + (char *)((char_u **)(ignore_error_list.ga_data))[i]) != NULL) + return TRUE; + return FALSE; + } + #endif + #if !defined(HAVE_STRERROR) || defined(PROTO) /* * Replacement for perror() that behaves more or less like emsg() was called. *************** *** 577,582 **** --- 602,613 ---- if (emsg_not_now()) return TRUE; + #ifdef FEAT_EVAL + /* When testing some errors are turned into a normal message. */ + if (ignore_error(s)) + return msg(s); + #endif + called_emsg = TRUE; /* *** ../vim-8.0.0391/src/proto/message.pro 2016-11-10 20:01:41.201582868 +0100 --- src/proto/message.pro 2017-03-01 14:42:43.571011184 +0100 *************** *** 8,13 **** --- 8,14 ---- void reset_last_sourcing(void); void msg_source(int attr); int emsg_not_now(void); + void ignore_error_for_testing(char_u *error); void do_perror(char *msg); int emsg(char_u *s); int emsg2(char_u *s, char_u *a1); *** ../vim-8.0.0391/src/evalfunc.c 2017-02-25 14:59:29.906090427 +0100 --- src/evalfunc.c 2017-03-01 14:17:03.577012930 +0100 *************** *** 389,394 **** --- 389,395 ---- static void f_test_autochdir(typval_T *argvars, typval_T *rettv); static void f_test_disable_char_avail(typval_T *argvars, typval_T *rettv); static void f_test_garbagecollect_now(typval_T *argvars, typval_T *rettv); + static void f_test_ignore_error(typval_T *argvars, typval_T *rettv); #ifdef FEAT_JOB_CHANNEL static void f_test_null_channel(typval_T *argvars, typval_T *rettv); #endif *************** *** 823,828 **** --- 824,830 ---- {"test_autochdir", 0, 0, f_test_autochdir}, {"test_disable_char_avail", 1, 1, f_test_disable_char_avail}, {"test_garbagecollect_now", 0, 0, f_test_garbagecollect_now}, + {"test_ignore_error", 1, 1, f_test_ignore_error}, #ifdef FEAT_JOB_CHANNEL {"test_null_channel", 0, 0, f_test_null_channel}, #endif *************** *** 12325,12330 **** --- 12327,12341 ---- garbage_collect(TRUE); } + /* + * "test_ignore_error()" function + */ + static void + f_test_ignore_error(typval_T *argvars, typval_T *rettv UNUSED) + { + ignore_error_for_testing(get_tv_string(&argvars[0])); + } + #ifdef FEAT_JOB_CHANNEL static void f_test_null_channel(typval_T *argvars UNUSED, typval_T *rettv) *** ../vim-8.0.0391/src/testdir/test_gui.vim 2017-02-26 15:08:17.578786550 +0100 --- src/testdir/test_gui.vim 2017-03-01 14:59:40.224455941 +0100 *************** *** 17,22 **** --- 17,25 ---- " Test for resetting "secure" flag after GUI has started. " Must be run first. func Test_1_set_secure() + " Ignore the "failed to create input context" error. + call test_ignore_error('E285') + set exrc secure gui -f call assert_equal(1, has('gui_running')) *** ../vim-8.0.0391/runtime/doc/eval.txt 2017-02-20 22:35:29.017423364 +0100 --- runtime/doc/eval.txt 2017-03-01 14:41:34.051462246 +0100 *************** *** 2357,2362 **** --- 2358,2364 ---- test_autochdir() none enable 'autochdir' during startup test_disable_char_avail({expr}) none test without typeahead test_garbagecollect_now() none free memory right now for testing + test_ignore_error({expr}) none ignore a specific error test_null_channel() Channel null value for testing test_null_dict() Dict null value for testing test_null_job() Job null value for testing *************** *** 7773,7778 **** --- 7785,7799 ---- internally, and |v:testing| must have been set before calling any function. + test_ignore_error({expr}) *test_ignore_error()* + Ignore any error containing {expr}. A normal message is given + instead. + This is only meant to be used in tests, where catching the + error with try/catch cannot be used (because it skips over + following code). + {expr} is used literally, not as a pattern. + There is currently no way to revert this. + test_null_channel() *test_null_channel()* Return a Channel that is null. Only useful for testing. {only available when compiled with the +channel feature} *** ../vim-8.0.0391/src/version.c 2017-03-01 14:02:25.554677542 +0100 --- src/version.c 2017-03-01 14:36:48.457315658 +0100 *************** *** 766,767 **** --- 766,769 ---- { /* Add new patch number below this line */ + /**/ + 392, /**/ -- Q. What happens to programmers when they die? A: MS-Windows programmers are reinstalled. C++ programmers become undefined, anyone who refers to them will die as well. Java programmers reincarnate after being garbage collected, unless they are in permgen, in which case they become zombies. Zimbu programmers leave a stack trace that tells us exactly where they died and how they got there. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///