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 <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/syntax/testdir/runtest.vim b/runtime/syntax/testdir/runtest.vim
index ffa2be8..6d25c4c 100644
--- a/runtime/syntax/testdir/runtest.vim
+++ b/runtime/syntax/testdir/runtest.vim
@@ -90,6 +90,10 @@
   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 @@
       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