feat: simplify ansi buffer approach
This commit is contained in:
parent
f493b44ca3
commit
b507dad4a7
4 changed files with 185 additions and 103 deletions
116
tests/execute_spec.lua
Normal file
116
tests/execute_spec.lua
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
local execute = require('cp.execute')
|
||||
|
||||
describe('execute module', function()
|
||||
local test_ctx
|
||||
local test_config
|
||||
|
||||
before_each(function()
|
||||
test_ctx = {
|
||||
source_file = 'test.cpp',
|
||||
binary_file = 'build/test',
|
||||
input_file = 'io/test.cpin',
|
||||
output_file = 'io/test.cpout',
|
||||
}
|
||||
|
||||
test_config = {
|
||||
default_language = 'cpp',
|
||||
cpp = {
|
||||
version = 17,
|
||||
compile = { 'g++', '-std=c++17', '-o', '{binary}', '{source}' },
|
||||
test = { '{binary}' },
|
||||
executable = nil,
|
||||
},
|
||||
}
|
||||
end)
|
||||
|
||||
describe('compile_generic', function()
|
||||
it('should use stderr redirection (2>&1)', function()
|
||||
local original_system = vim.system
|
||||
local captured_command = nil
|
||||
|
||||
vim.system = function(cmd, opts)
|
||||
captured_command = cmd
|
||||
return {
|
||||
wait = function()
|
||||
return { code = 0, stdout = '', stderr = '' }
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
local substitutions = { source = 'test.cpp', binary = 'build/test', version = '17' }
|
||||
execute.compile_generic(test_config.cpp, substitutions)
|
||||
|
||||
assert.is_not_nil(captured_command)
|
||||
assert.equals('sh', captured_command[1])
|
||||
assert.equals('-c', captured_command[2])
|
||||
assert.is_true(
|
||||
string.find(captured_command[3], '2>&1') ~= nil,
|
||||
'Command should contain 2>&1 redirection'
|
||||
)
|
||||
|
||||
vim.system = original_system
|
||||
end)
|
||||
|
||||
it('should return combined stdout+stderr in result', function()
|
||||
local original_system = vim.system
|
||||
local test_output = 'STDOUT: Hello\nSTDERR: Error message\n'
|
||||
|
||||
vim.system = function(cmd, opts)
|
||||
return {
|
||||
wait = function()
|
||||
return { code = 1, stdout = test_output, stderr = '' }
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
local substitutions = { source = 'test.cpp', binary = 'build/test', version = '17' }
|
||||
local result = execute.compile_generic(test_config.cpp, substitutions)
|
||||
|
||||
assert.equals(1, result.code)
|
||||
assert.equals(test_output, result.stdout)
|
||||
|
||||
vim.system = original_system
|
||||
end)
|
||||
end)
|
||||
|
||||
describe('compile_problem', function()
|
||||
it('should return combined output in stderr field for compatibility', function()
|
||||
local original_system = vim.system
|
||||
local test_error_output = 'test.cpp:1:1: error: expected declaration\n'
|
||||
|
||||
vim.system = function(cmd, opts)
|
||||
return {
|
||||
wait = function()
|
||||
return { code = 1, stdout = test_error_output, stderr = '' }
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
local result = execute.compile_problem(test_ctx, test_config, false)
|
||||
|
||||
assert.is_false(result.success)
|
||||
assert.equals(test_error_output, result.output)
|
||||
|
||||
vim.system = original_system
|
||||
end)
|
||||
|
||||
it('should return success=true when compilation succeeds', function()
|
||||
local original_system = vim.system
|
||||
|
||||
vim.system = function(cmd, opts)
|
||||
return {
|
||||
wait = function()
|
||||
return { code = 0, stdout = '', stderr = '' }
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
local result = execute.compile_problem(test_ctx, test_config, false)
|
||||
|
||||
assert.is_true(result.success)
|
||||
assert.is_nil(result.output)
|
||||
|
||||
vim.system = original_system
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
Loading…
Add table
Add a link
Reference in a new issue