134 lines
3.1 KiB
Lua
134 lines
3.1 KiB
Lua
-- luacheck: globals term
|
|
|
|
local createLibTest = require('/apis/libtest');
|
|
local createTui = require('/apis/libtui');
|
|
|
|
local testlib = createLibTest({ ... });
|
|
|
|
local function fakeEventLoop()
|
|
local onStart = nil;
|
|
local onStop = nil;
|
|
|
|
return {
|
|
onStart = function(fn) onStart = fn; end,
|
|
onStop = function(fn) onStop = fn; end,
|
|
register = function() end,
|
|
startLoop = function()
|
|
if onStart then
|
|
onStart();
|
|
end
|
|
return true;
|
|
end,
|
|
stopLoop = function()
|
|
if onStop then
|
|
onStop();
|
|
end
|
|
end,
|
|
isRunningLoop = function()
|
|
return false;
|
|
end,
|
|
};
|
|
end
|
|
|
|
local function withFakeTerm(fn)
|
|
local originalTerm = term;
|
|
local writes = {};
|
|
local state = {
|
|
textColor = colors.white,
|
|
bgColor = colors.black,
|
|
cursorX = 1,
|
|
cursorY = 1,
|
|
cursorBlink = false,
|
|
width = 20,
|
|
height = 5,
|
|
};
|
|
|
|
term = {
|
|
setCursorBlink = function(value) state.cursorBlink = value; end,
|
|
setTextColor = function(value) state.textColor = value; end,
|
|
setBackgroundColor = function(value) state.bgColor = value; end,
|
|
clear = function() writes[#writes + 1] = { kind = 'clear' }; end,
|
|
getTextColor = function() return state.textColor; end,
|
|
getBackgroundColor = function() return state.bgColor; end,
|
|
getCursorPos = function() return state.cursorX, state.cursorY; end,
|
|
getCursorBlink = function() return state.cursorBlink; end,
|
|
setCursorPos = function(x, y)
|
|
state.cursorX = x;
|
|
state.cursorY = y;
|
|
end,
|
|
getSize = function() return state.width, state.height; end,
|
|
write = function(text)
|
|
writes[#writes + 1] = {
|
|
kind = 'write',
|
|
text = text,
|
|
x = state.cursorX,
|
|
y = state.cursorY,
|
|
color = state.textColor,
|
|
bgColor = state.bgColor,
|
|
};
|
|
state.cursorX = state.cursorX + string.len(text);
|
|
end,
|
|
};
|
|
|
|
local ok, err = pcall(fn, writes, state);
|
|
term = originalTerm;
|
|
|
|
if not ok then
|
|
error(err, 0);
|
|
end
|
|
end
|
|
|
|
testlib.test('text nodes pad utf8 text by characters', function()
|
|
withFakeTerm(function(writes)
|
|
local ui = createTui(fakeEventLoop());
|
|
ui.render(ui.Box({
|
|
children = {
|
|
ui.Box({
|
|
width = 3,
|
|
height = 1,
|
|
children = { ui.Text('é') },
|
|
}),
|
|
},
|
|
}));
|
|
|
|
local found = false;
|
|
for _, item in ipairs(writes) do
|
|
if item.kind == 'write' and item.text == 'é ' then
|
|
found = true;
|
|
break;
|
|
end
|
|
end
|
|
|
|
testlib.assertTrue(found, 'expected padded utf8 text');
|
|
end);
|
|
end);
|
|
|
|
testlib.test('box borders keep utf8 titles intact', function()
|
|
withFakeTerm(function(writes)
|
|
local ui = createTui(fakeEventLoop());
|
|
ui.render(ui.Box({
|
|
children = {
|
|
ui.Box({
|
|
width = 5,
|
|
height = 3,
|
|
border = true,
|
|
title = 'Ç',
|
|
children = {},
|
|
}),
|
|
},
|
|
}));
|
|
|
|
local found = false;
|
|
for _, item in ipairs(writes) do
|
|
if item.kind == 'write' and item.text == '+ Ç +' then
|
|
found = true;
|
|
break;
|
|
end
|
|
end
|
|
|
|
testlib.assertTrue(found, 'expected utf8 border title');
|
|
end);
|
|
end);
|
|
|
|
testlib.run();
|