mirror of
https://github.com/vim/vim.git
synced 2025-11-15 23:14:06 -05:00
patch 9.1.1088: tests: plugin tests are named inconsistently
Problem: tests: plugin tests are named inconsistently Solution: group them under a common 'plugin' prefix related: #16599 Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
645
src/testdir/test_plugin_termdebug.vim
Normal file
645
src/testdir/test_plugin_termdebug.vim
Normal file
@@ -0,0 +1,645 @@
|
||||
" Test for the termdebug plugin
|
||||
|
||||
source shared.vim
|
||||
source screendump.vim
|
||||
source check.vim
|
||||
|
||||
CheckUnix
|
||||
CheckFeature terminal
|
||||
CheckExecutable gdb
|
||||
CheckExecutable gcc
|
||||
|
||||
let g:GDB = exepath('gdb')
|
||||
if g:GDB->empty()
|
||||
throw 'Skipped: gdb is not found in $PATH'
|
||||
endif
|
||||
|
||||
let g:GCC = exepath('gcc')
|
||||
if g:GCC->empty()
|
||||
throw 'Skipped: gcc is not found in $PATH'
|
||||
endif
|
||||
|
||||
function s:generate_files(bin_name)
|
||||
let src_name = a:bin_name .. '.c'
|
||||
let lines =<< trim END
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int isprime(int n)
|
||||
{
|
||||
if (n <= 1)
|
||||
return 0;
|
||||
|
||||
for (int i = 2; i <= n / 2; i++)
|
||||
if (n % i == 0)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int n = 7;
|
||||
|
||||
printf("%d is %s prime\n", n, isprime(n) ? "a" : "not a");
|
||||
|
||||
return 0;
|
||||
}
|
||||
END
|
||||
call writefile(lines, src_name)
|
||||
call system($'{g:GCC} -g -o {a:bin_name} {src_name}')
|
||||
endfunction
|
||||
|
||||
function s:cleanup_files(bin_name)
|
||||
call delete(a:bin_name)
|
||||
call delete(a:bin_name .. '.c')
|
||||
endfunction
|
||||
|
||||
packadd termdebug
|
||||
|
||||
" should be the first test to run, since it validates the window layout with
|
||||
" win ids
|
||||
func Test_termdebug_basic()
|
||||
let g:test_is_flaky = 1
|
||||
let bin_name = 'XTD_basic'
|
||||
let src_name = bin_name .. '.c'
|
||||
call s:generate_files(bin_name)
|
||||
|
||||
edit XTD_basic.c
|
||||
Termdebug ./XTD_basic
|
||||
call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
|
||||
call WaitForAssert({-> assert_equal(3, winnr('$'))})
|
||||
let gdb_buf = winbufnr(1)
|
||||
wincmd b
|
||||
Break 9
|
||||
call term_wait(gdb_buf)
|
||||
redraw!
|
||||
call assert_equal([
|
||||
\ {'lnum': 9, 'id': 1014, 'name': 'debugBreakpoint1.0',
|
||||
\ 'priority': 110, 'group': 'TermDebug'}],
|
||||
\ sign_getplaced('', #{group: 'TermDebug'})[0].signs)
|
||||
Run
|
||||
call term_wait(gdb_buf, 400)
|
||||
redraw!
|
||||
call WaitForAssert({-> assert_equal([
|
||||
\ {'lnum': 9, 'id': 12, 'name': 'debugPC', 'priority': 110,
|
||||
\ 'group': 'TermDebug'},
|
||||
\ {'lnum': 9, 'id': 1014, 'name': 'debugBreakpoint1.0',
|
||||
\ 'priority': 110, 'group': 'TermDebug'}],
|
||||
\ sign_getplaced('', #{group: 'TermDebug'})[0].signs)})
|
||||
Finish
|
||||
call term_wait(gdb_buf)
|
||||
redraw!
|
||||
call WaitForAssert({-> assert_equal([
|
||||
\ {'lnum': 9, 'id': 1014, 'name': 'debugBreakpoint1.0',
|
||||
\ 'priority': 110, 'group': 'TermDebug'},
|
||||
\ {'lnum': 20, 'id': 12, 'name': 'debugPC',
|
||||
\ 'priority': 110, 'group': 'TermDebug'}],
|
||||
\ sign_getplaced('', #{group: 'TermDebug'})[0].signs)})
|
||||
Continue
|
||||
call term_wait(gdb_buf)
|
||||
|
||||
let i = 2
|
||||
while i <= 258
|
||||
Break
|
||||
call term_wait(gdb_buf)
|
||||
if i == 2
|
||||
call WaitForAssert({-> assert_equal(sign_getdefined('debugBreakpoint2.0')[0].text, '02')})
|
||||
endif
|
||||
if i == 10
|
||||
call WaitForAssert({-> assert_equal(sign_getdefined('debugBreakpoint10.0')[0].text, '0A')})
|
||||
endif
|
||||
if i == 168
|
||||
call WaitForAssert({-> assert_equal(sign_getdefined('debugBreakpoint168.0')[0].text, 'A8')})
|
||||
endif
|
||||
if i == 255
|
||||
call WaitForAssert({-> assert_equal(sign_getdefined('debugBreakpoint255.0')[0].text, 'FF')})
|
||||
endif
|
||||
if i == 256
|
||||
call WaitForAssert({-> assert_equal(sign_getdefined('debugBreakpoint256.0')[0].text, 'F+')})
|
||||
endif
|
||||
if i == 258
|
||||
call WaitForAssert({-> assert_equal(sign_getdefined('debugBreakpoint258.0')[0].text, 'F+')})
|
||||
endif
|
||||
let i += 1
|
||||
endwhile
|
||||
|
||||
let cn = 0
|
||||
" 60 is approx spaceBuffer * 3
|
||||
if winwidth(0) <= 78 + 60
|
||||
Var
|
||||
call assert_equal(winnr('$'), winnr())
|
||||
call assert_equal(['col', [['leaf', 1002], ['leaf', 1001], ['leaf', 1000], ['leaf', 1003 + cn]]], winlayout())
|
||||
let cn += 1
|
||||
bw!
|
||||
Asm
|
||||
call assert_equal(winnr('$'), winnr())
|
||||
call assert_equal(['col', [['leaf', 1002], ['leaf', 1001], ['leaf', 1000], ['leaf', 1003 + cn]]], winlayout())
|
||||
let cn += 1
|
||||
bw!
|
||||
endif
|
||||
set columns=160
|
||||
call term_wait(gdb_buf)
|
||||
let winw = winwidth(0)
|
||||
Var
|
||||
if winwidth(0) < winw
|
||||
call assert_equal(winnr('$') - 1, winnr())
|
||||
call assert_equal(['col', [['leaf', 1002], ['leaf', 1001], ['row', [['leaf', 1003 + cn], ['leaf', 1000]]]]], winlayout())
|
||||
let cn += 1
|
||||
bw!
|
||||
endif
|
||||
let winw = winwidth(0)
|
||||
Asm
|
||||
if winwidth(0) < winw
|
||||
call assert_equal(winnr('$') - 1, winnr())
|
||||
call assert_equal(['col', [['leaf', 1002], ['leaf', 1001], ['row', [['leaf', 1003 + cn], ['leaf', 1000]]]]], winlayout())
|
||||
let cn += 1
|
||||
bw!
|
||||
endif
|
||||
set columns&
|
||||
call term_wait(gdb_buf)
|
||||
|
||||
wincmd t
|
||||
quit!
|
||||
redraw!
|
||||
call WaitForAssert({-> assert_equal(1, winnr('$'))})
|
||||
call assert_equal([], sign_getplaced('', #{group: 'TermDebug'})[0].signs)
|
||||
|
||||
for use_prompt in [v:true, v:false]
|
||||
let g:termdebug_config = {}
|
||||
let g:termdebug_config['use_prompt'] = use_prompt
|
||||
TermdebugCommand ./XTD_basic arg args
|
||||
call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
|
||||
call WaitForAssert({-> assert_equal(3, winnr('$'))})
|
||||
wincmd t
|
||||
quit!
|
||||
redraw!
|
||||
call WaitForAssert({-> assert_equal(1, winnr('$'))})
|
||||
unlet g:termdebug_config
|
||||
endfor
|
||||
|
||||
call s:cleanup_files(bin_name)
|
||||
%bw!
|
||||
endfunc
|
||||
|
||||
func Test_termdebug_decimal_breakpoints()
|
||||
let bin_name = 'XTD_decimal'
|
||||
let src_name = bin_name .. '.c'
|
||||
call s:generate_files(bin_name)
|
||||
|
||||
exe "edit " .. src_name
|
||||
|
||||
let g:termdebug_config = {}
|
||||
let g:termdebug_config['sign_decimal'] = 1
|
||||
|
||||
exe "Termdebug " .. bin_name
|
||||
call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
|
||||
call WaitForAssert({-> assert_equal(3, winnr('$'))})
|
||||
let gdb_buf = winbufnr(1)
|
||||
wincmd b
|
||||
Break 9
|
||||
call term_wait(gdb_buf)
|
||||
redraw!
|
||||
|
||||
let i = 2
|
||||
while i <= 258
|
||||
Break
|
||||
call term_wait(gdb_buf)
|
||||
if i == 2
|
||||
call WaitForAssert({-> assert_equal(sign_getdefined('debugBreakpoint2.0')[0].text, '02')})
|
||||
endif
|
||||
if i == 10
|
||||
call WaitForAssert({-> assert_equal(sign_getdefined('debugBreakpoint10.0')[0].text, '10')})
|
||||
endif
|
||||
if i == 168
|
||||
call WaitForAssert({-> assert_equal(sign_getdefined('debugBreakpoint168.0')[0].text, '9+')})
|
||||
endif
|
||||
if i == 255
|
||||
call WaitForAssert({-> assert_equal(sign_getdefined('debugBreakpoint255.0')[0].text, '9+')})
|
||||
endif
|
||||
if i == 256
|
||||
call WaitForAssert({-> assert_equal(sign_getdefined('debugBreakpoint256.0')[0].text, '9+')})
|
||||
endif
|
||||
if i == 258
|
||||
call WaitForAssert({-> assert_equal(sign_getdefined('debugBreakpoint258.0')[0].text, '9+')})
|
||||
endif
|
||||
let i += 1
|
||||
endwhile
|
||||
|
||||
wincmd t
|
||||
quit!
|
||||
redraw!
|
||||
call WaitForAssert({-> assert_equal(1, winnr('$'))})
|
||||
call assert_equal([], sign_getplaced('', #{group: 'TermDebug'})[0].signs)
|
||||
|
||||
call s:cleanup_files(bin_name)
|
||||
%bw!
|
||||
|
||||
unlet g:termdebug_config
|
||||
endfunc
|
||||
|
||||
func Test_termdebug_tbreak()
|
||||
let g:test_is_flaky = 1
|
||||
let bin_name = 'XTD_tbreak'
|
||||
let src_name = bin_name .. '.c'
|
||||
|
||||
eval s:generate_files(bin_name)
|
||||
|
||||
execute 'edit ' .. src_name
|
||||
execute 'Termdebug ./' .. bin_name
|
||||
|
||||
call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
|
||||
call WaitForAssert({-> assert_equal(3, winnr('$'))})
|
||||
let gdb_buf = winbufnr(1)
|
||||
wincmd b
|
||||
|
||||
let bp_line = 22 " 'return' statement in main
|
||||
let temp_bp_line = 10 " 'if' statement in 'for' loop body
|
||||
execute "Tbreak " .. temp_bp_line
|
||||
execute "Break " .. bp_line
|
||||
|
||||
call term_wait(gdb_buf)
|
||||
redraw!
|
||||
" both temporary and normal breakpoint signs were displayed...
|
||||
call assert_equal([
|
||||
\ {'lnum': temp_bp_line, 'id': 1014, 'name': 'debugBreakpoint1.0',
|
||||
\ 'priority': 110, 'group': 'TermDebug'},
|
||||
\ {'lnum': bp_line, 'id': 2014, 'name': 'debugBreakpoint2.0',
|
||||
\ 'priority': 110, 'group': 'TermDebug'}],
|
||||
\ sign_getplaced('', #{group: 'TermDebug'})[0].signs)
|
||||
|
||||
Run
|
||||
call term_wait(gdb_buf, 400)
|
||||
redraw!
|
||||
" debugPC sign is on the line where the temp. bp was set;
|
||||
" temp. bp sign was removed after hit;
|
||||
" normal bp sign is still present
|
||||
call WaitForAssert({-> assert_equal([
|
||||
\ {'lnum': temp_bp_line, 'id': 12, 'name': 'debugPC', 'priority': 110,
|
||||
\ 'group': 'TermDebug'},
|
||||
\ {'lnum': bp_line, 'id': 2014, 'name': 'debugBreakpoint2.0',
|
||||
\ 'priority': 110, 'group': 'TermDebug'}],
|
||||
\ sign_getplaced('', #{group: 'TermDebug'})[0].signs)})
|
||||
|
||||
Continue
|
||||
call term_wait(gdb_buf)
|
||||
redraw!
|
||||
" debugPC is on the normal breakpoint,
|
||||
" temp. bp on line 10 was only hit once
|
||||
call WaitForAssert({-> assert_equal([
|
||||
\ {'lnum': bp_line, 'id': 12, 'name': 'debugPC', 'priority': 110,
|
||||
\ 'group': 'TermDebug'},
|
||||
\ {'lnum': bp_line, 'id': 2014, 'name': 'debugBreakpoint2.0',
|
||||
\ 'priority': 110, 'group': 'TermDebug'}],
|
||||
\ sign_getplaced('', #{group: 'TermDebug'})[0].signs)})
|
||||
|
||||
wincmd t
|
||||
quit!
|
||||
redraw!
|
||||
call WaitForAssert({-> assert_equal(1, winnr('$'))})
|
||||
call assert_equal([], sign_getplaced('', #{group: 'TermDebug'})[0].signs)
|
||||
|
||||
eval s:cleanup_files(bin_name)
|
||||
%bw!
|
||||
endfunc
|
||||
|
||||
func Test_termdebug_evaluate()
|
||||
let bin_name = 'XTD_evaluate'
|
||||
let src_name = bin_name .. '.c'
|
||||
call s:generate_files(bin_name)
|
||||
|
||||
edit XTD_evaluate.c
|
||||
Termdebug ./XTD_evaluate
|
||||
call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
|
||||
call WaitForAssert({-> assert_equal(3, winnr('$'))})
|
||||
let gdb_buf = winbufnr(1)
|
||||
wincmd b
|
||||
|
||||
" return stmt in main
|
||||
Break 22
|
||||
call term_wait(gdb_buf)
|
||||
Run
|
||||
call term_wait(gdb_buf, 400)
|
||||
redraw!
|
||||
|
||||
" Evaluate an expression
|
||||
Evaluate n
|
||||
call term_wait(gdb_buf)
|
||||
call assert_equal(execute('1messages')->trim(), '"n": 7')
|
||||
Evaluate argc
|
||||
call term_wait(gdb_buf)
|
||||
call assert_equal(execute('1messages')->trim(), '"argc": 1')
|
||||
Evaluate isprime(n)
|
||||
call term_wait(gdb_buf)
|
||||
call assert_equal(execute('1messages')->trim(), '"isprime(n)": 1')
|
||||
|
||||
wincmd t
|
||||
quit!
|
||||
redraw!
|
||||
call s:cleanup_files(bin_name)
|
||||
%bw!
|
||||
endfunc
|
||||
|
||||
func Test_termdebug_evaluate_in_popup()
|
||||
CheckScreendump
|
||||
let bin_name = 'XTD_evaluate_in_popup'
|
||||
let src_name = bin_name .. '.c'
|
||||
let code =<< trim END
|
||||
struct Point {
|
||||
int x;
|
||||
int y;
|
||||
};
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
struct Point p = {argc, 2};
|
||||
struct Point* p_ptr = &p;
|
||||
return 0;
|
||||
}
|
||||
END
|
||||
call writefile(code, src_name, 'D')
|
||||
call system($'{g:GCC} -g -o {bin_name} {src_name}')
|
||||
|
||||
let lines =<< trim END
|
||||
edit XTD_evaluate_in_popup.c
|
||||
packadd termdebug
|
||||
let g:termdebug_config = {}
|
||||
let g:termdebug_config['evaluate_in_popup'] = v:true
|
||||
Termdebug ./XTD_evaluate_in_popup
|
||||
wincmd b
|
||||
Break 9
|
||||
Run
|
||||
END
|
||||
|
||||
call writefile(lines, 'Xscript', 'D')
|
||||
let buf = RunVimInTerminal('-S Xscript', {})
|
||||
call TermWait(buf, 400)
|
||||
|
||||
call term_sendkeys(buf, ":Evaluate p\<CR>")
|
||||
call TermWait(buf, 400)
|
||||
call VerifyScreenDump(buf, 'Test_termdebug_evaluate_in_popup_01', {})
|
||||
|
||||
call term_sendkeys(buf, ":Evaluate p_ptr\<CR>")
|
||||
call TermWait(buf, 400)
|
||||
call VerifyScreenDump(buf, 'Test_termdebug_evaluate_in_popup_02', {})
|
||||
|
||||
" Cleanup
|
||||
call term_sendkeys(buf, ":Gdb")
|
||||
call term_sendkeys(buf, ":quit!\<CR>")
|
||||
call term_sendkeys(buf, ":qa!\<CR>")
|
||||
call StopVimInTerminal(buf)
|
||||
call delete(bin_name)
|
||||
%bw!
|
||||
endfunc
|
||||
|
||||
func Test_termdebug_mapping()
|
||||
%bw!
|
||||
call assert_true(maparg('K', 'n', 0, 1)->empty())
|
||||
call assert_true(maparg('-', 'n', 0, 1)->empty())
|
||||
call assert_true(maparg('+', 'n', 0, 1)->empty())
|
||||
Termdebug
|
||||
call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
|
||||
call WaitForAssert({-> assert_equal(3, winnr('$'))})
|
||||
wincmd b
|
||||
call assert_false(maparg('K', 'n', 0, 1)->empty())
|
||||
call assert_false(maparg('-', 'n', 0, 1)->empty())
|
||||
call assert_false(maparg('+', 'n', 0, 1)->empty())
|
||||
call assert_false(maparg('K', 'n', 0, 1).buffer)
|
||||
call assert_false(maparg('-', 'n', 0, 1).buffer)
|
||||
call assert_false(maparg('+', 'n', 0, 1).buffer)
|
||||
call assert_equal(':Evaluate<CR>', maparg('K', 'n', 0, 1).rhs)
|
||||
wincmd t
|
||||
quit!
|
||||
redraw!
|
||||
call WaitForAssert({-> assert_equal(1, winnr('$'))})
|
||||
call assert_true(maparg('K', 'n', 0, 1)->empty())
|
||||
call assert_true(maparg('-', 'n', 0, 1)->empty())
|
||||
call assert_true(maparg('+', 'n', 0, 1)->empty())
|
||||
|
||||
%bw!
|
||||
nnoremap K :echom "K"<cr>
|
||||
nnoremap - :echom "-"<cr>
|
||||
nnoremap + :echom "+"<cr>
|
||||
Termdebug
|
||||
call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
|
||||
call WaitForAssert({-> assert_equal(3, winnr('$'))})
|
||||
wincmd b
|
||||
call assert_false(maparg('K', 'n', 0, 1)->empty())
|
||||
call assert_false(maparg('-', 'n', 0, 1)->empty())
|
||||
call assert_false(maparg('+', 'n', 0, 1)->empty())
|
||||
call assert_false(maparg('K', 'n', 0, 1).buffer)
|
||||
call assert_false(maparg('-', 'n', 0, 1).buffer)
|
||||
call assert_false(maparg('+', 'n', 0, 1).buffer)
|
||||
call assert_equal(':Evaluate<CR>', maparg('K', 'n', 0, 1).rhs)
|
||||
wincmd t
|
||||
quit!
|
||||
redraw!
|
||||
call WaitForAssert({-> assert_equal(1, winnr('$'))})
|
||||
call assert_false(maparg('K', 'n', 0, 1)->empty())
|
||||
call assert_false(maparg('-', 'n', 0, 1)->empty())
|
||||
call assert_false(maparg('+', 'n', 0, 1)->empty())
|
||||
call assert_false(maparg('K', 'n', 0, 1).buffer)
|
||||
call assert_false(maparg('-', 'n', 0, 1).buffer)
|
||||
call assert_false(maparg('+', 'n', 0, 1).buffer)
|
||||
call assert_equal(':echom "K"<cr>', maparg('K', 'n', 0, 1).rhs)
|
||||
|
||||
%bw!
|
||||
|
||||
" -- Test that local-buffer mappings are restored in the correct buffers --
|
||||
" local mappings for foo
|
||||
file foo
|
||||
nnoremap <buffer> K :echom "bK"<cr>
|
||||
nnoremap <buffer> - :echom "b-"<cr>
|
||||
nnoremap <buffer> + :echom "b+"<cr>
|
||||
|
||||
" no mappings for 'bar'
|
||||
enew
|
||||
file bar
|
||||
|
||||
" Start termdebug from foo
|
||||
buffer foo
|
||||
Termdebug
|
||||
call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
|
||||
call WaitForAssert({-> assert_equal(3, winnr('$'))})
|
||||
wincmd b
|
||||
call assert_true(maparg('K', 'n', 0, 1).buffer)
|
||||
call assert_true(maparg('-', 'n', 0, 1).buffer)
|
||||
call assert_true(maparg('+', 'n', 0, 1).buffer)
|
||||
call assert_equal(maparg('K', 'n', 0, 1).rhs, ':echom "bK"<cr>')
|
||||
|
||||
Source
|
||||
buffer bar
|
||||
call assert_false(maparg('K', 'n', 0, 1)->empty())
|
||||
call assert_false(maparg('-', 'n', 0, 1)->empty())
|
||||
call assert_false(maparg('+', 'n', 0, 1)->empty())
|
||||
call assert_true(maparg('K', 'n', 0, 1).buffer->empty())
|
||||
call assert_true(maparg('-', 'n', 0, 1).buffer->empty())
|
||||
call assert_true(maparg('+', 'n', 0, 1).buffer->empty())
|
||||
wincmd t
|
||||
quit!
|
||||
redraw!
|
||||
call WaitForAssert({-> assert_equal(1, winnr('$'))})
|
||||
|
||||
" Termdebug session ended. Buffer 'bar' shall have no mappings
|
||||
call assert_true(bufname() ==# 'bar')
|
||||
call assert_false(maparg('K', 'n', 0, 1)->empty())
|
||||
call assert_false(maparg('-', 'n', 0, 1)->empty())
|
||||
call assert_false(maparg('+', 'n', 0, 1)->empty())
|
||||
call assert_true(maparg('K', 'n', 0, 1).buffer->empty())
|
||||
call assert_true(maparg('-', 'n', 0, 1).buffer->empty())
|
||||
call assert_true(maparg('+', 'n', 0, 1).buffer->empty())
|
||||
|
||||
" Buffer 'foo' shall have the same mapping as before running the termdebug
|
||||
" session
|
||||
buffer foo
|
||||
call assert_true(bufname() ==# 'foo')
|
||||
call assert_true(maparg('K', 'n', 0, 1).buffer)
|
||||
call assert_true(maparg('-', 'n', 0, 1).buffer)
|
||||
call assert_true(maparg('+', 'n', 0, 1).buffer)
|
||||
call assert_equal(':echom "bK"<cr>', maparg('K', 'n', 0, 1).rhs)
|
||||
|
||||
nunmap K
|
||||
nunmap +
|
||||
nunmap -
|
||||
%bw!
|
||||
endfunc
|
||||
|
||||
function Test_termdebug_save_restore_variables()
|
||||
" saved mousemodel
|
||||
let &mousemodel=''
|
||||
|
||||
" saved keys
|
||||
nnoremap K :echo "hello world!"<cr>
|
||||
let expected_map_K = maparg('K', 'n', 0 , 1)
|
||||
nnoremap + :echo "hello plus!"<cr>
|
||||
let expected_map_plus = maparg('+', 'n', 0 , 1)
|
||||
let expected_map_minus = {}
|
||||
|
||||
" saved &columns
|
||||
let expected_columns = &columns
|
||||
|
||||
" We want termdebug to overwrite 'K' map but not '+' map.
|
||||
let g:termdebug_config = {}
|
||||
let g:termdebug_config['map_K'] = v:true
|
||||
|
||||
Termdebug
|
||||
call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
|
||||
call WaitForAssert({-> assert_equal(3, winnr('$'))})
|
||||
call WaitForAssert({-> assert_match(&mousemodel, 'popup_setpos')})
|
||||
wincmd t
|
||||
quit!
|
||||
call WaitForAssert({-> assert_equal(1, winnr('$'))})
|
||||
|
||||
call assert_true(empty(&mousemodel))
|
||||
|
||||
call assert_true(empty(expected_map_minus))
|
||||
call assert_equal(expected_map_K.rhs, maparg('K', 'n', 0, 1).rhs)
|
||||
call assert_equal(expected_map_plus.rhs, maparg('+', 'n', 0, 1).rhs)
|
||||
|
||||
call assert_equal(expected_columns, &columns)
|
||||
|
||||
nunmap K
|
||||
nunmap +
|
||||
unlet g:termdebug_config
|
||||
endfunction
|
||||
|
||||
function Test_termdebug_sanity_check()
|
||||
" Test if user has filename/folders with wrong names
|
||||
let g:termdebug_config = {}
|
||||
let s:dict = {'disasm_window': 'Termdebug-asm-listing', 'use_prompt': 'gdb', 'variables_window': 'Termdebug-variables-listing'}
|
||||
|
||||
for key in keys(s:dict)
|
||||
let s:filename = s:dict[key]
|
||||
let g:termdebug_config[key] = v:true
|
||||
let s:error_message = "You have a file/folder named '" .. s:filename .. "'"
|
||||
|
||||
" Write dummy file with bad name
|
||||
call writefile(['This', 'is', 'a', 'test'], s:filename, 'D')
|
||||
Termdebug
|
||||
call WaitForAssert({-> assert_true(execute('messages') =~ s:error_message)})
|
||||
call WaitForAssert({-> assert_equal(1, winnr('$'))})
|
||||
|
||||
call delete(s:filename)
|
||||
call remove(g:termdebug_config, key)
|
||||
endfor
|
||||
|
||||
unlet g:termdebug_config
|
||||
endfunction
|
||||
|
||||
function Test_termdebug_double_termdebug_instances()
|
||||
let s:error_message = 'Terminal debugger already running, cannot run two'
|
||||
Termdebug
|
||||
call WaitForAssert({-> assert_true(get(g:, "termdebug_is_running", v:false))})
|
||||
call WaitForAssert({-> assert_equal(3, winnr('$'))})
|
||||
Termdebug
|
||||
call WaitForAssert({-> assert_true(execute('messages') =~ s:error_message)})
|
||||
wincmd t
|
||||
quit!
|
||||
call WaitForAssert({-> assert_equal(1, winnr('$'))})
|
||||
:%bw!
|
||||
endfunction
|
||||
|
||||
function Test_termdebug_config_types()
|
||||
" TODO Remove the deprecated features after 1 Jan 2025.
|
||||
let g:test_is_flaky = 1
|
||||
let g:termdebug_config = {}
|
||||
let s:error_message = 'Deprecation Warning:'
|
||||
call assert_true(maparg('K', 'n', 0, 1)->empty())
|
||||
|
||||
for key in ['disasm_window', 'variables_window', 'map_K']
|
||||
for val in [0, 1, v:true, v:false]
|
||||
let g:termdebug_config[key] = val
|
||||
Termdebug
|
||||
|
||||
" Type check: warning is displayed
|
||||
if typename(val) == 'number'
|
||||
call WaitForAssert({-> assert_true(execute('messages') =~ s:error_message)})
|
||||
endif
|
||||
|
||||
" Test on g:termdebug_config keys
|
||||
if val && key != 'map_K'
|
||||
call WaitForAssert({-> assert_equal(4, winnr('$'))})
|
||||
call remove(g:termdebug_config, key)
|
||||
else
|
||||
call WaitForAssert({-> assert_equal(3, winnr('$'))})
|
||||
endif
|
||||
|
||||
" Test on mapping
|
||||
if key == 'map_K'
|
||||
if val
|
||||
call assert_equal(':Evaluate<CR>', maparg('K', 'n', 0, 1).rhs)
|
||||
else
|
||||
call assert_true(maparg('K', 'n', 0, 1)->empty())
|
||||
endif
|
||||
endif
|
||||
|
||||
" Shutoff termdebug
|
||||
wincmd t
|
||||
quit!
|
||||
call WaitForAssert({-> assert_equal(1, winnr('$'))})
|
||||
:%bw!
|
||||
|
||||
endfor
|
||||
endfor
|
||||
|
||||
unlet g:termdebug_config
|
||||
endfunction
|
||||
|
||||
function Test_termdebug_config_debug()
|
||||
let s:error_message = '\[termdebug\] Termdebug already loaded'
|
||||
|
||||
" USER mode: No error message shall be displayed
|
||||
packadd termdebug
|
||||
call assert_true(execute('messages') !~ s:error_message)
|
||||
|
||||
" DEBUG mode: Error message shall now be displayed
|
||||
let g:termdebug_config = {}
|
||||
let g:termdebug_config['debug'] = 1
|
||||
packadd termdebug
|
||||
call assert_true(execute('messages') =~ s:error_message)
|
||||
|
||||
unlet g:termdebug_config
|
||||
unlet g:termdebug_loaded
|
||||
" Revert DEBUG mode, by reloading the plugin
|
||||
source $VIMRUNTIME/pack/dist/opt/termdebug/plugin/termdebug.vim
|
||||
endfunction
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
Reference in New Issue
Block a user