changeset 27116:5b267700e6ab v8.2.4087

patch 8.2.4087: cannot test items from an autoload script easily Commit: https://github.com/vim/vim/commit/3e4fa3d7d37162cd08fc0c6e83f52fd323f63eba Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jan 13 22:05:09 2022 +0000 patch 8.2.4087: cannot test items from an autoload script easily Problem: Cannot test items from an autoload script easily. Solution: Add the "autoload" value for test_override().
author Bram Moolenaar <Bram@vim.org>
date Thu, 13 Jan 2022 23:15:03 +0100
parents 45d988099660
children a11e7c054f98
files runtime/doc/testing.txt src/globals.h src/testdir/test_vim9_import.vim src/testing.c src/version.c src/vim9script.c
diffstat 6 files changed, 53 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/testing.txt
+++ b/runtime/doc/testing.txt
@@ -188,23 +188,25 @@ test_override({name}, {val})				*test_ov
 		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".
+		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
-		term_props   reset all terminal properties when the version
-			     string is detected
 		uptime 	     overrules sysinfo.uptime
 		ALL	     clear all overrides ({val} is not used)
 
--- a/src/globals.h
+++ b/src/globals.h
@@ -1643,6 +1643,7 @@ EXTERN int  no_query_mouse_for_testing I
 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
--- a/src/testdir/test_vim9_import.vim
+++ b/src/testdir/test_vim9_import.vim
@@ -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
--- a/src/testing.c
+++ b/src/testing.c
@@ -1055,6 +1055,8 @@ f_test_override(typval_T *argvars, typva
 	    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;
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4087,
+/**/
     4086,
 /**/
     4085,
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -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;