diff options
author | iam28th <artyom28th@gmail.com> | 2023-12-14 20:30:26 +0100 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2023-12-14 20:33:43 +0100 |
commit | 323dda1484d95ee5c8a1b2205f8c495446df75ee (patch) | |
tree | 3ae846b682476cb8975a137936bb5642ad187ca1 /src | |
parent | 74da0ee0a24799a312a3a8a65858237185ef7a23 (diff) |
runtime(termdebug): add Tbreak command
closes: #13656
Signed-off-by: iam28th <artyom28th@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/testdir/test_termdebug.vim | 88 |
1 files changed, 82 insertions, 6 deletions
diff --git a/src/testdir/test_termdebug.vim b/src/testdir/test_termdebug.vim index 70e11873f9..68bffd4b28 100644 --- a/src/testdir/test_termdebug.vim +++ b/src/testdir/test_termdebug.vim @@ -18,9 +18,8 @@ if g:GCC->empty() throw 'Skipped: gcc is not found in $PATH' endif -packadd termdebug - -func Test_termdebug_basic() +function s:generate_files(bin_name) + let src_name = a:bin_name .. '.c' let lines =<< trim END #include <stdio.h> #include <stdlib.h> @@ -46,8 +45,21 @@ func Test_termdebug_basic() return 0; } END - call writefile(lines, 'XTD_basic.c', 'D') - call system($'{g:GCC} -g -o XTD_basic XTD_basic.c') + 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 + +func Test_termdebug_basic() + let bin_name = 'XTD_basic' + let src_name = bin_name .. '.c' + call s:generate_files(bin_name) edit XTD_basic.c Termdebug ./XTD_basic @@ -148,7 +160,71 @@ func Test_termdebug_basic() call WaitForAssert({-> assert_equal(1, winnr('$'))}) call assert_equal([], sign_getplaced('', #{group: 'TermDebug'})[0].signs) - call delete('XTD_basic') + call s:cleanup_files(bin_name) + %bw! +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_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 |