123 lines
3.4 KiB
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();
|