/* * Copyright 2013 Canonical Ltd. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License version 3, as published * by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranties of * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . * * Authors: * Charles Kerr */ #include #include "state-fixture.h" using namespace unity::indicator::datetime; typedef StateFixture ActionsFixture; TEST_F(ActionsFixture, ActionsExist) { EXPECT_TRUE(m_actions != nullptr); const char* names[] = { "desktop-header", "calendar", "set-location", "activate-planner", "activate-appointment", "activate-phone-settings", "activate-phone-clock-app", "activate-desktop-settings" }; for(const auto& name: names) { EXPECT_TRUE(g_action_group_has_action(m_actions->action_group(), name)); } } TEST_F(ActionsFixture, ActivateDesktopSettings) { const auto action_name = "activate-desktop-settings"; const auto expected_action = MockActions::OpenDesktopSettings; auto action_group = m_actions->action_group(); auto history = m_mock_actions->history(); EXPECT_EQ(0, history.size()); EXPECT_TRUE(g_action_group_has_action(action_group, action_name)); g_action_group_activate_action(action_group, action_name, nullptr); history = m_mock_actions->history(); EXPECT_EQ(1, history.size()); EXPECT_EQ(expected_action, history[0]); } TEST_F(ActionsFixture, ActivatePhoneSettings) { const auto action_name = "activate-phone-settings"; const auto expected_action = MockActions::OpenPhoneSettings; auto action_group = m_actions->action_group(); EXPECT_TRUE(m_mock_actions->history().empty()); EXPECT_TRUE(g_action_group_has_action(action_group, action_name)); g_action_group_activate_action(action_group, action_name, nullptr); auto history = m_mock_actions->history(); EXPECT_EQ(1, history.size()); EXPECT_EQ(expected_action, history[0]); } TEST_F(ActionsFixture, ActivatePhoneClockApp) { const auto action_name = "activate-phone-clock-app"; const auto expected_action = MockActions::OpenPhoneClockApp; auto action_group = m_actions->action_group(); EXPECT_TRUE(m_mock_actions->history().empty()); EXPECT_TRUE(g_action_group_has_action(action_group, action_name)); g_action_group_activate_action(action_group, action_name, nullptr); auto history = m_mock_actions->history(); EXPECT_EQ(1, history.size()); EXPECT_EQ(expected_action, history[0]); } TEST_F(ActionsFixture, ActivatePlanner) { const auto action_name = "activate-planner"; auto action_group = m_actions->action_group(); EXPECT_TRUE(m_mock_actions->history().empty()); EXPECT_TRUE(g_action_group_has_action(action_group, action_name)); const auto expected_action = MockActions::OpenPlanner; auto v = g_variant_new_int64(0); g_action_group_activate_action(action_group, action_name, v); auto history = m_mock_actions->history(); EXPECT_EQ(1, history.size()); EXPECT_EQ(expected_action, history[0]); } TEST_F(ActionsFixture, ActivatePlannerAt) { const auto action_name = "activate-planner"; auto action_group = m_actions->action_group(); EXPECT_TRUE(m_mock_actions->history().empty()); EXPECT_TRUE(g_action_group_has_action(action_group, action_name)); const auto now = DateTime::NowLocal(); auto v = g_variant_new_int64(now.to_unix()); g_action_group_activate_action(action_group, action_name, v); const auto a = MockActions::OpenPlannerAt; EXPECT_EQ(std::vector({a}), m_mock_actions->history()); EXPECT_EQ(now.to_unix(), m_mock_actions->date_time().to_unix()); } TEST_F(ActionsFixture, SetLocation) { const auto action_name = "set-location"; auto action_group = m_actions->action_group(); EXPECT_TRUE(m_mock_actions->history().empty()); EXPECT_TRUE(g_action_group_has_action(action_group, action_name)); auto v = g_variant_new_string("America/Chicago Oklahoma City"); g_action_group_activate_action(action_group, action_name, v); const auto expected_action = MockActions::SetLocation; ASSERT_EQ(1, m_mock_actions->history().size()); EXPECT_EQ(expected_action, m_mock_actions->history()[0]); EXPECT_EQ("America/Chicago", m_mock_actions->zone()); EXPECT_EQ("Oklahoma City", m_mock_actions->name()); } TEST_F(ActionsFixture, SetCalendarDate) { // confirm that such an action exists const auto action_name = "calendar"; auto action_group = m_actions->action_group(); EXPECT_TRUE(m_mock_actions->history().empty()); EXPECT_TRUE(g_action_group_has_action(action_group, action_name)); // pick an arbitrary DateTime... auto tmp = g_date_time_new_local(2010, 1, 2, 3, 4, 5); const auto now = DateTime(tmp); g_date_time_unref(tmp); // confirm that Planner.time gets changed to that date when we // activate the 'calendar' action with that date's time_t as the arg EXPECT_NE (now, m_state->planner->time.get()); auto v = g_variant_new_int64(now.to_unix()); g_action_group_activate_action (action_group, action_name, v); EXPECT_EQ (now, m_state->planner->time.get()); } TEST_F(ActionsFixture, OpenAppointment) { Appointment appt; appt.uid = "some arbitrary uid"; appt.url = "http://www.canonical.com/"; m_state->planner->upcoming.set(std::vector({appt})); const auto action_name = "activate-appointment"; auto action_group = m_actions->action_group(); EXPECT_TRUE(m_mock_actions->history().empty()); EXPECT_TRUE(g_action_group_has_action(action_group, action_name)); auto v = g_variant_new_string(appt.uid.c_str()); g_action_group_activate_action(action_group, action_name, v); const auto a = MockActions::OpenAppointment; ASSERT_EQ(1, m_mock_actions->history().size()); ASSERT_EQ(a, m_mock_actions->history()[0]); EXPECT_EQ(appt.url, m_mock_actions->url()); }