aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar mitchell <none@none>2021-10-12 13:52:40 -0400
committerGravatar mitchell <none@none>2021-10-12 13:52:40 -0400
commitf9ce8db77cd092789630f9aa439204fb0589e8cf (patch)
tree557180e665ad5d71c2cdec64c87d7c2a20a92b91 /test
parentd759df907fa10c01303355054eda7c2baf229678 (diff)
Updated debugger tests with watch variables (no break).
Also cleaned up code.
Diffstat (limited to 'test')
-rw-r--r--test/test.lua120
1 files changed, 48 insertions, 72 deletions
diff --git a/test/test.lua b/test/test.lua
index 32bcde32..a45ae8c9 100644
--- a/test/test.lua
+++ b/test/test.lua
@@ -4213,7 +4213,11 @@ function test_debugger_ansi_c()
debugger.use_status_buffers = false
debugger.project_commands = {} -- reset
require('debugger.gdb').logging = true
- local function wait()
+ -- Runs the given debugger function with arguments and waits for or processes the response.
+ -- Most debugger functions have a callback that needs to be executed asynchronously or else
+ -- strange errors will occur.
+ local function run_and_wait(f, ...)
+ f(...)
os.spawn('sleep 0.2'):wait()
ui.update()
end
@@ -4228,84 +4232,66 @@ function test_debugger_ansi_c()
debugger.toggle_breakpoint(nil, 8)
assert(buffer:marker_get(8) > 0, 'breakpoint marker not set')
textadept.run.compile_commands[filename] = textadept.run.compile_commands.ansi_c .. ' -g'
- textadept.run.compile()
- wait()
+ run_and_wait(textadept.run.compile)
assert_equal(#_VIEWS, 2)
local msg_buf = buffer
assert(buffer:get_text():find('status: 0'), 'compile failed')
ui.goto_view(-1)
- debugger.start(nil, dir .. '/foo')
- wait()
- debugger.continue()
- wait()
+ run_and_wait(debugger.start, nil, dir .. '/foo')
+ run_and_wait(debugger.continue)
assert_equal(buffer.filename, filename)
assert_equal(buffer:line_from_position(buffer.current_pos), 8)
assert(buffer:marker_number_from_line(8, 2) > 0, 'current line marker not set')
assert(not msg_buf:get_text():find('^start\n'), 'not at breakpoint')
- debugger.restart()
- wait()
+ run_and_wait(debugger.restart)
assert_equal(buffer.filename, filename)
assert_equal(buffer:line_from_position(buffer.current_pos), 8)
assert(buffer:marker_number_from_line(8, 2) > 0, 'current line marker not set')
assert(not msg_buf:get_text():find('^start\n'), 'not at breakpoint')
- debugger.stop()
- wait()
+ run_and_wait(debugger.stop)
assert_equal(buffer:marker_number_from_line(8, 2), -1, 'still debugging')
- debugger.start(nil, dir .. '/foo')
- wait()
- debugger.continue()
- wait()
+ run_and_wait(debugger.start, nil, dir .. '/foo')
+ run_and_wait(debugger.continue)
debugger.toggle_breakpoint() -- clear
- debugger.step_over()
- wait()
+ run_and_wait(debugger.step_over)
assert_equal(buffer:line_from_position(buffer.current_pos), 9)
assert(buffer:marker_get(9) > 0, 'current line marker not set')
assert_equal(buffer:marker_get(8), 0) -- current line marker cleared
-- TODO: gdb does not print program stdout to its stdout until the end when using the mi interface.
-- assert(msg_buf:get_text():find('^start\n'), 'process stdout not captured')
- debugger.step_over()
- wait()
+ run_and_wait(debugger.step_over)
assert_equal(buffer:line_from_position(buffer.current_pos), 10)
- debugger.evaluate('i')
- wait()
+ run_and_wait(debugger.evaluate, 'i')
assert_equal(buffer.filename, filename) -- still in file being debugged
assert(msg_buf:get_text():find('\n0\n'), 'evaluation of i failed')
- debugger.step_into()
- wait()
+ run_and_wait(debugger.step_into)
assert_equal(buffer:line_from_position(buffer.current_pos), 3)
- debugger.set_frame(2)
- wait()
+ run_and_wait(debugger.set_frame, 2)
assert_equal(buffer:line_from_position(buffer.current_pos), 10)
- debugger.set_frame(1)
- wait()
+ run_and_wait(debugger.set_frame, 1)
assert_equal(buffer:line_from_position(buffer.current_pos), 3)
buffer:search_anchor()
local pos = buffer:search_next(buffer.FIND_MATCHCASE | buffer.FIND_WHOLEWORD, 'i')
assert(pos > 0, "'i' not found")
- debugger.inspect(pos)
- wait()
+ run_and_wait(debugger.inspect, pos)
assert(view:call_tip_active(), 'no call tip active')
- debugger.step_out()
- wait()
+ run_and_wait(debugger.step_out)
-- assert(msg_buf:get_text():find('\nfoo 0\n'), 'process stdout not captured')
assert_equal(buffer:line_from_position(buffer.current_pos), 9)
debugger.set_watch('i')
- debugger.continue()
- wait()
+ run_and_wait(debugger.continue)
assert_equal(buffer:line_from_position(buffer.current_pos), 9)
assert(not msg_buf:get_text():find('\nfoo 1\n'), 'watch point failed')
debugger.remove_watch(1)
- debugger.step_over()
- wait()
+ debugger.set_watch('&i', true) -- no break
+ run_and_wait(debugger.step_over)
events.emit(events.MARGIN_CLICK, 2, buffer.current_pos, 0) -- simulate breakpoint margin click
- debugger.continue()
- wait()
+ run_and_wait(debugger.continue)
assert_equal(buffer:line_from_position(buffer.current_pos), 10)
-- assert(msg_buf:get_text():find('\nfoo 1\n'), 'set breakpoint failed')
assert(not msg_buf:get_text():find('\nfoo 2\n'), 'set breakpoint failed')
events.emit(events.MARGIN_CLICK, 2, buffer.current_pos, 0) -- simulate breakpoint margin click; clear
- debugger.continue()
- wait()
+ run_and_wait(debugger.continue)
-- assert(msg_buf:get_text():find('\nfoo 2\n'), 'process stdout not captured')
-- assert(msg_buf:get_text():find('\nfoo 3\n'), 'process stdout not captured')
-- assert(msg_buf:get_text():find('\nend\n'), 'process stdout not captured')
@@ -4326,7 +4312,11 @@ function test_debugger_lua()
local project_commands = debugger.project_commands
debugger.use_status_buffers = false
debugger.project_commands = {} -- reset
- local function wait()
+ -- Runs the given debugger function with arguments and waits for or processes the response.
+ -- Most debugger functions have a callback that needs to be executed asynchronously or else
+ -- strange errors or 'Unknown Error' will occur.
+ local function run_and_wait(f, ...)
+ f(...)
for i = 1, 10 do
os.spawn('sleep 0.1'):wait()
ui.update()
@@ -4338,26 +4328,21 @@ function test_debugger_lua()
io.open_file(filename)
debugger.toggle_breakpoint(nil, 5)
assert(buffer:marker_get(5) > 0, 'breakpoint marker not set')
- debugger.continue() -- start
- wait()
+ run_and_wait(debugger.continue) -- start
assert_equal(buffer.filename, filename)
assert_equal(buffer:line_from_position(buffer.current_pos), 5)
assert(buffer:marker_number_from_line(5, 2) > 0, 'current line marker not set')
assert_equal(#_VIEWS, 1)
- debugger.restart()
- wait()
+ run_and_wait(debugger.restart)
assert_equal(buffer.filename, filename)
assert_equal(buffer:line_from_position(buffer.current_pos), 3) -- for whatever reason
assert(buffer:marker_get(3) > 0, 'current line marker not set')
assert_equal(#_VIEWS, 1)
- debugger.stop()
- wait()
+ run_and_wait(debugger.stop)
assert_equal(buffer:marker_number_from_line(5, 2), -1, 'still debugging')
- debugger.continue() -- start
- wait()
+ run_and_wait(debugger.continue) -- start
debugger.toggle_breakpoint() -- clear
- debugger.step_over()
- wait()
+ run_and_wait(debugger.step_over)
assert_equal(#_VIEWS, 2)
assert_equal(buffer.filename, filename)
assert_equal(buffer:line_from_position(buffer.current_pos), 6)
@@ -4365,47 +4350,38 @@ function test_debugger_lua()
assert_equal(buffer:marker_get(5), 0) -- current line marker cleared
local msg_buf = _VIEWS[#_VIEWS].buffer
assert(msg_buf:get_text():find('^"start"\n'), 'process stdout not captured')
- debugger.step_over()
- wait()
+ run_and_wait(debugger.step_over)
assert_equal(buffer:line_from_position(buffer.current_pos), 7)
- debugger.evaluate("print('i', i)")
- wait()
+ run_and_wait(debugger.evaluate, "print('i', i)")
assert_equal(buffer.filename, filename) -- still in file being debugged
assert(msg_buf:get_text():find('\n"i"%s1\n'), 'evaluation of i failed')
- debugger.step_into()
- wait()
+ run_and_wait(debugger.step_into)
assert_equal(buffer:line_from_position(buffer.current_pos), 2)
- debugger.set_frame(2)
- wait()
+ run_and_wait(debugger.set_frame, 2)
assert_equal(buffer:line_from_position(buffer.current_pos), 7)
- debugger.set_frame(1)
- wait()
+ run_and_wait(debugger.set_frame, 1)
assert_equal(buffer:line_from_position(buffer.current_pos), 2)
buffer:search_anchor()
local pos = buffer:search_next(buffer.FIND_MATCHCASE | buffer.FIND_WHOLEWORD, 'i')
assert(pos > 0, "'i' not found")
- debugger.inspect(pos)
- wait()
+ run_and_wait(debugger.inspect, pos)
assert(view:call_tip_active(), 'no call tip active')
- debugger.step_out()
- wait()
+ run_and_wait(debugger.step_out)
assert(msg_buf:get_text():find('\n"foo"%s1\n'), 'process stdout not captured')
assert_equal(buffer:line_from_position(buffer.current_pos), 6)
- debugger.set_watch('i')
- debugger.continue()
- wait()
+ run_and_wait(debugger.set_watch, 'i')
+ run_and_wait(debugger.continue)
assert_equal(buffer:line_from_position(buffer.current_pos), 7)
assert(not msg_buf:get_text():find('\n"foo"%s2\n'), 'watch point failed')
- debugger.remove_watch(1)
+ run_and_wait(debugger.remove_watch, 1)
+ run_and_wait(debugger.set_watch, 'foo', true) -- no break
events.emit(events.MARGIN_CLICK, 2, buffer.current_pos, 0) -- simulate breakpoint margin click
- debugger.continue()
- wait()
+ run_and_wait(debugger.continue)
assert_equal(buffer:line_from_position(buffer.current_pos), 7)
assert(msg_buf:get_text():find('\n"foo"%s2\n'), 'set breakpoint failed')
assert(not msg_buf:get_text():find('\n"foo"%s3\n'), 'set breakpoint failed')
events.emit(events.MARGIN_CLICK, 2, buffer.current_pos, 0) -- simulate breakpoint margin click; clear
- debugger.continue()
- wait()
+ run_and_wait(debugger.continue)
assert(msg_buf:get_text():find('\n"foo"%s3\n'), 'process stdout not captured')
assert(msg_buf:get_text():find('\n"foo"%s4\n'), 'process stdout not captured')
assert(msg_buf:get_text():find('\n"end"\n'), 'process stdout not captured')