]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.4087: cannot test items from an autoload script easily v8.2.4087
authorBram Moolenaar <Bram@vim.org>
Thu, 13 Jan 2022 22:05:09 +0000 (22:05 +0000)
committerBram Moolenaar <Bram@vim.org>
Thu, 13 Jan 2022 22:05:09 +0000 (22:05 +0000)
Problem:    Cannot test items from an autoload script easily.
Solution:   Add the "autoload" value for test_override().

runtime/doc/testing.txt
src/globals.h
src/testdir/test_vim9_import.vim
src/testing.c
src/version.c
src/vim9script.c

index 44296f0e71f1c139121d01b397b82509ef1a19cd..3ff1450653963dee2f695bd0595644a2ad7058be 100644 (file)
@@ -188,23 +188,25 @@ test_override({name}, {val})                              *test_override()*
                to run tests. Only to be used for testing Vim!
                The override is enabled when {val} is non-zero and removed
                when {val} is zero.
-               Current supported values for name are:
+               Current supported values for {name} are:
 
-               name         effect when {val} is non-zero ~
-               redraw       disable the redrawing() function
-               redraw_flag  ignore the RedrawingDisabled flag
+               {name}       effect when {val} is non-zero ~
+               autoload     `import autoload` will load the script right
+                            away, not postponed until an item is used
                char_avail   disable the char_avail() function
-               starting     reset the "starting" variable, see below
                nfa_fail     makes the NFA regexp engine fail to force a
                             fallback to the old engine
                no_query_mouse  do not query the mouse position for "dec"
                                terminals
                no_wait_return  set the "no_wait_return" flag.  Not restored
                                with "ALL".
-               ui_delay     time in msec to use in ui_delay(); overrules a
-                            wait time of up to 3 seconds for messages
+               redraw       disable the redrawing() function
+               redraw_flag  ignore the RedrawingDisabled flag
+               starting     reset the "starting" variable, see below
                term_props   reset all terminal properties when the version
                             string is detected
+               ui_delay     time in msec to use in ui_delay(); overrules a
+                            wait time of up to 3 seconds for messages
                uptime       overrules sysinfo.uptime
                ALL          clear all overrides ({val} is not used)
 
index f04b29e8b36b74f45c1e7f5b9042e27b5fd0ae8b..94da8e0c51e3377088f7ec491d109d43cf39f8dd 100644 (file)
@@ -1643,6 +1643,7 @@ EXTERN int  no_query_mouse_for_testing INIT(= FALSE);
 EXTERN int  ui_delay_for_testing INIT(= 0);
 EXTERN int  reset_term_props_on_termresponse INIT(= FALSE);
 EXTERN long override_sysinfo_uptime INIT(= -1);
+EXTERN int  override_autoload INIT(= FALSE);
 
 EXTERN int  in_free_unref_items INIT(= FALSE);
 #endif
index 553ef8fdccc42698a500b2d731139a51a3930f13..2e57fe2527491f6973e566241610660f5c4cef49 100644 (file)
@@ -1288,6 +1288,42 @@ def Test_import_autoload_postponed()
   &rtp = save_rtp
 enddef
 
+def Test_import_autoload_override()
+  mkdir('Xdir/autoload', 'p')
+  var save_rtp = &rtp
+  exe 'set rtp^=' .. getcwd() .. '/Xdir'
+  test_override('autoload', 1)
+
+  var lines =<< trim END
+      vim9script autoload
+
+      g:loaded_override = 'true'
+      export var variable = 'bla'
+      export def Function(): string
+        return 'bla'
+      enddef
+  END
+  writefile(lines, 'Xdir/autoload/override.vim')
+
+  lines =<< trim END
+      vim9script
+
+      import autoload 'override.vim'
+      assert_equal('true', g:loaded_override)
+
+      def Tryit()
+        echo override.doesNotExist
+      enddef
+      defcompile
+  END
+  CheckScriptFailure(lines, 'E1048: Item not found in script: doesNotExist', 1)
+
+  test_override('autoload', 0)
+  unlet g:loaded_override
+  delete('Xdir', 'rf')
+  &rtp = save_rtp
+enddef
+
 def Test_autoload_mapping()
   mkdir('Xdir/autoload', 'p')
   var save_rtp = &rtp
index eef5e0d768c6ca0842af32a64b4187a5275699f3..34826826fccd5de9a3383c22e8a9268b39eaa86f 100644 (file)
@@ -1055,6 +1055,8 @@ f_test_override(typval_T *argvars, typval_T *rettv UNUSED)
            reset_term_props_on_termresponse = val;
        else if (STRCMP(name, (char_u *)"uptime") == 0)
            override_sysinfo_uptime = val;
+       else if (STRCMP(name, (char_u *)"autoload") == 0)
+           override_autoload = val;
        else if (STRCMP(name, (char_u *)"ALL") == 0)
        {
            disable_char_avail_for_testing = FALSE;
index 728d2b8a7f7f14d82e27aa5d25e41a02af466cc4..782a64a1154cc4c3d03b23a18e5f97eae234ebd8 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4087,
 /**/
     4086,
 /**/
index baf2019f523e72b04326401723462c91e99ad89a..2038c78a0835cf7ad42733dab80a5c47dae699be 100644 (file)
@@ -496,6 +496,9 @@ handle_import(
            if (si->sn_autoload_prefix == NULL)
                si->sn_autoload_prefix = get_autoload_prefix(si);
            res = OK;
+           if (override_autoload && si->sn_state == SN_STATE_NOT_LOADED)
+               // testing override: load autoload script right away
+               (void)do_source(si->sn_name, FALSE, DOSO_NONE, NULL);
        }
        else
            res = FAIL;