summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/en/aptitude.xml25
-rw-r--r--src/cmdline/cmdline_progress_display.cc100
-rw-r--r--src/cmdline/cmdline_progress_display.h24
-rw-r--r--src/cmdline/cmdline_search_progress.cc6
-rw-r--r--src/cmdline/mocks/cmdline_progress_display.h2
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/test_cmdline_progress_display.cc492
-rw-r--r--tests/test_cmdline_search_progress.cc17
8 files changed, 596 insertions, 71 deletions
diff --git a/doc/en/aptitude.xml b/doc/en/aptitude.xml
index 68cdb0ee..89a2404b 100644
--- a/doc/en/aptitude.xml
+++ b/doc/en/aptitude.xml
@@ -10754,6 +10754,31 @@ e: Examine !: Apply .: Next ,: Previous</screen>
</seg>
</seglistitem>
+ <seglistitem id='configCmdLine-Progress-Percent-On-Right'>
+ <seg><literal>Aptitude::CmdLine::Progress::Percent-On-Right</literal></seg>
+ <seg><literal>false</literal></seg>
+ <seg>
+ This option controls whether command-line progress
+ indicators display the percentage on the left-hand
+ side of the screen, in the same style as &apt-get;, or
+ on the right-hand side (the default). This option
+ does not affect download progress indicators.
+ </seg>
+ </seglistitem>
+
+ <seglistitem id='configCmdLine-Progress-Retain-Completed'>
+ <seg><literal>Aptitude::CmdLine::Progress::Retain-Completed</literal></seg>
+ <seg><literal>false</literal></seg>
+ <seg>
+ If this value is <literal>false</literal>, then
+ command-line progress indicators will be deleted and
+ overwritten once the task they represent is completed.
+ If it is <literal>true</literal>, then they will be
+ left on the terminal. This option does not affect
+ download progress indicators.
+ </seg>
+ </seglistitem>
+
<seglistitem id='configCmdLine-Request-Strictness'>
<seg><literal>Aptitude::CmdLine::Request-Strictness</literal></seg>
<seg><literal>10000</literal></seg>
diff --git a/src/cmdline/cmdline_progress_display.cc b/src/cmdline/cmdline_progress_display.cc
index 106053a8..6485d682 100644
--- a/src/cmdline/cmdline_progress_display.cc
+++ b/src/cmdline/cmdline_progress_display.cc
@@ -22,8 +22,14 @@
#include "transient_message.h"
-#include <generic/util/progress_info.h>
+#include <aptitude.h>
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <generic/apt/apt.h>
+#include <generic/apt/config_signal.h>
+#include <generic/util/progress_info.h>
// System includes:
#include <boost/format.hpp>
@@ -53,25 +59,41 @@ namespace aptitude
class progress_display_impl : public progress_display
{
+ // Set to "true" when done() is called, and to "false" when
+ // any other method is called. Used to suppress calls to
+ // done() when a "Done" message is already being displayed.
+ bool is_done;
+
// The last progress that was displayed; we always update the
// display if the mode or the message changed.
progress_info last_progress;
shared_ptr<transient_message> message;
+ bool old_style_percentage;
+ bool retain_completed;
+
// Using the current time and the progress information to
// display, determine if an update is required.
bool should_update(const progress_info &progress) const;
public:
- progress_display_impl(const shared_ptr<transient_message> &_message);
+ progress_display_impl(const shared_ptr<transient_message> &_message,
+ bool _old_style_percentage,
+ bool _retain_completed);
void set_progress(const progress_info &progress);
+ void done();
};
- progress_display_impl::progress_display_impl(const shared_ptr<transient_message> &_message)
- : last_progress(progress_info::none()),
- message(_message)
+ progress_display_impl::progress_display_impl(const shared_ptr<transient_message> &_message,
+ bool _old_style_percentage,
+ bool _retain_completed)
+ : is_done(false),
+ last_progress(progress_info::none()),
+ message(_message),
+ old_style_percentage(_old_style_percentage),
+ retain_completed(_retain_completed)
{
}
@@ -101,14 +123,23 @@ namespace aptitude
break;
case progress_type_pulse:
- message->set_text( (wformat(L"[----] %s")
- % transcode(progress.get_progress_status())).str() );
+ if(old_style_percentage)
+ message->set_text( (wformat(L"%s...")
+ % transcode(progress.get_progress_status())).str() );
+ else
+ message->set_text( (wformat(L"[----] %s")
+ % transcode(progress.get_progress_status())).str() );
break;
case progress_type_bar:
- message->set_text( (wformat(L"[%3d%%] %s")
- % progress.get_progress_percent_int()
- % transcode(progress.get_progress_status())).str() );
+ if(old_style_percentage)
+ message->set_text( (wformat(L"%s... %d%%")
+ % transcode(progress.get_progress_status())
+ % progress.get_progress_percent_int()).str() );
+ else
+ message->set_text( (wformat(L"[%3d%%] %s")
+ % progress.get_progress_percent_int()
+ % transcode(progress.get_progress_status())).str() );
break;
default:
@@ -116,9 +147,40 @@ namespace aptitude
break;
}
+ is_done = false;
last_progress = progress;
}
}
+
+ void progress_display_impl::done()
+ {
+ if(last_progress.get_type() != progress_type_none &&
+ !is_done)
+ {
+ if(retain_completed)
+ {
+ const std::wstring msg =
+ transcode(last_progress.get_progress_status());
+ if(old_style_percentage)
+ message->set_text( (wformat(L"%s... %s")
+ % msg
+ % transcode(_("Done"))).str() );
+ else
+ // ForTranslators: the string replacing "DONE" will
+ // be truncated or padded to 4 characters.
+ message->set_text( (wformat(L"[%4s] %s")
+ % transcode(_("DONE"))
+ % msg).str() );
+
+ message->preserve_and_advance();
+ }
+ else
+ message->set_text(L"");
+
+ last_progress = progress_info::none();
+ is_done = true;
+ }
+ }
}
progress_display::~progress_display()
@@ -126,9 +188,13 @@ namespace aptitude
}
shared_ptr<progress_display>
- create_progress_display(const shared_ptr<transient_message> &message)
+ create_progress_display(const shared_ptr<transient_message> &message,
+ bool old_style_percentage,
+ bool retain_completed)
{
- return make_shared<progress_display_impl>(message);
+ return make_shared<progress_display_impl>(message,
+ old_style_percentage,
+ retain_completed);
}
shared_ptr<progress_display>
@@ -138,7 +204,15 @@ namespace aptitude
const shared_ptr<transient_message> message =
create_transient_message(term, term_locale);
- return create_progress_display(message);
+ const bool old_style_percentage =
+ aptcfg->FindB(PACKAGE "::CmdLine::Progress::Percent-On-Right", false);
+
+ const bool retain_completed =
+ aptcfg->FindB(PACKAGE "::CmdLine::Progress::Retain-Completed", false);
+
+ return create_progress_display(message,
+ old_style_percentage,
+ retain_completed);
}
}
}
diff --git a/src/cmdline/cmdline_progress_display.h b/src/cmdline/cmdline_progress_display.h
index 370b08b2..74339af4 100644
--- a/src/cmdline/cmdline_progress_display.h
+++ b/src/cmdline/cmdline_progress_display.h
@@ -55,11 +55,31 @@ namespace aptitude
* \param progress The new progress information to display.
*/
virtual void set_progress(const aptitude::util::progress_info &progress) = 0;
+
+ /** \brief Mark the currently displayed progress as done.
+ *
+ * Depending on the current configuration, this will either
+ * blank the output line or display a "done" message and
+ * advance to the next line.
+ */
+ virtual void done() = 0;
};
- /** \brief Create a blank progress display. */
+ /** \brief Create a blank progress display.
+ *
+ * \param message The message object used to display the progress
+ * message.
+ *
+ * \param old_style_percentage The output mode. Either "[NNN%] msg"
+ * (new) or "msg... NNN%" (old).
+ *
+ * \param retain_completed If \b true, completed messages will be
+ * retained instead of being deleted.
+ */
boost::shared_ptr<progress_display>
- create_progress_display(const boost::shared_ptr<transient_message> &message);
+ create_progress_display(const boost::shared_ptr<transient_message> &message,
+ bool old_style_percentage,
+ bool retain_completed);
/** \brief Create a blank progress display.
*
diff --git a/src/cmdline/cmdline_search_progress.cc b/src/cmdline/cmdline_search_progress.cc
index 6765262f..d53b0b66 100644
--- a/src/cmdline/cmdline_search_progress.cc
+++ b/src/cmdline/cmdline_search_progress.cc
@@ -64,6 +64,7 @@ namespace aptitude
}
void set_progress(const progress_info &info);
+ void done();
};
void search_progress::set_progress(const progress_info &info)
@@ -100,6 +101,11 @@ namespace aptitude
throttle->reset_timer();
}
+
+ void search_progress::done()
+ {
+ display->done();
+ }
}
shared_ptr<progress_display>
diff --git a/src/cmdline/mocks/cmdline_progress_display.h b/src/cmdline/mocks/cmdline_progress_display.h
index e7087e43..3bc769b3 100644
--- a/src/cmdline/mocks/cmdline_progress_display.h
+++ b/src/cmdline/mocks/cmdline_progress_display.h
@@ -38,6 +38,8 @@ namespace aptitude
{
public:
MOCK_METHOD1(set_progress, void(const aptitude::util::progress_info &));
+
+ MOCK_METHOD0(done, void());
};
}
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 28d501bf..d3ff647c 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -8,6 +8,7 @@ LDADD = $(top_builddir)/src/loggers.o \
$(top_builddir)/src/gtk/controllers/libgtk-controllers.a \
$(top_builddir)/src/gtk/views/libgtk-views.a \
$(top_builddir)/src/generic/apt/matching/libgeneric-matching.a \
+$(top_builddir)/src/cmdline/libcmdline.a \
$(top_builddir)/src/generic/apt/libgeneric-apt.a \
$(top_builddir)/src/generic/apt/matching/libgeneric-matching.a \
$(top_builddir)/src/generic/problemresolver/libgeneric-problemresolver.a \
diff --git a/tests/test_cmdline_progress_display.cc b/tests/test_cmdline_progress_display.cc
index d3c2cf16..682f834b 100644
--- a/tests/test_cmdline_progress_display.cc
+++ b/tests/test_cmdline_progress_display.cc
@@ -38,26 +38,80 @@ using aptitude::cmdline::progress_display;
using aptitude::util::progress_info;
using boost::make_shared;
using boost::shared_ptr;
+using testing::AnyNumber;
+using testing::AtMost;
+using testing::Expectation;
+using testing::HasSubstr;
using testing::StrEq;
using testing::StrNe;
-using testing::Test;
+using testing::TestWithParam;
+using testing::Values;
using testing::_;
namespace mocks = aptitude::cmdline::mocks;
namespace
{
- struct CmdlineProgressDisplayTest : public Test
+ class CmdlineProgressDisplayParams
+ {
+ bool old_style_percentage;
+ bool retain_completed;
+
+ public:
+ CmdlineProgressDisplayParams(bool _old_style_percentage,
+ bool _retain_completed)
+ : old_style_percentage(_old_style_percentage),
+ retain_completed(_retain_completed)
+ {
+ }
+
+ bool get_old_style_percentage() const { return old_style_percentage; }
+ bool get_retain_completed() const { return retain_completed; }
+ };
+
+ std::ostream &operator<<(std::ostream &out,
+ const CmdlineProgressDisplayParams &params)
+ {
+ return out << "("
+ << "old_style_percentage = "
+ << (params.get_old_style_percentage() ? "true" : "false")
+ << ", "
+ << "retain_completed = "
+ << (params.get_retain_completed() ? "true" : "false")
+ << ")";
+ }
+
+ struct CmdlineProgressDisplayTest
+ : public TestWithParam<CmdlineProgressDisplayParams>
{
shared_ptr<mocks::transient_message> msg;
shared_ptr<progress_display> progress;
+ bool get_old_style_percentage() const
+ {
+ return GetParam().get_old_style_percentage();
+ }
+
+ bool get_retain_completed() const
+ {
+ return GetParam().get_retain_completed();
+ }
+
CmdlineProgressDisplayTest()
- : msg(make_shared<mocks::transient_message>()),
- progress(create_progress_display(msg))
+ : msg(make_shared<mocks::transient_message>())
{
}
+ // It's not documented anywhere, but from the examples and my
+ // intuition about how TEST_P is probably implemented, I bet that
+ // we can't access GetParm() until SetUp:
+ void SetUp()
+ {
+ progress = create_progress_display(msg,
+ get_old_style_percentage(),
+ get_retain_completed());
+ }
+
// Define shorter names for the progress_info constructors.
progress_info none()
{
@@ -76,16 +130,30 @@ namespace
};
}
-TEST_F(CmdlineProgressDisplayTest, InitialShowNoneHasNoEffect)
+#define EXPECT_NO_RETAIN_COMPLETED() \
+ EXPECT_CALL(*msg, preserve_and_advance()).Times(0)
+
+#define MAYBE_EXPECT_RETAIN_COMPLETED() \
+ EXPECT_CALL(*msg, preserve_and_advance()) \
+ .Times(get_retain_completed() ? 1 : 0)
+
+#define MAYBE_EXPECT_CLEAR_COMPLETED() \
+ EXPECT_CALL(*msg, set_text(StrEq(L""))) \
+ .Times(get_retain_completed() ? 0 : 1)
+
+TEST_P(CmdlineProgressDisplayTest, InitialShowNoneHasNoEffect)
{
EXPECT_CALL(*msg, set_text(_))
.Times(0);
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(none());
}
-TEST_F(CmdlineProgressDisplayTest, ShowNoneAfterPulse)
+TEST_P(CmdlineProgressDisplayTest, ShowNoneAfterPulse)
{
+ EXPECT_NO_RETAIN_COMPLETED();
+
EXPECT_CALL(*msg, set_text(StrNe(L"")));
EXPECT_CALL(*msg, set_text(StrEq(L"")));
@@ -93,188 +161,500 @@ TEST_F(CmdlineProgressDisplayTest, ShowNoneAfterPulse)
progress->set_progress(none());
}
-TEST_F(CmdlineProgressDisplayTest, ShowPulse)
+TEST_P(CmdlineProgressDisplayTest, ShowPulse)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[----] Hello world")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Hello world...")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[----] Hello world")));
+
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(pulse("Hello world"));
}
-TEST_F(CmdlineProgressDisplayTest, ShowBarNegative)
+TEST_P(CmdlineProgressDisplayTest, ShowBarNegative)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 0%] Before the beginning of the world")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Before the beginning of the world... 0%")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 0%] Before the beginning of the world")));
+
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(-1, "Before the beginning of the world"));
}
-TEST_F(CmdlineProgressDisplayTest, ShowBarZero)
+TEST_P(CmdlineProgressDisplayTest, ShowBarZero)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 0%] Beginning world")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Beginning world... 0%")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 0%] Beginning world")));
+
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(0, "Beginning world"));
}
-TEST_F(CmdlineProgressDisplayTest, ShowBarRoundUp)
+TEST_P(CmdlineProgressDisplayTest, ShowBarRoundUp)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 50%] Almost middle world")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Almost middle world... 50%")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 50%] Almost middle world")));
+
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(0.499, "Almost middle world"));
}
-TEST_F(CmdlineProgressDisplayTest, ShowBarRoundUpInMiddle)
+TEST_P(CmdlineProgressDisplayTest, ShowBarRoundUpInMiddle)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 50%] Almost middle world")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Almost middle world... 50%")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 50%] Almost middle world")));
+
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(0.495, "Almost middle world"));
}
-TEST_F(CmdlineProgressDisplayTest, ShowBarMiddleExact)
+TEST_P(CmdlineProgressDisplayTest, ShowBarMiddleExact)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 50%] Middle world")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Middle world... 50%")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 50%] Middle world")));
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(0.50, "Middle world"));
}
-TEST_F(CmdlineProgressDisplayTest, ShowBarRoundDown)
+TEST_P(CmdlineProgressDisplayTest, ShowBarRoundDown)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 50%] Just past middle world")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Just past middle world... 50%")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 50%] Just past middle world")));
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(0.501, "Just past middle world"));
}
-TEST_F(CmdlineProgressDisplayTest, ShowBarComplete)
+TEST_P(CmdlineProgressDisplayTest, ShowBarComplete)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[100%] Finished world")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Finished world... 100%")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[100%] Finished world")));
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(1, "Finished world"));
}
-TEST_F(CmdlineProgressDisplayTest, FractionTooLarge)
+TEST_P(CmdlineProgressDisplayTest, FractionTooLarge)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[100%] Past the end of the world")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Past the end of the world... 100%")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[100%] Past the end of the world")));
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(100, "Past the end of the world"));
}
-TEST_F(CmdlineProgressDisplayTest, SuppressDuplicateNones)
+TEST_P(CmdlineProgressDisplayTest, SuppressDuplicateNones)
{
EXPECT_CALL(*msg, set_text(StrNe(L"")));
EXPECT_CALL(*msg, set_text(StrEq(L"")));
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(pulse("Irrelevant data"));
progress->set_progress(none());
progress->set_progress(none());
}
-TEST_F(CmdlineProgressDisplayTest, PulseSuppressesDuplicateMessage)
+TEST_P(CmdlineProgressDisplayTest, PulseSuppressesDuplicateMessage)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[----] Some message")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Some message...")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[----] Some message")));
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(pulse("Some message"));
progress->set_progress(pulse("Some message"));
}
-TEST_F(CmdlineProgressDisplayTest, BarSuppressesDuplicateSettings)
+TEST_P(CmdlineProgressDisplayTest, BarSuppressesDuplicateSettings)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 66%] Some message")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Some message... 66%")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 66%] Some message")));
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(0.66, "Some message"));
progress->set_progress(bar(0.66, "Some message"));
}
-TEST_F(CmdlineProgressDisplayTest, BarSuppressesAlmostDuplicateSettings)
+TEST_P(CmdlineProgressDisplayTest, BarSuppressesAlmostDuplicateSettings)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 66%] Some message")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Some message... 66%")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 66%] Some message")));
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(0.661, "Some message"));
progress->set_progress(bar(0.662, "Some message"));
}
-TEST_F(CmdlineProgressDisplayTest, CanSwitchFromNoneToPulse)
+TEST_P(CmdlineProgressDisplayTest, CanSwitchFromNoneToPulse)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[----] Pulse")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Pulse...")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[----] Pulse")));
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(none());
progress->set_progress(pulse("Pulse"));
}
-TEST_F(CmdlineProgressDisplayTest, CanSwitchFromNoneToEmptyBar)
+TEST_P(CmdlineProgressDisplayTest, CanSwitchFromNoneToEmptyBar)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 0%] ")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"... 0%")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 0%] ")));
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(none());
progress->set_progress(bar(0, ""));
}
-TEST_F(CmdlineProgressDisplayTest, CanSwitchFromNoneToNonEmptyBar)
+TEST_P(CmdlineProgressDisplayTest, CanSwitchFromNoneToNonEmptyBar)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 33%] Pelagic argosy")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Pelagic argosy... 33%")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 33%] Pelagic argosy")));
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(none());
progress->set_progress(bar(0.33, "Pelagic argosy"));
}
-TEST_F(CmdlineProgressDisplayTest, CanSwitchFromPulseToNone)
+TEST_P(CmdlineProgressDisplayTest, CanSwitchFromPulseToNone)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[----] Beware the leopard")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Beware the leopard...")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[----] Beware the leopard")));
EXPECT_CALL(*msg, set_text(StrEq(L"")));
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(pulse("Beware the leopard"));
progress->set_progress(none());
}
-TEST_F(CmdlineProgressDisplayTest, CanSwitchFromPulseToZeroBar)
+TEST_P(CmdlineProgressDisplayTest, CanSwitchFromPulseToZeroBar)
{
// Check that it doesn't get confused and think that the second
// setting is identical to the first.
- EXPECT_CALL(*msg, set_text(StrEq(L"[----] Wobbly Weasel"))); // Future Ubuntu codename?
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 0%] Wobbly Weasel")));
+ if(get_old_style_percentage())
+ {
+ EXPECT_CALL(*msg, set_text(StrEq(L"Wobbly Weasel...")));
+ EXPECT_CALL(*msg, set_text(StrEq(L"Wobbly Weasel... 0%")));
+ }
+ else
+ {
+ EXPECT_CALL(*msg, set_text(StrEq(L"[----] Wobbly Weasel")));
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 0%] Wobbly Weasel")));
+ }
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(pulse("Wobbly Weasel"));
progress->set_progress(bar(0, "Wobbly Weasel"));
}
-TEST_F(CmdlineProgressDisplayTest, CanSwitchFromZeroBarToNone)
+TEST_P(CmdlineProgressDisplayTest, CanSwitchFromZeroBarToNone)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 0%] Bar None")));
- EXPECT_CALL(*msg, set_text(StrEq(L"")));
+ if(get_old_style_percentage())
+ {
+ EXPECT_CALL(*msg, set_text(StrEq(L"Bar None... 0%")));
+ EXPECT_CALL(*msg, set_text(StrEq(L"")));
+ }
+ else
+ {
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 0%] Bar None")));
+ EXPECT_CALL(*msg, set_text(StrEq(L"")));
+ }
+
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(0, "Bar None"));
progress->set_progress(none());
}
-TEST_F(CmdlineProgressDisplayTest, CanSwitchFromNonZeroBarToNone)
+TEST_P(CmdlineProgressDisplayTest, CanSwitchFromNonZeroBarToNone)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 21%] Albatross")));
+ if(get_old_style_percentage())
+ EXPECT_CALL(*msg, set_text(StrEq(L"Albatross... 21%")));
+ else
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 21%] Albatross")));
+
EXPECT_CALL(*msg, set_text(StrEq(L"")));
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(0.21, "Albatross"));
progress->set_progress(none());
}
-TEST_F(CmdlineProgressDisplayTest, CanSwitchFromZeroBarToPulse)
+TEST_P(CmdlineProgressDisplayTest, CanSwitchFromZeroBarToPulse)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 0%] All I've got is this bloody albatross")));
- EXPECT_CALL(*msg, set_text(StrEq(L"[----] All I've got is this bloody albatross")));
+ if(get_old_style_percentage())
+ {
+ EXPECT_CALL(*msg, set_text(StrEq(L"All I've got is this bloody albatross... 0%")));
+ EXPECT_CALL(*msg, set_text(StrEq(L"All I've got is this bloody albatross...")));
+ }
+ else
+ {
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 0%] All I've got is this bloody albatross")));
+ EXPECT_CALL(*msg, set_text(StrEq(L"[----] All I've got is this bloody albatross")));
+ }
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(0, "All I've got is this bloody albatross"));
progress->set_progress(pulse("All I've got is this bloody albatross"));
}
-TEST_F(CmdlineProgressDisplayTest, CanSwitchFromNonZeroBarToPulse)
+TEST_P(CmdlineProgressDisplayTest, CanSwitchFromNonZeroBarToPulse)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 11%] Bop")));
- EXPECT_CALL(*msg, set_text(StrEq(L"[----] Bop")));
+ if(get_old_style_percentage())
+ {
+ EXPECT_CALL(*msg, set_text(StrEq(L"Bop... 11%")));
+ EXPECT_CALL(*msg, set_text(StrEq(L"Bop...")));
+ }
+ else
+ {
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 11%] Bop")));
+ EXPECT_CALL(*msg, set_text(StrEq(L"[----] Bop")));
+ }
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(0.11, "Bop"));
progress->set_progress(pulse("Bop"));
}
-TEST_F(CmdlineProgressDisplayTest, CanSwitchFromNonZeroBarToDifferentPulse)
+TEST_P(CmdlineProgressDisplayTest, CanSwitchFromNonZeroBarToDifferentPulse)
{
- EXPECT_CALL(*msg, set_text(StrEq(L"[ 11%] Zip")));
- EXPECT_CALL(*msg, set_text(StrEq(L"[----] Bop")));
+ if(get_old_style_percentage())
+ {
+ EXPECT_CALL(*msg, set_text(StrEq(L"Zip... 11%")));
+ EXPECT_CALL(*msg, set_text(StrEq(L"Bop...")));
+ }
+ else
+ {
+ EXPECT_CALL(*msg, set_text(StrEq(L"[ 11%] Zip")));
+ EXPECT_CALL(*msg, set_text(StrEq(L"[----] Bop")));
+ }
+ EXPECT_NO_RETAIN_COMPLETED();
progress->set_progress(bar(0.11, "Zip"));
progress->set_progress(pulse("Bop"));
}
+
+TEST_P(CmdlineProgressDisplayTest, DoneAfterNoneHasNoEffect)
+{
+ // This behavior is tested elsewhere:
+ EXPECT_CALL(*msg, set_text(StrEq(L"")))
+ .Times(AtMost(1));
+
+ EXPECT_NO_RETAIN_COMPLETED();
+
+ progress->set_progress(none());
+ progress->done();
+ // Test multiple done()s too.
+ progress->done();
+ progress->done();
+}
+
+TEST_P(CmdlineProgressDisplayTest, DoneAfterPulse)
+{
+ // Expect one call to set_text() up-front, to set up the pre-done
+ // display.
+ Expectation text_set;
+ if(get_old_style_percentage())
+ text_set = EXPECT_CALL(*msg, set_text(StrEq(L"Marvelous Monkey...")));
+ else
+ text_set = EXPECT_CALL(*msg, set_text(StrEq(L"[----] Marvelous Monkey")));
+
+ Expectation maybe_done = text_set;
+
+ // First, we should get a Done if we're retaining completed tasks.
+ if(get_retain_completed())
+ {
+ if(get_old_style_percentage())
+ maybe_done =
+ EXPECT_CALL(*msg, set_text(StrEq(L"Marvelous Monkey... Done")))
+ .After(text_set);
+ else
+ maybe_done =
+ EXPECT_CALL(*msg, set_text(StrEq(L"[DONE] Marvelous Monkey")))
+ .After(text_set);
+ }
+
+ // Next, we should get a call to preserve_and_advance(), or a call
+ // to clear the message if that's disabled.
+ MAYBE_EXPECT_RETAIN_COMPLETED()
+ .After(text_set);
+ MAYBE_EXPECT_CLEAR_COMPLETED()
+ .After(text_set);
+
+ progress->set_progress(pulse("Marvelous Monkey"));
+ progress->done();
+}
+
+TEST_P(CmdlineProgressDisplayTest, DoneAfterBar)
+{
+ // Expect one call to set_text() up-front, to set up the pre-done display.
+ Expectation text_set;
+
+ if(get_old_style_percentage())
+ text_set = EXPECT_CALL(*msg, set_text(StrEq(L"Ack... 98%")));
+ else
+ text_set = EXPECT_CALL(*msg, set_text(StrEq(L"[ 98%] Ack")));
+
+ Expectation maybe_done = text_set;
+
+ // First, we should get a Done if we're retaining completed tasks.
+ if(get_retain_completed())
+ {
+ if(get_old_style_percentage())
+ maybe_done =
+ EXPECT_CALL(*msg, set_text(StrEq(L"Ack... Done")))
+ .After(text_set);
+ else
+ maybe_done =
+ EXPECT_CALL(*msg, set_text(StrEq(L"[DONE] Ack")))
+ .After(text_set);
+ }
+
+ // Next, we should get a call to preserve_and_advance(), or a call
+ // to clear the message if that's disabled.
+ MAYBE_EXPECT_RETAIN_COMPLETED()
+ .After(maybe_done);
+ MAYBE_EXPECT_CLEAR_COMPLETED()
+ .After(maybe_done);
+
+ progress->set_progress(bar(0.98, "Ack"));
+ progress->done();
+}
+
+TEST_P(CmdlineProgressDisplayTest, DoneAfterDone)
+{
+ // This test is exactly identical to the pulse() test, except that
+ // we invoke done() twice. The point is that the second done() has
+ // no effect.
+
+
+ // Expect one call to set_text() up-front, to set up the pre-done
+ // display.
+ Expectation text_set;
+ if(get_old_style_percentage())
+ text_set = EXPECT_CALL(*msg, set_text(StrEq(L"Marvelous Monkey...")));
+ else
+ text_set = EXPECT_CALL(*msg, set_text(StrEq(L"[----] Marvelous Monkey")));
+
+ Expectation maybe_done = text_set;
+
+ // First, we should get a Done if we're retaining completed tasks.
+ if(get_retain_completed())
+ {
+ if(get_old_style_percentage())
+ maybe_done =
+ EXPECT_CALL(*msg, set_text(StrEq(L"Marvelous Monkey... Done")))
+ .After(text_set);
+ else
+ maybe_done =
+ EXPECT_CALL(*msg, set_text(StrEq(L"[DONE] Marvelous Monkey")))
+ .After(text_set);
+ }
+
+ // Next, we should get a call to preserve_and_advance(), or a call
+ // to clear the message if that's disabled.
+ MAYBE_EXPECT_RETAIN_COMPLETED()
+ .After(text_set);
+ MAYBE_EXPECT_CLEAR_COMPLETED()
+ .After(text_set);
+
+ progress->set_progress(pulse("Marvelous Monkey"));
+ progress->done();
+ progress->done();
+}
+
+TEST_P(CmdlineProgressDisplayTest, NoneAfterDone)
+{
+ // This test is exactly identical to the pulse() test, except that
+ // we send none() after invoking done(). The point is that the
+ // none() has no effect even though the previously set progress
+ // value was not none().
+
+
+ // Expect one call to set_text() up-front, to set up the pre-done
+ // display.
+ Expectation text_set;
+ if(get_old_style_percentage())
+ text_set = EXPECT_CALL(*msg, set_text(StrEq(L"Marvelous Monkey...")));
+ else
+ text_set = EXPECT_CALL(*msg, set_text(StrEq(L"[----] Marvelous Monkey")));
+
+ Expectation maybe_done = text_set;
+
+ // First, we should get a Done if we're retaining completed tasks.
+ if(get_retain_completed())
+ {
+ if(get_old_style_percentage())
+ maybe_done =
+ EXPECT_CALL(*msg, set_text(StrEq(L"Marvelous Monkey... Done")))
+ .After(text_set);
+ else
+ maybe_done =
+ EXPECT_CALL(*msg, set_text(StrEq(L"[DONE] Marvelous Monkey")))
+ .After(text_set);
+ }
+
+ // Next, we should get a call to preserve_and_advance(), or a call
+ // to clear the message if that's disabled.
+ MAYBE_EXPECT_RETAIN_COMPLETED()
+ .After(text_set);
+ MAYBE_EXPECT_CLEAR_COMPLETED()
+ .After(text_set);
+
+ progress->set_progress(pulse("Marvelous Monkey"));
+ progress->done();
+ progress->set_progress(none());
+ // See what happens if a few more none()s are set.
+ progress->set_progress(none());
+ progress->set_progress(none());
+}
+
+INSTANTIATE_TEST_CASE_P(CmdlineProgressDisplayTestOldStyleAndRetainCompleted,
+ CmdlineProgressDisplayTest,
+ Values(CmdlineProgressDisplayParams(true, true)));
+
+INSTANTIATE_TEST_CASE_P(CmdlineProgressDisplayTestOldStyleAndNoRetainCompleted,
+ CmdlineProgressDisplayTest,
+ Values(CmdlineProgressDisplayParams(true, false)));
+
+INSTANTIATE_TEST_CASE_P(CmdlineProgressDisplayTestNewStyleAndRetainCompleted,
+ CmdlineProgressDisplayTest,
+ Values(CmdlineProgressDisplayParams(false, true)));
+
+INSTANTIATE_TEST_CASE_P(CmdlineProgressDisplayTestNewStyleAndNoRetainCompleted,
+ CmdlineProgressDisplayTest,
+ Values(CmdlineProgressDisplayParams(false, false)));
diff --git a/tests/test_cmdline_search_progress.cc b/tests/test_cmdline_search_progress.cc
index 24749e35..0f868e5b 100644
--- a/tests/test_cmdline_search_progress.cc
+++ b/tests/test_cmdline_search_progress.cc
@@ -216,3 +216,20 @@ TEST_F(CmdlineSearchProgressTest, ThrottledProgressBar)
search_progress->set_progress(info);
}
+
+TEST_F(CmdlineSearchProgressTest, Done)
+{
+ never_throttle();
+ EXPECT_CALL(*progress_display, done());
+
+ search_progress->done();
+}
+
+// Test that Done ignores throttling.
+TEST_F(CmdlineSearchProgressTest, DoneThrottled)
+{
+ always_throttle();
+ EXPECT_CALL(*progress_display, done());
+
+ search_progress->done();
+}