Skip to content

Commit dd685a9

Browse files
committed
Terminal/Progress bar: Code cleaning
1 parent 84938ad commit dd685a9

3 files changed

Lines changed: 87 additions & 74 deletions

File tree

tests/Terminal/Canvas.mpp

Lines changed: 0 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -97,80 +97,6 @@ namespace CppUtils::UnitTest::Terminal::Canvas
9797
suite.expectEqual(canvas.toString(), "😊🤖🐸🐊🏊-----\n-🤖------------\n------🐸-------\n------------🐊-\n-------------🏊\n"sv);
9898
});
9999

100-
suite.addTest("Progress bar", [&] {
101-
const auto terminalWidth = CppUtils::Terminal::getTerminalSize().width();
102-
auto canvas = CppUtils::Terminal::Canvas{CppUtils::Container::Size2{terminalWidth, 1}};
103-
auto& progressBar = canvas.addWidget(std::make_unique<CppUtils::Terminal::ProgressBar>("Progress bar"));
104-
105-
auto scheduler = CppUtils::Thread::Scheduler{};
106-
scheduler.schedule([&canvas]() mutable {
107-
canvas.close();
108-
}, 500ms);
109-
110-
for (auto i = 0.f; i <= 100.f; i += 1.f)
111-
{
112-
progressBar.setPercent(i);
113-
std::this_thread::sleep_for(5ms);
114-
}
115-
116-
canvas.wait();
117-
});
118-
119-
suite.addTest("Multiple Progress Bars", [&] {
120-
const auto terminalWidth = CppUtils::Terminal::getTerminalSize().width();
121-
auto canvas = CppUtils::Terminal::Canvas{CppUtils::Container::Size2{terminalWidth, 3}};
122-
auto& layout = canvas.addWidget(std::make_unique<CppUtils::Terminal::Layout>());
123-
124-
auto& bar1 = layout.addWidget(std::make_unique<CppUtils::Terminal::ProgressBar>("Bar 1"));
125-
auto& bar2 = layout.addWidget(std::make_unique<CppUtils::Terminal::ProgressBar>("Bar 2"));
126-
auto& bar3 = layout.addWidget(std::make_unique<CppUtils::Terminal::ProgressBar>("Bar 3"));
127-
128-
auto scheduler = CppUtils::Thread::Scheduler{};
129-
scheduler.schedule([&canvas]() mutable {
130-
canvas.close();
131-
}, 1'000ms);
132-
133-
for (auto i = 0.f; i <= 100.f; i += 1.f)
134-
{
135-
bar1.setPercent(i);
136-
bar2.setPercent(CppUtils::Math::Easing::inQuad(i / 100.f) * 100.f);
137-
bar3.setPercent(CppUtils::Math::Easing::outCubic(i / 100.f) * 100.f);
138-
std::this_thread::sleep_for(10ms);
139-
}
140-
141-
canvas.wait();
142-
});
143-
144-
suite.addTest("Progress Bar Styles", [&] {
145-
auto canvas = CppUtils::Terminal::Canvas{CppUtils::Container::Size2{60, 10}};
146-
147-
auto styles = std::vector<std::pair<std::string, CppUtils::Terminal::ProgressBarStyle>>{
148-
{"Block", CppUtils::Terminal::ProgressBarStyles::Block},
149-
{"Clean", CppUtils::Terminal::ProgressBarStyles::Clean},
150-
{"Line", CppUtils::Terminal::ProgressBarStyles::Line},
151-
{"Arrowhead", CppUtils::Terminal::ProgressBarStyles::Arrowhead},
152-
{"Double", CppUtils::Terminal::ProgressBarStyles::Double},
153-
{"Round", CppUtils::Terminal::ProgressBarStyles::Round},
154-
{"Shaded", CppUtils::Terminal::ProgressBarStyles::Shaded},
155-
{"Braille", CppUtils::Terminal::ProgressBarStyles::Braille},
156-
{"Arrow", CppUtils::Terminal::ProgressBarStyles::Arrow},
157-
{"Retro", CppUtils::Terminal::ProgressBarStyles::Retro}};
158-
159-
for (auto i = 0.f; i <= 100.f; i += 1.f)
160-
{
161-
auto y = 0uz;
162-
for (const auto& [name, style] : styles)
163-
{
164-
auto bar = CppUtils::Terminal::ProgressBar(name, style);
165-
bar.setPercent(i);
166-
auto view = canvas.getWritableView(CppUtils::Terminal::Viewport{CppUtils::Container::Size2{60, 1}, CppUtils::Container::Size2{0, y++}});
167-
bar.draw(view);
168-
}
169-
canvas.print();
170-
std::this_thread::sleep_for(20ms);
171-
}
172-
});
173-
174100
suite.addTest("Bouncing ball", [&] {
175101
const auto terminalSize = CppUtils::Terminal::getTerminalSize();
176102
auto canvasSize = terminalSize;

tests/Terminal/ProgressBar.mpp

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
export module CppUtils.UnitTests.Terminal.ProgressBar;
2+
3+
import std;
4+
import CppUtils;
5+
6+
namespace CppUtils::UnitTest::Terminal::ProgressBar
7+
{
8+
auto _ = TestSuite{"Terminal/ProgressBar", {"UnitTest", "Thread/Scheduler", "Terminal/Canvas"}, [](TestSuite& suite) {
9+
using namespace std::literals;
10+
using namespace std::chrono_literals;
11+
12+
suite.addTest("Basic", [&] {
13+
const auto terminalWidth = CppUtils::Terminal::getTerminalSize().width();
14+
auto canvas = CppUtils::Terminal::Canvas{CppUtils::Container::Size2{terminalWidth, 1}};
15+
auto& progressBar = canvas.addWidget(std::make_unique<CppUtils::Terminal::ProgressBar>("Progress bar"));
16+
17+
auto scheduler = CppUtils::Thread::Scheduler{};
18+
scheduler.schedule([&canvas]() mutable {
19+
canvas.close();
20+
}, 500ms);
21+
22+
for (auto i = 0.f; i <= 100.f; i += 1.f)
23+
{
24+
progressBar.setPercent(i);
25+
std::this_thread::sleep_for(5ms);
26+
}
27+
28+
canvas.wait();
29+
});
30+
31+
suite.addTest("Multiple", [&] {
32+
const auto terminalWidth = CppUtils::Terminal::getTerminalSize().width();
33+
auto canvas = CppUtils::Terminal::Canvas{CppUtils::Container::Size2{terminalWidth, 3}};
34+
auto& layout = canvas.addWidget(std::make_unique<CppUtils::Terminal::Layout>());
35+
36+
auto& bar1 = layout.addWidget(std::make_unique<CppUtils::Terminal::ProgressBar>("Bar 1"));
37+
auto& bar2 = layout.addWidget(std::make_unique<CppUtils::Terminal::ProgressBar>("Bar 2"));
38+
auto& bar3 = layout.addWidget(std::make_unique<CppUtils::Terminal::ProgressBar>("Bar 3"));
39+
40+
auto scheduler = CppUtils::Thread::Scheduler{};
41+
scheduler.schedule([&canvas]() mutable {
42+
canvas.close();
43+
}, 1'000ms);
44+
45+
for (auto i = 0.f; i <= 100.f; i += 1.f)
46+
{
47+
bar1.setPercent(i);
48+
bar2.setPercent(CppUtils::Math::Easing::inQuad(i / 100.f) * 100.f);
49+
bar3.setPercent(CppUtils::Math::Easing::outCubic(i / 100.f) * 100.f);
50+
std::this_thread::sleep_for(10ms);
51+
}
52+
53+
canvas.wait();
54+
});
55+
56+
suite.addTest("Styles", [&] {
57+
auto canvas = CppUtils::Terminal::Canvas{CppUtils::Container::Size2{60, 10}};
58+
59+
auto styles = std::vector<std::pair<std::string, CppUtils::Terminal::ProgressBarStyle>>{
60+
{"Block", CppUtils::Terminal::ProgressBarStyles::Block},
61+
{"Clean", CppUtils::Terminal::ProgressBarStyles::Clean},
62+
{"Line", CppUtils::Terminal::ProgressBarStyles::Line},
63+
{"Arrowhead", CppUtils::Terminal::ProgressBarStyles::Arrowhead},
64+
{"Double", CppUtils::Terminal::ProgressBarStyles::Double},
65+
{"Round", CppUtils::Terminal::ProgressBarStyles::Round},
66+
{"Shaded", CppUtils::Terminal::ProgressBarStyles::Shaded},
67+
{"Braille", CppUtils::Terminal::ProgressBarStyles::Braille},
68+
{"Arrow", CppUtils::Terminal::ProgressBarStyles::Arrow},
69+
{"Retro", CppUtils::Terminal::ProgressBarStyles::Retro}};
70+
71+
for (auto i = 0.f; i <= 100.f; i += 1.f)
72+
{
73+
auto y = 0uz;
74+
for (const auto& [name, style] : styles)
75+
{
76+
auto bar = CppUtils::Terminal::ProgressBar(name, style);
77+
bar.setPercent(i);
78+
auto view = canvas.getWritableView(CppUtils::Terminal::Viewport{CppUtils::Container::Size2{60, 1}, CppUtils::Container::Size2{0, y++}});
79+
bar.draw(view);
80+
}
81+
canvas.print();
82+
std::this_thread::sleep_for(20ms);
83+
}
84+
});
85+
}};
86+
}

tests/UnitTests.mpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export import CppUtils.UnitTests.System.Error;
5353
export import CppUtils.UnitTests.Terminal;
5454
export import CppUtils.UnitTests.Terminal.Canvas;
5555
export import CppUtils.UnitTests.Terminal.Primitive;
56+
export import CppUtils.UnitTests.Terminal.ProgressBar;
5657
export import CppUtils.UnitTests.Terminal.Scrollable;
5758
export import CppUtils.UnitTests.Terminal.Title;
5859
export import CppUtils.UnitTests.Thread.AsyncEventDispatcher;

0 commit comments

Comments
 (0)