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
This commit is contained in:
parent
c8fc26990e
commit
7e6542d511
3 changed files with 66 additions and 4 deletions
|
@ -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)
|
||||
{
|
||||
|
|
43
tests/unit/libmain/progress-bar.cc
Normal file
43
tests/unit/libmain/progress-bar.cc
Normal file
|
@ -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 autoStatus = progressBar.getStatus(*state);
|
||||
|
||||
ASSERT_EQ(autoStatus, EXPECTED);
|
||||
}
|
||||
}
|
|
@ -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',
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue