summaryrefslogtreecommitdiff
diff options
-rw-r--r--shutdown/SessionView.cpp6
-rw-r--r--tests/test_session_view.cpp153
2 files changed, 154 insertions, 5 deletions
diff --git a/shutdown/SessionView.cpp b/shutdown/SessionView.cpp
index 43f1640e2..b954fae14 100644
--- a/shutdown/SessionView.cpp
+++ b/shutdown/SessionView.cpp
@@ -205,6 +205,12 @@ void View::Populate()
button->activated.connect(sigc::mem_fun(manager_.get(), &Manager::Reboot));
AddButton(button);
}
+ else if (mode() == Mode::FULL)
+ {
+ auto* button = new Button(_("Logout"), "logout", NUX_TRACKER_LOCATION);
+ button->activated.connect(sigc::mem_fun(manager_.get(), &Manager::Logout));
+ AddButton(button);
+ }
}
}
diff --git a/tests/test_session_view.cpp b/tests/test_session_view.cpp
index 2213d3910..c52179ad5 100644
--- a/tests/test_session_view.cpp
+++ b/tests/test_session_view.cpp
@@ -30,11 +30,16 @@ namespace session
struct TestSessionView : testing::Test
{
+ TestSessionView()
+ : manager(std::make_shared<testing::NiceMock<MockManager>>())
+ , view(manager)
+ {}
+
struct ViewWrap : View
{
- ViewWrap() : View(std::make_shared<testing::NiceMock<MockManager>>()) {}
+ ViewWrap(Manager::Ptr const& manager) : View(manager) {}
- std::string GetTitle() const { return title_->GetText(); }
+ std::string GetTitle() const { return title_->IsVisible() ? title_->GetText() : ""; }
std::string GetSubTitle() const { return subtitle_->GetText(); }
std::list<Button*> GetButtons() const
@@ -47,22 +52,160 @@ struct TestSessionView : testing::Test
EXPECT_NE(session_button, nullptr);
if (!session_button)
- return buttons;
+ return std::list<Button*>();
buttons.push_back(session_button);
}
return buttons;
}
+
+ Button* GetButtonByLabel(std::string const& label) const
+ {
+ for (auto const& button : GetButtons())
+ {
+ if (button->label() == label)
+ return button;
+ }
+
+ return nullptr;
+ }
};
unity::Settings settings;
- ViewWrap button;
+ MockManager::Ptr manager;
+ ViewWrap view;
};
TEST_F(TestSessionView, Construct)
{
-
+ EXPECT_TRUE(view.closable());
+ EXPECT_FALSE(view.have_inhibitors());
+ EXPECT_EQ(view.mode(), View::Mode::FULL);
+}
+
+TEST_F(TestSessionView, RequestCloseOnBoundingAreaClick)
+{
+ bool request_close = false;
+ view.request_close.connect([&request_close] { request_close = true; });
+ view.GetBoundingArea()->mouse_click.emit(0, 0, 0, 0);
+ EXPECT_TRUE(request_close);
+}
+
+TEST_F(TestSessionView, ModeChange)
+{
+ view.mode = View::Mode::LOGOUT;
+ EXPECT_EQ(view.mode, View::Mode::LOGOUT);
+
+ view.mode = View::Mode::FULL;
+ EXPECT_EQ(view.mode, View::Mode::FULL);
+}
+
+TEST_F(TestSessionView, ModeChangeOnShutdownSupported)
+{
+ ON_CALL(*manager, CanShutdown()).WillByDefault(testing::Return(true));
+
+ view.mode = View::Mode::SHUTDOWN;
+ EXPECT_EQ(view.mode, View::Mode::SHUTDOWN);
+}
+
+TEST_F(TestSessionView, ModeChangeOnShutdownUnsupported)
+{
+ ON_CALL(*manager, CanShutdown()).WillByDefault(testing::Return(false));
+
+ view.mode = View::Mode::SHUTDOWN;
+ EXPECT_EQ(view.mode, View::Mode::LOGOUT);
+}
+
+TEST_F(TestSessionView, FullModeButtons)
+{
+ ON_CALL(*manager, CanShutdown()).WillByDefault(testing::Return(true));
+ ON_CALL(*manager, CanSuspend()).WillByDefault(testing::Return(true));
+ ON_CALL(*manager, CanHibernate()).WillByDefault(testing::Return(true));
+ view.mode.changed.emit(View::Mode::FULL);
+
+ EXPECT_EQ(view.GetButtonByLabel("Logout"), nullptr);
+ EXPECT_NE(view.GetButtonByLabel("Lock"), nullptr);
+ EXPECT_NE(view.GetButtonByLabel("Suspend"), nullptr);
+ EXPECT_NE(view.GetButtonByLabel("Hibernate"), nullptr);
+ EXPECT_NE(view.GetButtonByLabel("Shutdown"), nullptr);
+ EXPECT_NE(view.GetButtonByLabel("Restart"), nullptr);
+
+ ON_CALL(*manager, CanShutdown()).WillByDefault(testing::Return(false));
+ view.mode.changed.emit(View::Mode::FULL);
+
+ EXPECT_NE(view.GetButtonByLabel("Logout"), nullptr);
+ EXPECT_EQ(view.GetButtonByLabel("Shutdown"), nullptr);
+ EXPECT_EQ(view.GetButtonByLabel("Restart"), nullptr);
+
+ ON_CALL(*manager, CanSuspend()).WillByDefault(testing::Return(false));
+ view.mode.changed.emit(View::Mode::FULL);
+
+ EXPECT_EQ(view.GetButtonByLabel("Suspend"), nullptr);
+
+ ON_CALL(*manager, CanHibernate()).WillByDefault(testing::Return(false));
+ view.mode.changed.emit(View::Mode::FULL);
+
+ EXPECT_EQ(view.GetButtonByLabel("Hibernate"), nullptr);
+}
+
+TEST_F(TestSessionView, ShutdownModeButtons)
+{
+ ON_CALL(*manager, CanShutdown()).WillByDefault(testing::Return(true));
+ view.mode = View::Mode::SHUTDOWN;
+
+ EXPECT_EQ(view.GetButtons().size(), 2);
+ EXPECT_NE(view.GetButtonByLabel("Shutdown"), nullptr);
+ EXPECT_NE(view.GetButtonByLabel("Restart"), nullptr);
+}
+
+TEST_F(TestSessionView, LogoutModeButtons)
+{
+ view.mode = View::Mode::LOGOUT;
+
+ EXPECT_EQ(view.GetButtons().size(), 2);
+ EXPECT_NE(view.GetButtonByLabel("Logout"), nullptr);
+ EXPECT_NE(view.GetButtonByLabel("Lock"), nullptr);
+}
+
+TEST_F(TestSessionView, FullModeTitle)
+{
+ EXPECT_TRUE(view.GetTitle().empty());
+}
+
+TEST_F(TestSessionView, ShutdownModeTitle)
+{
+ ON_CALL(*manager, CanShutdown()).WillByDefault(testing::Return(true));
+ view.mode = View::Mode::SHUTDOWN;
+
+ EXPECT_EQ(view.GetTitle(), "Shut Down");
+}
+
+TEST_F(TestSessionView, LogoutModeTitle)
+{
+ view.mode = View::Mode::LOGOUT;
+
+ EXPECT_EQ(view.GetTitle(), "Log Out");
+}
+
+TEST_F(TestSessionView, ButtonsActivateRequestsHide)
+{
+ bool request_hide = false;
+ view.request_hide.connect([&request_hide] { request_hide = true; });
+
+ auto button = view.GetButtonByLabel("Lock");
+ button->activated.emit();
+
+ EXPECT_TRUE(request_hide);
+}
+
+TEST_F(TestSessionView, ButtonsActivateDeselectButton)
+{
+ auto button = view.GetButtonByLabel("Lock");
+ button->highlighted = true;
+ button->activated.emit();
+
+ EXPECT_FALSE(button->highlighted());
}