aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQyriad <qyriad@qyriad.me>2024-06-22 02:04:14 +0000
committerGerrit Code Review <gerrit@localhost>2024-06-22 02:04:14 +0000
commit21865ccce0a5bf6edcb98a09b57b3f076ee9ba9f (patch)
treef5a047e858509a26594acb7cfd6b0f944509a2c4
parent375f4c033753db2c20af398211e892ddc9d29ec1 (diff)
parentfd250c51ed14132d79eb1329a4e679d41174e5b8 (diff)
Merge "add a basic libmain test for the progress bar rendering" into main
-rw-r--r--src/libmain/progress-bar.hh5
-rw-r--r--tests/unit/libmain/progress-bar.cc43
-rw-r--r--tests/unit/meson.build22
3 files changed, 66 insertions, 4 deletions
diff --git a/src/libmain/progress-bar.hh b/src/libmain/progress-bar.hh
index 1ac7ba97b..76e2ed4ff 100644
--- a/src/libmain/progress-bar.hh
+++ b/src/libmain/progress-bar.hh
@@ -13,9 +13,8 @@ constexpr const auto A_LONG_TIME = std::chrono::duration_cast<std::chrono::milli
100 * 365 * std::chrono::seconds(86400)
);
-class ProgressBar : public Logger
+struct ProgressBar : public Logger
{
-private:
struct ActInfo
{
using TimePoint = std::chrono::time_point<std::chrono::steady_clock>;
@@ -66,8 +65,6 @@ private:
bool printBuildLogs = false;
bool isTTY;
-public:
-
ProgressBar(bool isTTY)
: isTTY(isTTY)
{
diff --git a/tests/unit/libmain/progress-bar.cc b/tests/unit/libmain/progress-bar.cc
new file mode 100644
index 000000000..e44a8b37e
--- /dev/null
+++ b/tests/unit/libmain/progress-bar.cc
@@ -0,0 +1,43 @@
+#include <gtest/gtest.h>
+
+#include "eval.hh"
+#include "progress-bar.hh"
+#include "logging.hh"
+#include "shared.hh"
+
+constexpr std::string_view TEST_URL = "https://github.com/NixOS/nixpkgs/archive/master.tar.gz";
+// Arbitrary number. We picked the size of a Nixpkgs tarball that we downloaded.
+constexpr uint64_t TEST_EXPECTED = 43'370'307;
+// Arbitrary number. We picked the progress made on a Nixpkgs tarball download we interrupted.
+constexpr uint64_t TEST_DONE = 1'787'251;
+
+constexpr std::string_view EXPECTED = ANSI_GREEN "1.7" ANSI_NORMAL "/41.4 MiB DL";
+// Mostly here for informational purposes, but also if we change the way the escape codes
+// are defined this test might break in some annoying to debug way.
+constexpr std::string_view EXPECTED_RAW = "\x1b[32;1m1.7\x1b[0m/41.4 MiB DL";
+static_assert(EXPECTED == EXPECTED_RAW, "Hey, hey, the ANSI escape code definitions prolly changed");
+
+namespace nix
+{
+ TEST(ProgressBar, basicStatusRender) {
+ initNix();
+ initGC();
+
+ startProgressBar();
+ ASSERT_NE(dynamic_cast<ProgressBar *>(logger), nullptr);
+ ProgressBar & progressBar = dynamic_cast<ProgressBar &>(*logger);
+
+ Activity act(
+ progressBar,
+ lvlDebug,
+ actFileTransfer,
+ fmt("downloading '%s'", TEST_URL),
+ { "https://github.com/NixOS/nixpkgs/archive/master.tar.gz" }
+ );
+ act.progress(TEST_DONE, TEST_EXPECTED);
+ auto state = progressBar.state_.lock();
+ std::string const renderedStatus = progressBar.getStatus(*state);
+
+ ASSERT_EQ(renderedStatus, EXPECTED);
+ }
+}
diff --git a/tests/unit/meson.build b/tests/unit/meson.build
index c3eefeede..9f19e5fd9 100644
--- a/tests/unit/meson.build
+++ b/tests/unit/meson.build
@@ -249,3 +249,25 @@ test(
suite : 'check',
protocol : 'gtest',
)
+
+libmain_tester = executable(
+ 'liblixmain-tests',
+ files('libmain/progress-bar.cc'),
+ dependencies : [
+ liblixmain,
+ liblixexpr,
+ liblixutil,
+ liblixstore,
+ gtest,
+ boost,
+ ],
+ cpp_pch : cpp_pch,
+)
+
+test(
+ 'libmain-unit-tests',
+ libmain_tester,
+ args : tests_args,
+ suite : 'check',
+ protocol : 'gtest',
+)