aboutsummaryrefslogtreecommitdiff
path: root/tests/unit
diff options
context:
space:
mode:
authorQyriad <qyriad@qyriad.me>2024-06-19 22:12:24 -0600
committerQyriad <qyriad@qyriad.me>2024-06-20 13:56:53 -0600
commitfd250c51ed14132d79eb1329a4e679d41174e5b8 (patch)
treecc972149df96537cac32c88c1818d2fe8a1bb824 /tests/unit
parente44dcd63c4d96807536cdcf2afb688a537cce9be (diff)
add a basic libmain test for the progress bar rendering
Hooray for leaky abstraction allowing us to test this particular part of the render pipeline. Change-Id: Ie0f251ff874f63324e6a9c6388b84ec6507eeae2
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/libmain/progress-bar.cc43
-rw-r--r--tests/unit/meson.build22
2 files changed, 65 insertions, 0 deletions
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',
+)