Merge pull request #159 from barrett-ruth/fix/panel-rename
fix: rename run panel to panel
This commit is contained in:
commit
f0edb103ce
9 changed files with 53 additions and 54 deletions
|
|
@ -145,7 +145,7 @@ Here's an example configuration with lazy.nvim:
|
||||||
open_url = true,
|
open_url = true,
|
||||||
debug = false,
|
debug = false,
|
||||||
ui = {
|
ui = {
|
||||||
run_panel = {
|
panel = {
|
||||||
ansi = true,
|
ansi = true,
|
||||||
diff_mode = 'vim',
|
diff_mode = 'vim',
|
||||||
max_output_lines = 50,
|
max_output_lines = 50,
|
||||||
|
|
@ -210,7 +210,7 @@ run CSES problems with Rust using the single schema:
|
||||||
function(contest, contest_id, problem_id, config, language): string
|
function(contest, contest_id, problem_id, config, language): string
|
||||||
Should return full filename with extension.
|
Should return full filename with extension.
|
||||||
(default: concatenates contest_id and problem_id, lowercased)
|
(default: concatenates contest_id and problem_id, lowercased)
|
||||||
{ui} (|CpUI|) UI settings: run panel, diff backend, picker.
|
{ui} (|CpUI|) UI settings: panel, diff backend, picker.
|
||||||
{open_url} (boolean) Open the contest & problem url in the browser
|
{open_url} (boolean) Open the contest & problem url in the browser
|
||||||
when the contest is first opened.
|
when the contest is first opened.
|
||||||
|
|
||||||
|
|
@ -238,11 +238,11 @@ run CSES problems with Rust using the single schema:
|
||||||
|
|
||||||
*CpUI*
|
*CpUI*
|
||||||
Fields: ~
|
Fields: ~
|
||||||
{run_panel} (|RunPanelConfig|) Test panel behavior configuration.
|
{panel} (|PanelConfig|) Test panel behavior configuration.
|
||||||
{diff} (|DiffConfig|) Diff backend configuration.
|
{diff} (|DiffConfig|) Diff backend configuration.
|
||||||
{picker} (string|nil) 'telescope', 'fzf-lua', or nil.
|
{picker} (string|nil) 'telescope', 'fzf-lua', or nil.
|
||||||
|
|
||||||
*cp.RunPanelConfig*
|
*cp.PanelConfig*
|
||||||
Fields: ~
|
Fields: ~
|
||||||
{ansi} (boolean, default: true) Enable ANSI color parsing
|
{ansi} (boolean, default: true) Enable ANSI color parsing
|
||||||
and highlighting.
|
and highlighting.
|
||||||
|
|
@ -367,15 +367,15 @@ PICKER KEYMAPS *cp-picker-keys*
|
||||||
Useful when contest lists are outdated or incomplete
|
Useful when contest lists are outdated or incomplete
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
RUN PANEL *cp-run*
|
PANEL *cp-run*
|
||||||
|
|
||||||
The run panel provides individual test case debugging. Problem time/memory
|
The panel provides individual test case debugging. Problem time/memory
|
||||||
limit constraints are in columns Time/Mem respectively. Used time/memory are
|
limit constraints are in columns Time/Mem respectively. Used time/memory are
|
||||||
in columns Runtime/RSS respectively.
|
in columns Runtime/RSS respectively.
|
||||||
|
|
||||||
Interface ~
|
Interface ~
|
||||||
|
|
||||||
The run panel uses the following table layout: >
|
The panel uses the following table layout: >
|
||||||
|
|
||||||
┌─────┬────────┬──────────────┬───────────┬──────────┬──────────┬─────────────┐
|
┌─────┬────────┬──────────────┬───────────┬──────────┬──────────┬─────────────┐
|
||||||
│ # │ Status │ Runtime (ms) │ Time (ms) │ RSS (MB) │ Mem (MB) │ Exit Code │
|
│ # │ Status │ Runtime (ms) │ Time (ms) │ RSS (MB) │ Mem (MB) │ Exit Code │
|
||||||
|
|
@ -502,7 +502,7 @@ Customize highlight groups after your colorscheme loads:
|
||||||
})
|
})
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
RUN PANEL KEYMAPS *cp-test-keys*
|
PANEL KEYMAPS *cp-test-keys*
|
||||||
|
|
||||||
<c-n> Navigate to next test case
|
<c-n> Navigate to next test case
|
||||||
<c-p> Navigate to previous test case
|
<c-p> Navigate to previous test case
|
||||||
|
|
|
||||||
|
|
@ -109,9 +109,9 @@ function M.handle_command(opts)
|
||||||
if cmd.action == 'interact' then
|
if cmd.action == 'interact' then
|
||||||
ui.toggle_interactive(cmd.interactor_cmd)
|
ui.toggle_interactive(cmd.interactor_cmd)
|
||||||
elseif cmd.action == 'run' then
|
elseif cmd.action == 'run' then
|
||||||
ui.toggle_run_panel()
|
ui.toggle_panel()
|
||||||
elseif cmd.action == 'debug' then
|
elseif cmd.action == 'debug' then
|
||||||
ui.toggle_run_panel({ debug = true })
|
ui.toggle_panel({ debug = true })
|
||||||
elseif cmd.action == 'next' then
|
elseif cmd.action == 'next' then
|
||||||
setup.navigate_problem(1)
|
setup.navigate_problem(1)
|
||||||
elseif cmd.action == 'prev' then
|
elseif cmd.action == 'prev' then
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
---@field default_language string
|
---@field default_language string
|
||||||
---@field overrides? table<string, CpPlatformOverrides>
|
---@field overrides? table<string, CpPlatformOverrides>
|
||||||
|
|
||||||
---@class RunPanelConfig
|
---@class PanelConfig
|
||||||
---@field ansi boolean
|
---@field ansi boolean
|
||||||
---@field diff_mode "none"|"vim"|"git"
|
---@field diff_mode "none"|"vim"|"git"
|
||||||
---@field max_output_lines integer
|
---@field max_output_lines integer
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
---@field setup_code? fun(state: cp.State)
|
---@field setup_code? fun(state: cp.State)
|
||||||
|
|
||||||
---@class CpUI
|
---@class CpUI
|
||||||
---@field run_panel RunPanelConfig
|
---@field panel PanelConfig
|
||||||
---@field diff DiffConfig
|
---@field diff DiffConfig
|
||||||
---@field picker string|nil
|
---@field picker string|nil
|
||||||
|
|
||||||
|
|
@ -106,7 +106,7 @@ M.defaults = {
|
||||||
scrapers = constants.PLATFORMS,
|
scrapers = constants.PLATFORMS,
|
||||||
filename = nil,
|
filename = nil,
|
||||||
ui = {
|
ui = {
|
||||||
run_panel = { ansi = true, diff_mode = 'none', max_output_lines = 50 },
|
panel = { ansi = true, diff_mode = 'none', max_output_lines = 50 },
|
||||||
diff = {
|
diff = {
|
||||||
git = {
|
git = {
|
||||||
args = { 'diff', '--no-index', '--word-diff=plain', '--word-diff-regex=.', '--no-prefix' },
|
args = { 'diff', '--no-index', '--word-diff=plain', '--word-diff-regex=.', '--no-prefix' },
|
||||||
|
|
@ -232,16 +232,16 @@ function M.setup(user_config)
|
||||||
})
|
})
|
||||||
|
|
||||||
vim.validate({
|
vim.validate({
|
||||||
ansi = { cfg.ui.run_panel.ansi, 'boolean' },
|
ansi = { cfg.ui.panel.ansi, 'boolean' },
|
||||||
diff_mode = {
|
diff_mode = {
|
||||||
cfg.ui.run_panel.diff_mode,
|
cfg.ui.panel.diff_mode,
|
||||||
function(v)
|
function(v)
|
||||||
return vim.tbl_contains({ 'none', 'vim', 'git' }, v)
|
return vim.tbl_contains({ 'none', 'vim', 'git' }, v)
|
||||||
end,
|
end,
|
||||||
"diff_mode must be 'none', 'vim', or 'git'",
|
"diff_mode must be 'none', 'vim', or 'git'",
|
||||||
},
|
},
|
||||||
max_output_lines = {
|
max_output_lines = {
|
||||||
cfg.ui.run_panel.max_output_lines,
|
cfg.ui.panel.max_output_lines,
|
||||||
function(v)
|
function(v)
|
||||||
return type(v) == 'number' and v > 0 and v == math.floor(v)
|
return type(v) == 'number' and v > 0 and v == math.floor(v)
|
||||||
end,
|
end,
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@ local user_config = {}
|
||||||
local config = nil
|
local config = nil
|
||||||
local initialized = false
|
local initialized = false
|
||||||
|
|
||||||
--- Root handler for all `:CP ...` commands
|
|
||||||
---@return nil
|
---@return nil
|
||||||
function M.handle_command(opts)
|
function M.handle_command(opts)
|
||||||
local commands = require('cp.commands')
|
local commands = require('cp.commands')
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
---@field timeout_ms number
|
---@field timeout_ms number
|
||||||
---@field memory_mb number
|
---@field memory_mb number
|
||||||
|
|
||||||
---@class RunPanelState
|
---@class PanelState
|
||||||
---@field test_cases RanTestCase[]
|
---@field test_cases RanTestCase[]
|
||||||
---@field current_index number
|
---@field current_index number
|
||||||
---@field buffer number?
|
---@field buffer number?
|
||||||
|
|
@ -37,8 +37,8 @@ local execute = require('cp.runner.execute')
|
||||||
local logger = require('cp.log')
|
local logger = require('cp.log')
|
||||||
local state = require('cp.state')
|
local state = require('cp.state')
|
||||||
|
|
||||||
---@type RunPanelState
|
---@type PanelState
|
||||||
local run_panel_state = {
|
local panel_state = {
|
||||||
test_cases = {},
|
test_cases = {},
|
||||||
current_index = 1,
|
current_index = 1,
|
||||||
buffer = nil,
|
buffer = nil,
|
||||||
|
|
@ -113,8 +113,8 @@ local function run_single_test_case(test_case)
|
||||||
local run_template = eff and eff.commands and eff.commands.run or {}
|
local run_template = eff and eff.commands and eff.commands.run or {}
|
||||||
local cmd = build_command(run_template, substitutions)
|
local cmd = build_command(run_template, substitutions)
|
||||||
local stdin_content = (test_case.input or '') .. '\n'
|
local stdin_content = (test_case.input or '') .. '\n'
|
||||||
local timeout_ms = (run_panel_state.constraints and run_panel_state.constraints.timeout_ms) or 0
|
local timeout_ms = (panel_state.constraints and panel_state.constraints.timeout_ms) or 0
|
||||||
local memory_mb = run_panel_state.constraints and run_panel_state.constraints.memory_mb or 0
|
local memory_mb = panel_state.constraints and panel_state.constraints.memory_mb or 0
|
||||||
|
|
||||||
local r = execute.run(cmd, stdin_content, timeout_ms, memory_mb)
|
local r = execute.run(cmd, stdin_content, timeout_ms, memory_mb)
|
||||||
|
|
||||||
|
|
@ -122,7 +122,7 @@ local function run_single_test_case(test_case)
|
||||||
local out = r.stdout or ''
|
local out = r.stdout or ''
|
||||||
local highlights = {}
|
local highlights = {}
|
||||||
if out ~= '' then
|
if out ~= '' then
|
||||||
if config.ui.run_panel.ansi then
|
if config.ui.panel.ansi then
|
||||||
local parsed = ansi.parse_ansi_text(out)
|
local parsed = ansi.parse_ansi_text(out)
|
||||||
out = table.concat(parsed.lines, '\n')
|
out = table.concat(parsed.lines, '\n')
|
||||||
highlights = parsed.highlights
|
highlights = parsed.highlights
|
||||||
|
|
@ -131,7 +131,7 @@ local function run_single_test_case(test_case)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local max_lines = config.ui.run_panel.max_output_lines
|
local max_lines = config.ui.panel.max_output_lines
|
||||||
local lines = vim.split(out, '\n')
|
local lines = vim.split(out, '\n')
|
||||||
if #lines > max_lines then
|
if #lines > max_lines then
|
||||||
local trimmed = {}
|
local trimmed = {}
|
||||||
|
|
@ -185,9 +185,9 @@ function M.load_test_cases()
|
||||||
state.get_problem_id()
|
state.get_problem_id()
|
||||||
)
|
)
|
||||||
|
|
||||||
run_panel_state.test_cases = create_sentinal_panel_data(tcs)
|
panel_state.test_cases = create_sentinal_panel_data(tcs)
|
||||||
run_panel_state.current_index = 1
|
panel_state.current_index = 1
|
||||||
run_panel_state.constraints = load_constraints_from_cache(
|
panel_state.constraints = load_constraints_from_cache(
|
||||||
state.get_platform() or '',
|
state.get_platform() or '',
|
||||||
state.get_contest_id() or '',
|
state.get_contest_id() or '',
|
||||||
state.get_problem_id()
|
state.get_problem_id()
|
||||||
|
|
@ -200,7 +200,7 @@ end
|
||||||
---@param index number
|
---@param index number
|
||||||
---@return boolean
|
---@return boolean
|
||||||
function M.run_test_case(index)
|
function M.run_test_case(index)
|
||||||
local tc = run_panel_state.test_cases[index]
|
local tc = panel_state.test_cases[index]
|
||||||
if not tc then
|
if not tc then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
@ -227,16 +227,16 @@ end
|
||||||
---@return RanTestCase[]
|
---@return RanTestCase[]
|
||||||
function M.run_all_test_cases()
|
function M.run_all_test_cases()
|
||||||
local results = {}
|
local results = {}
|
||||||
for i = 1, #run_panel_state.test_cases do
|
for i = 1, #panel_state.test_cases do
|
||||||
M.run_test_case(i)
|
M.run_test_case(i)
|
||||||
results[i] = run_panel_state.test_cases[i]
|
results[i] = panel_state.test_cases[i]
|
||||||
end
|
end
|
||||||
return results
|
return results
|
||||||
end
|
end
|
||||||
|
|
||||||
---@return RunPanelState
|
---@return PanelState
|
||||||
function M.get_run_panel_state()
|
function M.get_panel_state()
|
||||||
return run_panel_state
|
return panel_state
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param output string|nil
|
---@param output string|nil
|
||||||
|
|
@ -247,7 +247,7 @@ function M.handle_compilation_failure(output)
|
||||||
local txt
|
local txt
|
||||||
local hl = {}
|
local hl = {}
|
||||||
|
|
||||||
if config.ui.run_panel.ansi then
|
if config.ui.panel.ansi then
|
||||||
local p = ansi.parse_ansi_text(output or '')
|
local p = ansi.parse_ansi_text(output or '')
|
||||||
txt = table.concat(p.lines, '\n')
|
txt = table.concat(p.lines, '\n')
|
||||||
hl = p.highlights
|
hl = p.highlights
|
||||||
|
|
@ -255,7 +255,7 @@ function M.handle_compilation_failure(output)
|
||||||
txt = (output or ''):gsub('\027%[[%d;]*[a-zA-Z]', '')
|
txt = (output or ''):gsub('\027%[[%d;]*[a-zA-Z]', '')
|
||||||
end
|
end
|
||||||
|
|
||||||
for _, tc in ipairs(run_panel_state.test_cases) do
|
for _, tc in ipairs(panel_state.test_cases) do
|
||||||
tc.status = 'fail'
|
tc.status = 'fail'
|
||||||
tc.actual = txt
|
tc.actual = txt
|
||||||
tc.actual_highlights = hl
|
tc.actual_highlights = hl
|
||||||
|
|
|
||||||
|
|
@ -275,7 +275,7 @@ local function data_row(c, idx, tc, is_current, test_state)
|
||||||
return line, hi
|
return line, hi
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param test_state RunPanelState
|
---@param test_state PanelState
|
||||||
---@return string[], Highlight[] lines and highlight positions
|
---@return string[], Highlight[] lines and highlight positions
|
||||||
function M.render_test_list(test_state)
|
function M.render_test_list(test_state)
|
||||||
local lines, highlights = {}, {}
|
local lines, highlights = {}, {}
|
||||||
|
|
|
||||||
|
|
@ -164,7 +164,7 @@ function M.update_diff_panes(
|
||||||
config,
|
config,
|
||||||
setup_keybindings_for_buffer
|
setup_keybindings_for_buffer
|
||||||
)
|
)
|
||||||
local test_state = run.get_run_panel_state()
|
local test_state = run.get_panel_state()
|
||||||
local current_test = test_state.test_cases[test_state.current_index]
|
local current_test = test_state.test_cases[test_state.current_index]
|
||||||
|
|
||||||
if not current_test then
|
if not current_test then
|
||||||
|
|
@ -185,7 +185,7 @@ function M.update_diff_panes(
|
||||||
actual_content = actual_content
|
actual_content = actual_content
|
||||||
end
|
end
|
||||||
|
|
||||||
local desired_mode = is_compilation_failure and 'single' or config.ui.run_panel.diff_mode
|
local desired_mode = is_compilation_failure and 'single' or config.ui.panel.diff_mode
|
||||||
local highlight = require('cp.ui.highlight')
|
local highlight = require('cp.ui.highlight')
|
||||||
local diff_namespace = highlight.create_namespace()
|
local diff_namespace = highlight.create_namespace()
|
||||||
local ansi_namespace = vim.api.nvim_create_namespace('cp_ansi_highlights')
|
local ansi_namespace = vim.api.nvim_create_namespace('cp_ansi_highlights')
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
---@class RunOpts
|
---@class PanelOpts
|
||||||
---@field debug? boolean
|
---@field debug? boolean
|
||||||
|
|
||||||
local config_module = require('cp.config')
|
local config_module = require('cp.config')
|
||||||
|
|
@ -21,7 +21,7 @@ function M.disable()
|
||||||
end
|
end
|
||||||
|
|
||||||
if active_panel == 'run' then
|
if active_panel == 'run' then
|
||||||
M.toggle_run_panel()
|
M.toggle_panel()
|
||||||
elseif active_panel == 'interactive' then
|
elseif active_panel == 'interactive' then
|
||||||
M.toggle_interactive()
|
M.toggle_interactive()
|
||||||
else
|
else
|
||||||
|
|
@ -204,8 +204,8 @@ function M.toggle_interactive(interactor_cmd)
|
||||||
state.set_active_panel('interactive')
|
state.set_active_panel('interactive')
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param run_opts? RunOpts
|
---@param panel_opts? PanelOpts
|
||||||
function M.toggle_run_panel(run_opts)
|
function M.toggle_panel(panel_opts)
|
||||||
if state.get_active_panel() == 'run' then
|
if state.get_active_panel() == 'run' then
|
||||||
if current_diff_layout then
|
if current_diff_layout then
|
||||||
current_diff_layout.cleanup()
|
current_diff_layout.cleanup()
|
||||||
|
|
@ -294,13 +294,13 @@ function M.toggle_run_panel(run_opts)
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function refresh_run_panel()
|
local function refresh_panel()
|
||||||
if not test_buffers.tab_buf or not vim.api.nvim_buf_is_valid(test_buffers.tab_buf) then
|
if not test_buffers.tab_buf or not vim.api.nvim_buf_is_valid(test_buffers.tab_buf) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local run_render = require('cp.runner.run_render')
|
local run_render = require('cp.runner.run_render')
|
||||||
run_render.setup_highlights()
|
run_render.setup_highlights()
|
||||||
local test_state = run.get_run_panel_state()
|
local test_state = run.get_panel_state()
|
||||||
local tab_lines, tab_highlights = run_render.render_test_list(test_state)
|
local tab_lines, tab_highlights = run_render.render_test_list(test_state)
|
||||||
utils.update_buffer_content(
|
utils.update_buffer_content(
|
||||||
test_buffers.tab_buf,
|
test_buffers.tab_buf,
|
||||||
|
|
@ -312,29 +312,29 @@ function M.toggle_run_panel(run_opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function navigate_test_case(delta)
|
local function navigate_test_case(delta)
|
||||||
local test_state = run.get_run_panel_state()
|
local test_state = run.get_panel_state()
|
||||||
if vim.tbl_isempty(test_state.test_cases) then
|
if vim.tbl_isempty(test_state.test_cases) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
test_state.current_index = (test_state.current_index + delta - 1) % #test_state.test_cases + 1
|
test_state.current_index = (test_state.current_index + delta - 1) % #test_state.test_cases + 1
|
||||||
refresh_run_panel()
|
refresh_panel()
|
||||||
end
|
end
|
||||||
|
|
||||||
setup_keybindings_for_buffer = function(buf)
|
setup_keybindings_for_buffer = function(buf)
|
||||||
vim.keymap.set('n', 'q', function()
|
vim.keymap.set('n', 'q', function()
|
||||||
M.toggle_run_panel()
|
M.toggle_panel()
|
||||||
end, { buffer = buf, silent = true })
|
end, { buffer = buf, silent = true })
|
||||||
vim.keymap.set('n', 't', function()
|
vim.keymap.set('n', 't', function()
|
||||||
local modes = { 'none', 'git', 'vim' }
|
local modes = { 'none', 'git', 'vim' }
|
||||||
local current_idx = 1
|
local current_idx = 1
|
||||||
for i, mode in ipairs(modes) do
|
for i, mode in ipairs(modes) do
|
||||||
if config.ui.run_panel.diff_mode == mode then
|
if config.ui.panel.diff_mode == mode then
|
||||||
current_idx = i
|
current_idx = i
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
config.ui.run_panel.diff_mode = modes[(current_idx % #modes) + 1]
|
config.ui.panel.diff_mode = modes[(current_idx % #modes) + 1]
|
||||||
refresh_run_panel()
|
refresh_panel()
|
||||||
end, { buffer = buf, silent = true })
|
end, { buffer = buf, silent = true })
|
||||||
vim.keymap.set('n', '<c-n>', function()
|
vim.keymap.set('n', '<c-n>', function()
|
||||||
navigate_test_case(1)
|
navigate_test_case(1)
|
||||||
|
|
@ -351,7 +351,7 @@ function M.toggle_run_panel(run_opts)
|
||||||
config.hooks.before_run(state)
|
config.hooks.before_run(state)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
if run_opts and run_opts.debug and config.hooks and config.hooks.before_debug then
|
if panel_opts and panel_opts.debug and config.hooks and config.hooks.before_debug then
|
||||||
vim.schedule_wrap(function()
|
vim.schedule_wrap(function()
|
||||||
config.hooks.before_debug(state)
|
config.hooks.before_debug(state)
|
||||||
end)
|
end)
|
||||||
|
|
@ -365,10 +365,10 @@ function M.toggle_run_panel(run_opts)
|
||||||
run.handle_compilation_failure(compile_result.output)
|
run.handle_compilation_failure(compile_result.output)
|
||||||
end
|
end
|
||||||
|
|
||||||
refresh_run_panel()
|
refresh_panel()
|
||||||
|
|
||||||
vim.schedule(function()
|
vim.schedule(function()
|
||||||
if config.ui.run_panel.ansi then
|
if config.ui.panel.ansi then
|
||||||
local ansi = require('cp.ui.ansi')
|
local ansi = require('cp.ui.ansi')
|
||||||
ansi.setup_highlight_groups()
|
ansi.setup_highlight_groups()
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ describe('run module', function()
|
||||||
|
|
||||||
describe('basic functionality', function()
|
describe('basic functionality', function()
|
||||||
it('can get panel state', function()
|
it('can get panel state', function()
|
||||||
local state = run.get_run_panel_state()
|
local state = run.get_panel_state()
|
||||||
assert.is_table(state)
|
assert.is_table(state)
|
||||||
assert.is_table(state.test_cases)
|
assert.is_table(state.test_cases)
|
||||||
end)
|
end)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue