Skip to content

Commit 56c111d

Browse files
committed
Terminal: Fix Canvas with 0x0 size
1 parent 67df7da commit 56c111d

2 files changed

Lines changed: 20 additions & 1 deletion

File tree

modules/Terminal/Size.mpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ export namespace CppUtils::Terminal
2727
[[nodiscard]] inline auto getTerminalSize() -> Container::Size2
2828
{
2929
auto windowsSize = winsize{};
30-
ioctl(STDOUT_FILENO, TIOCGWINSZ, std::addressof(windowsSize));
30+
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, std::addressof(windowsSize)) == -1)
31+
return Container::Size2{0, 0};
3132
return Container::Size2{
3233
static_cast<std::size_t>(windowsSize.ws_col),
3334
static_cast<std::size_t>(windowsSize.ws_row)};

tests/Terminal/Canvas.mpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,24 @@ namespace CppUtils::UnitTest::Terminal::Canvas
99
using namespace std::literals;
1010
using namespace std::chrono_literals;
1111

12+
suite.addTest("Canvas with 0x0 size", [&] {
13+
auto canvas = CppUtils::Terminal::Canvas{CppUtils::Container::Size2{0, 0}};
14+
canvas.fill('.');
15+
canvas.print();
16+
});
17+
18+
suite.addTest("Canvas with 0 height", [&] {
19+
auto canvas = CppUtils::Terminal::Canvas{CppUtils::Container::Size2{10, 0}};
20+
canvas.fill('.');
21+
canvas.print();
22+
});
23+
24+
suite.addTest("Canvas with 0 width", [&] {
25+
auto canvas = CppUtils::Terminal::Canvas{CppUtils::Container::Size2{0, 10}};
26+
canvas.fill('.');
27+
canvas.print();
28+
});
29+
1230
suite.addTest("Size", [&] {
1331
{
1432
auto canvas = CppUtils::Terminal::Canvas{CppUtils::Container::Size2{10, 5}};

0 commit comments

Comments
 (0)