event: Allow to end events by level

The level here is an abstract value but in fact matches the profile
level. Well make this a property when fixing #35.
This commit is contained in:
Guido Günther
2024-06-21 19:57:29 +00:00
committed by Guido Günther
parent 0a16ebe4af
commit 3c02259156
3 changed files with 98 additions and 0 deletions
+51
View File
@@ -1,5 +1,7 @@
/*
* Copyright (C) 2020 Purism SPC
* 2023-2024 The Phosh Developers
*
* SPDX-License-Identifier: GPL-3.0+
* Author: Guido Günther <agx@sigxcpu.org>
*/
@@ -109,6 +111,7 @@ test_fbd_event_feedback_ended (void)
event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, FBD_EVENT_TIMEOUT_ONESHOT, NULL);
feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
fbd_event_add_feedback (event, FBD_FEEDBACK_BASE (feedback1));
feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
fbd_event_add_feedback (event, FBD_FEEDBACK_BASE (feedback2));
@@ -119,6 +122,52 @@ test_fbd_event_feedback_ended (void)
g_assert_true (ended);
}
static void
test_fbd_event_feedback_end_by_level (void)
{
FbdEvent *event;
FbdFeedbackDummy *feedback1, *feedback2;
gboolean ended;
feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
g_object_set_data (G_OBJECT (feedback1), "fbd-level", GUINT_TO_POINTER (10));
feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
g_object_set_data (G_OBJECT (feedback2), "fbd-level", GUINT_TO_POINTER (5));
event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, FBD_EVENT_TIMEOUT_ONESHOT, NULL);
g_signal_connect (event, "feedbacks-ended",
(GCallback)on_feedbacks_ended, &ended);
/* End all feedback at once */
fbd_event_add_feedback (event, FBD_FEEDBACK_BASE (feedback1));
fbd_event_add_feedback (event, FBD_FEEDBACK_BASE (feedback2));
fbd_event_end_feedbacks_by_level (event, 3);
g_assert_cmpint (g_slist_length (fbd_event_get_feedbacks (event)), ==, 0);
g_assert_cmpint (fbd_event_get_end_reason (event), ==, FBD_EVENT_END_REASON_EXPLICIT);
g_assert_true (ended);
/* End feedback one by one */
ended = FALSE;
fbd_event_set_end_reason (event, FBD_EVENT_END_REASON_NATURAL);
fbd_event_add_feedback (event, FBD_FEEDBACK_BASE (feedback1));
fbd_event_add_feedback (event, FBD_FEEDBACK_BASE (feedback2));
fbd_event_end_feedbacks_by_level (event, 7);
g_assert_cmpint (g_slist_length (fbd_event_get_feedbacks (event)), ==, 1);
g_assert_cmpint (fbd_event_get_end_reason (event), ==, FBD_EVENT_END_REASON_NATURAL);
g_assert_false (ended);
fbd_event_end_feedbacks_by_level (event, 4);
g_assert_cmpint (g_slist_length (fbd_event_get_feedbacks (event)), ==, 0);
g_assert_cmpint (fbd_event_get_end_reason (event), ==, FBD_EVENT_END_REASON_EXPLICIT);
g_assert_true (ended);
g_assert_finalize_object (event);
g_assert_finalize_object (feedback2);
g_assert_finalize_object (feedback1);
}
static void
test_fbd_event_feedback_loop (void)
{
@@ -171,6 +220,8 @@ main (gint argc, gchar *argv[])
g_test_add_func ("/feedbackd/fbd/event/new", test_fbd_event);
g_test_add_func ("/feedbackd/fbd/event/feedbacks/props", test_fbd_event_feedback);
g_test_add_func ("/feedbackd/fbd/event/feedbacks/ended", test_fbd_event_feedback_ended);
g_test_add_func ("/feedbackd/fbd/event/feedbacks/end_by_level",
test_fbd_event_feedback_end_by_level);
g_test_add_func ("/feedbackd/fbd/event/feedbacks/loop", test_fbd_event_feedback_loop);
g_test_add_func ("/feedbackd/fbd/event/feedbacks/timeout", test_fbd_event_feedback_timeout);