cc-libs/tests/carre.lua

123 lines
3.4 KiB
Lua

local createLibTest = require('/apis/libtest');
local createCarre = require('/apis/libcarre');
local testlib = createLibTest({ ... });
local function packed(...)
return table.pack(...);
end
local function fakeTerm(width, height)
local buffer = {};
local cursorX = 1;
local cursorY = 1;
for y = 1, height do
buffer[y] = {};
for x = 1, width do
buffer[y][x] = '.';
end
end
return {
setCursorPos = function(x, y)
cursorX = x;
cursorY = y;
end,
write = function(text)
text = tostring(text);
for i = 1, #text do
if buffer[cursorY] and buffer[cursorY][cursorX] then
buffer[cursorY][cursorX] = string.sub(text, i, i);
end
cursorX = cursorX + 1;
end
end,
line = function(y)
return table.concat(buffer[y], '');
end,
};
end
testlib.test('parseArgs accepts basic drawing options', function()
local carre = createCarre();
local config = carre.parseArgs(packed('-size', '5', '-x', '2', '-y', '3', '-char', '@', '-fill', '-clear'));
testlib.assertEquals(config.size, 5);
testlib.assertEquals(config.x, 2);
testlib.assertEquals(config.y, 3);
testlib.assertEquals(config.char, '@');
testlib.assertEquals(config.fill, true);
testlib.assertEquals(config.clear, true);
end);
testlib.test('parseArgs rejects invalid sizes', function()
local carre = createCarre();
local config, err = carre.parseArgs(packed('-size', '0'));
testlib.assertEquals(config, nil);
testlib.assertTrue(string.find(err, 'entier positif', 1, true));
end);
testlib.test('computeSquare centers and clamps the square', function()
local carre = createCarre();
local square = carre.computeSquare({ size = 4, char = '#', fill = false }, 10, 6);
testlib.assertEquals(square.x, 4);
testlib.assertEquals(square.y, 2);
testlib.assertEquals(square.size, 4);
square = carre.computeSquare({ size = 20, x = 99, y = 99, char = '#' }, 7, 5);
testlib.assertEquals(square.x, 3);
testlib.assertEquals(square.y, 1);
testlib.assertEquals(square.size, 5);
end);
testlib.test('computeSquare random keeps explicit character', function()
local values = { 3, 2, 4 };
local index = 0;
local carre = createCarre({
random = function(minValue, maxValue)
index = index + 1;
return math.max(minValue, math.min(maxValue, values[index]));
end,
});
local square = carre.computeSquare({
random = true,
char = '@',
explicit = { char = true },
}, 10, 8);
testlib.assertEquals(square.size, 3);
testlib.assertEquals(square.x, 2);
testlib.assertEquals(square.y, 4);
testlib.assertEquals(square.char, '@');
end);
testlib.test('drawSquare renders an outline', function()
local carre = createCarre();
local termLib = fakeTerm(8, 6);
carre.drawSquare(termLib, { x = 2, y = 2, size = 4, char = '#', fill = false });
testlib.assertEquals(termLib.line(1), '........');
testlib.assertEquals(termLib.line(2), '.####...');
testlib.assertEquals(termLib.line(3), '.# #...');
testlib.assertEquals(termLib.line(4), '.# #...');
testlib.assertEquals(termLib.line(5), '.####...');
end);
testlib.test('drawSquare renders a filled square', function()
local carre = createCarre();
local termLib = fakeTerm(6, 5);
carre.drawSquare(termLib, { x = 2, y = 2, size = 3, char = '*', fill = true });
testlib.assertEquals(termLib.line(2), '.***..');
testlib.assertEquals(termLib.line(3), '.***..');
testlib.assertEquals(termLib.line(4), '.***..');
end);
testlib.run();