diff options
| -rw-r--r-- | shutdown/SessionView.cpp | 6 | ||||
| -rw-r--r-- | tests/test_session_view.cpp | 153 |
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()); } |
