runtime(syntax-tests): Support sourceable Vim configuration for syntax tests

Commit: 
https://github.com/vim/vim/commit/f6069a7ddc530a140fc1d7043e8a00d27d98c518
Author: Aliaksei Budavei <[email protected]>
Date:   Tue Mar 5 22:34:36 2024 +0300

    runtime(syntax-tests): Support sourceable Vim configuration for syntax tests
    
    Not all programming languages support comments; without such
    support, the TEST_SETUP functionality that offers embeddable
    Vim Ex commands may no longer be applicable.
    
    We can achieve similar functionality by storing Ex commands
    in a Vim file with its basename matching the basename of the
    test file, and having this Vim file sourced, and then having
    the test file loaded and tested.  When such a Vim file would
    be used for a language that has comments and whose matching
    test file has embedded TEST_SETUP lines, we will accommodate
    it by letting the TEST_SETUP lines augment and/or overrule
    sourced configuration.
    
    Further details can be found in the discussion thread at
    https://github.com/vim/vim/discussions/14117.
    
    related: #14215
    
    Signed-off-by: Aliaksei Budavei <[email protected]>
    Signed-off-by: Christian Brabandt <[email protected]>

diff --git a/runtime/syntax/testdir/README.txt 
b/runtime/syntax/testdir/README.txt
index 7628ef149..40757759b 100644
--- a/runtime/syntax/testdir/README.txt
+++ b/runtime/syntax/testdir/README.txt
@@ -48,6 +48,19 @@ Continuing the Java example:
        // TEST_SETUP let g:java_minlines = 5
        class Test { }
 
+As an alternative, setup commands can be included in an external Vim script
+file in the "input/setup" directory.  This script file must have the same base
+name as the input file.
+
+So, the equivalent example configuration using this method would be to create
+an "input/setup/java.vim" script file with the following lines:
+
+       let g:java_space_errors = 1
+       let g:java_minlines = 5
+
+Both inline setup commands and setup scripts may be used at the same time, the
+script file will be sourced before any TEST_SETUP commands are executed.
+
 If there is no further setup required, you can now run the tests:
 
        make test
@@ -100,6 +113,7 @@ are covered by the test.  You can follow these steps:
    test" should succeed.
 3. Prepare a pull request with the modified files:
        - syntax plugin:    syntax/{name}.vim
+       - Vim setup file:   syntax/testdir/input/setup/{name}.vim (if any)
        - test input file:  syntax/testdir/input/{name}.{ext}
        - test dump files:  syntax/testdir/dumps/{name}_99.dump
 
diff --git a/runtime/syntax/testdir/runtest.vim 
b/runtime/syntax/testdir/runtest.vim
index ffa2be8dd..6d25c4ce5 100644
--- a/runtime/syntax/testdir/runtest.vim
+++ b/runtime/syntax/testdir/runtest.vim
@@ -90,6 +90,10 @@ func RunTest()
   let failed_tests = []
   let skipped_count = 0
   let MAX_FAILED_COUNT = 5
+  " Create a map of setup configuration filenames with their basenames as keys.
+  let setup = glob('input/setup/*.vim', 1, 1)
+    \ ->reduce({d, f -> extend(d, {fnamemodify(f, ':t:r'): f})}, {})
+
   for fname in glob('input/*.*', 1, 1)
     if fname =~ '\~$'
       " backup file, skip
@@ -175,7 +179,13 @@ func RunTest()
       redraw
 
       " Let "Xtestscript#SetUpVim()" turn the syntax on.
-      let buf = RunVimInTerminal('-Nu NONE -S Xtestscript', {})
+      let prefix = '-Nu NONE -S Xtestscript'
+      let path = get(setup, root, '')
+      " Source the found setup configuration file.
+      let args = !empty(path)
+       \ ? prefix .. ' -S ' .. path
+       \ : prefix
+      let buf = RunVimInTerminal(args, {})
       " edit the file only after catching the SwapExists event
       call term_sendkeys(buf, ":edit " .. fname .. "\<CR>")
       " set up the testing environment

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1rmHyp-009X3K-C0%40256bit.org.

Raspunde prin e-mail lui