84
87
static constexpr char const * HINT_TIMEOUT {"x-canonical-snap-decisions-timeout"};
89
static constexpr char const * AS_BUSNAME {"org.freedesktop.Accounts"};
90
static constexpr char const * AS_INTERFACE {"com.ubuntu.touch.AccountsService.Sound"};
91
static constexpr char const * PROP_OTHER_VIBRATIONS {"OtherVibrate"};
92
static constexpr char const * PROP_SILENT_MODE {"SilentMode"};
87
95
GDBusConnection * system_bus = nullptr;
88
96
GDBusConnection * session_bus = nullptr;
89
97
DbusTestService * service = nullptr;
98
DbusTestDbusMock * as_mock = nullptr;
90
99
DbusTestDbusMock * notify_mock = nullptr;
91
100
DbusTestDbusMock * powerd_mock = nullptr;
92
101
DbusTestDbusMock * screen_mock = nullptr;
93
102
DbusTestDbusMock * haptic_mock = nullptr;
103
DbusTestDbusMockObject * as_obj = nullptr;
94
104
DbusTestDbusMockObject * notify_obj = nullptr;
95
105
DbusTestDbusMockObject * powerd_obj = nullptr;
96
106
DbusTestDbusMockObject * screen_obj = nullptr;
116
126
service = dbus_test_service_new(nullptr);
129
/// Add the AccountsService mock
132
as_mock = dbus_test_dbus_mock_new(AS_BUSNAME);
133
auto as_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid());
134
as_obj = dbus_test_dbus_mock_get_object(as_mock,
139
g_assert_no_error(error);
142
dbus_test_dbus_mock_object_add_property(as_mock,
145
G_VARIANT_TYPE_BOOLEAN,
146
g_variant_new_boolean(false),
148
g_assert_no_error(error);
150
// PROP_OTHER_VIBRATIONS
151
dbus_test_dbus_mock_object_add_property(as_mock,
153
PROP_OTHER_VIBRATIONS,
154
G_VARIANT_TYPE_BOOLEAN,
155
g_variant_new_boolean(true),
157
g_assert_no_error(error);
158
dbus_test_service_add_task(service, DBUS_TEST_TASK(as_mock));
119
161
/// Add the Notifications mock
483
TEST_F(SnapFixture, HapticModes)
526
TEST_F(SnapFixture,Vibrate)
485
528
auto settings = std::make_shared<Settings>();
486
529
auto ne = std::make_shared<unity::indicator::notifications::Engine>(APP_NAME);
487
530
auto func = [this](const Appointment&, const Alarm&){g_idle_add(quit_idle, loop);};
488
531
GError * error = nullptr;
490
// invoke a snap decision while haptic feedback is set to "pulse",
491
// confirm that VibratePattern got called
492
settings->alarm_haptic.set("pulse");
493
auto snap = new Snap (ne, settings);
494
(*snap)(appt, appt.alarms.front(), func, func);
496
EXPECT_TRUE (dbus_test_dbus_mock_object_check_method_call (haptic_mock,
498
HAPTIC_METHOD_VIBRATE_PATTERN,
503
// invoke a snap decision while haptic feedback is set to "none",
504
// confirm that VibratePattern =didn't= get called
506
dbus_test_dbus_mock_object_clear_method_calls (haptic_mock, haptic_obj, &error);
507
settings->alarm_haptic.set("none");
508
snap = new Snap (ne, settings);
509
(*snap)(appt, appt.alarms.front(), func, func);
511
EXPECT_FALSE (dbus_test_dbus_mock_object_check_method_call (haptic_mock,
513
HAPTIC_METHOD_VIBRATE_PATTERN,
518
g_assert_no_error (error);
534
bool other_vibrations; // the com.ubuntu.touch.AccountsService.Sound "other vibrations" setting
535
const char* haptic_mode; // supported values: "none", "pulse"
536
bool expected_vibrate_called; // do we expect the phone to vibrate?
538
{ false, "none", false },
539
{ true, "none", false },
540
{ false, "pulse", false },
541
{ true, "pulse", true }
544
auto snap = std::make_shared<Snap>(ne, settings);
546
for(const auto& test_case : test_cases)
548
// clear out any previous iterations' noise
549
dbus_test_dbus_mock_object_clear_method_calls(haptic_mock, haptic_obj, &error);
551
// set the properties to match the test case
552
settings->alarm_haptic.set(test_case.haptic_mode);
553
dbus_test_dbus_mock_object_update_property(as_mock,
555
PROP_OTHER_VIBRATIONS,
556
g_variant_new_boolean(test_case.other_vibrations),
558
g_assert_no_error(error);
562
(*snap)(appt, appt.alarms.front(), func, func);
564
const bool vibrate_called = dbus_test_dbus_mock_object_check_method_call(haptic_mock,
566
HAPTIC_METHOD_VIBRATE_PATTERN,
569
g_assert_no_error(error);
570
EXPECT_EQ(test_case.expected_vibrate_called, vibrate_called);