From f1f106be3d243ad0561cda4a35b0b7911e02d03e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20B=C3=ACnh=20An?= <111893501+brianhuster@users.noreply.github.com> Date: Sat, 28 Jun 2025 14:42:51 +0700 Subject: [PATCH] vim-patch:9.1.1421: tests: need a test for the new-style tutor.tutor (#34267) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: tests: need a test for the new-style tutor.tutor, patch 9.1.1384 broke the expected positions for the signs Solution: Update all number keys in tutor.tutor.json to match the correct line numbers in tutor.tutor, replace tabs by spaces, add a screen-dump test to verify it does not regress (Pham Bình An) closes: vim/vim#17416 https://github.com/vim/vim/commit/a541f1de2bfdd18d927974bc13fe5d4ee3cb5698 --- runtime/tutor/tutor.tutor.json | 62 +++++++++++++------------- test/functional/plugin/tutor_spec.lua | 58 ++++++++++++++++++++++++ test/old/testdir/test_plugin_tutor.vim | 21 +++++++++ 3 files changed, 110 insertions(+), 31 deletions(-) diff --git a/runtime/tutor/tutor.tutor.json b/runtime/tutor/tutor.tutor.json index 41995b28fa..360c5cf5e3 100644 --- a/runtime/tutor/tutor.tutor.json +++ b/runtime/tutor/tutor.tutor.json @@ -1,35 +1,35 @@ { "expect": { - "63": "This is text with **important information**", - "64": "This is text with **important information**", - "71": "TODO: Document '&variable'", - "72": "TODO: Document '&variable'", - "78": "# This is a level 1 header", - "79": "# This is a level 1 header", - "80": "### This is a level 3 header", - "81": "### This is a level 3 header", - "82": "# This is a header with a label {*label*}", - "83": "# This is a header with a label {*label*}", - "108": "A link to help for the ['breakindent']('breakindent') option", - "109": "A link to help for the ['breakindent']('breakindent') option", - "123": "A link to the [Links](*links*) section", - "124": "A link to the [Links](*links*) section", - "139": "A link to [the vim-tutor-mode tutorial](@tutor:tutor)", - "140": "A link to [the vim-tutor-mode tutorial](@tutor:tutor)", - "157": "~~~ viml", - "158": "echom 'the value of &number is'.string(&number)", - "159": "~~~", - "161": "~~~ viml", - "162": "echom 'the value of &number is'.string(&number)", - "163": "~~~", - "188": "~~~ normal", - "189": "d2w", - "190": "~~~", - "192": "~~~ normal", - "193": "d2w", - "194": "~~~", - "206": "`d2w`{normal}", - "207": "`d2w`{normal}", - "244": -1 + "56": "This is text with **important information**", + "57": "This is text with **important information**", + "64": "TODO: Document '&variable'", + "65": "TODO: Document '&variable'", + "71": "# This is a level 1 header", + "72": "# This is a level 1 header", + "73": "### This is a level 3 header", + "74": "### This is a level 3 header", + "75": "# This is a header with a label {*label*}", + "76": "# This is a header with a label {*label*}", + "101": "A link to help for the ['breakindent']('breakindent') option", + "102": "A link to help for the ['breakindent']('breakindent') option", + "116": "A link to the [Links](*links*) section", + "117": "A link to the [Links](*links*) section", + "132": "A link to [the vim-tutor-mode tutorial](@tutor:tutor)", + "133": "A link to [the vim-tutor-mode tutorial](@tutor:tutor)", + "150": "~~~ viml", + "151": "echom 'the value of &number is'.string(&number)", + "152": "~~~", + "154": "~~~ viml", + "155": "echom 'the value of &number is'.string(&number)", + "156": "~~~", + "181": "~~~ normal", + "182": "d2w", + "183": "~~~", + "185": "~~~ normal", + "186": "d2w", + "187": "~~~", + "199": "`d2w`{normal}", + "200": "`d2w`{normal}", + "237": -1 } } diff --git a/test/functional/plugin/tutor_spec.lua b/test/functional/plugin/tutor_spec.lua index 13727e3fb3..49feb825aa 100644 --- a/test/functional/plugin/tutor_spec.lua +++ b/test/functional/plugin/tutor_spec.lua @@ -135,3 +135,61 @@ describe(':Tutor', function() screen:expect(expected) end) end) + +describe(':Tutor tutor', function() + local screen --- @type test.functional.ui.screen + + before_each(function() + clear({ args = { '--clean' } }) + command('set cmdheight=0') + command('Tutor tutor') + screen = Screen.new(81, 30) + screen:set_default_attr_ids({ + [0] = { foreground = Screen.colors.DarkBlue, background = Screen.colors.Gray }, + [1] = { bold = true }, + [2] = { underline = true, foreground = tonumber('0x0088ff') }, + [3] = { foreground = Screen.colors.SlateBlue }, + [4] = { bold = true, foreground = Screen.colors.Brown }, + [5] = { bold = true, foreground = Screen.colors.Magenta1 }, + [6] = { italic = true }, + [7] = { foreground = tonumber('0x00ff88'), bold = true, background = Screen.colors.Grey }, + [8] = { bold = true, foreground = Screen.colors.Blue1 }, + }) + end) + + it('applies interactive marks', function() + feed(':216zt') + screen:expect([[ + {0: }{3:^###}{5: expect } | + {0: } | + {0: }"expect" lines check that the contents of the line are identical to some preset| + {0: } text | + {0: }(like in the exercises above). | + {0: } | + {0: }These elements are specified in separate JSON files like this | + {0: } | + {0: }{3:~~~ json} | + {0: }{ | + {0: } "expect": { | + {0: } "1": "This is how this line should look.", | + {0: } "2": "This is how this line should look.", | + {0: } "3": -1 | + {0: } } | + {0: }} | + {0: }{3:~~~} | + {0: } | + {0: }These files contain an "expect" dictionary, for which the keys are line numbers| + {0: } and | + {0: }the values are the expected text. A value of -1 means that the condition for th| + {0: }e line | + {0: }will always be satisfied, no matter what (this is useful for letting the user p| + {0: }lay a bit). | + {0: } | + {7:✓ }{3:This is an "expect" line that is always satisfied. Try changing it.} | + {0: } | + {0: }These files conventionally have the same name as the tutorial document with the| + {0: } .json | + {0: }extension appended (for a full example, see the file that corresponds to thi{8:@@@}| +]]) + end) +end) diff --git a/test/old/testdir/test_plugin_tutor.vim b/test/old/testdir/test_plugin_tutor.vim index 3dc46fd16e..5b85b650e2 100644 --- a/test/old/testdir/test_plugin_tutor.vim +++ b/test/old/testdir/test_plugin_tutor.vim @@ -1,5 +1,9 @@ " Test for the new-tutor plugin +source screendump.vim +source check.vim +source script_util.vim + func SetUp() set nocompatible runtime plugin/tutor.vim @@ -32,3 +36,20 @@ func Test_tutor_link() endfor endfor endfunc + +func Test_mark() + CheckScreendump + call writefile([ + \ 'set nocompatible', + \ 'runtime plugin/tutor.vim', + \ 'Tutor tutor', + \ 'set statusline=', + \ ], 'Xtest_plugin_tutor_mark', 'D') + let buf = RunVimInTerminal('-S Xtest_plugin_tutor_mark', {'rows': 20, 'cols': 78}) + call term_sendkeys(buf, ":240\") + call WaitForAssert({-> assert_match('Bot$', term_getline(buf, 20))}) + call VerifyScreenDump(buf, 'Test_plugin_tutor_mark_1', {}) + + " clean up + call StopVimInTerminal(buf) +endfunc