vim-patch:9.1.1421: tests: need a test for the new-style tutor.tutor (#34267)

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

a541f1de2b
This commit is contained in:
Phạm Bình An
2025-06-28 14:42:51 +07:00
committed by GitHub
parent c752016976
commit f1f106be3d
3 changed files with 110 additions and 31 deletions

View File

@ -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
}
}

View File

@ -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(':216<CR>zt')
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)

View File

@ -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\<CR>")
call WaitForAssert({-> assert_match('Bot$', term_getline(buf, 20))})
call VerifyScreenDump(buf, 'Test_plugin_tutor_mark_1', {})
" clean up
call StopVimInTerminal(buf)
endfunc