feedback-theme: Allow to update theme

New profiles are added, existing profiles updated. This will
allow to merge themes.
This commit is contained in:
Guido Günther
2022-12-08 10:05:47 +01:00
parent d7f97dca51
commit e10b2cc150
6 changed files with 178 additions and 1 deletions
+30
View File
@@ -0,0 +1,30 @@
{
"name" : "base",
"profiles" : [
{
"name" : "full",
"feedbacks" : [
{
"type" : "Dummy",
"event-name" : "test-dummy-00",
"duration" : 0x01
},
{
"type" : "Dummy",
"event-name" : "test-dummy-01",
"duration" : 0x02
}
]
},
{
"name" : "quiet",
"feedbacks" : [
{
"type" : "Dummy",
"event-name" : "test-dummy-00",
"duration" : 0x03
}
]
}
]
}
+40
View File
@@ -0,0 +1,40 @@
{
"name" : "test",
"profiles" : [
{
"name" : "full",
"feedbacks" : [
{
"type" : "Dummy",
"event-name" : "test-dummy-00",
"duration" : 0x10
},
{
"type" : "Dummy",
"event-name" : "test-dummy-10",
"duration" : 0x20
}
]
},
{
"name" : "quiet",
"feedbacks" : [
{
"type" : "Dummy",
"event-name" : "test-dummy-10",
"duration" : 0x30
}
]
},
{
"name" : "silent",
"feedbacks" : [
{
"type" : "Dummy",
"event-name" : "test-dummy-10",
"duration" : 0x40
}
]
}
]
}
+2 -1
View File
@@ -53,7 +53,8 @@ endforeach
if get_option('daemon')
test_fbd_cflags = [
'-DTEST_APP_ID="org.sigxcpu.feedbackd_test"',
'-DTEST_APP_ID="org.sigxcpu.feedbackd_test"',
'-DTEST_DATA_DIR="@0@"'.format(join_paths(meson.current_source_dir(), 'data')),
]
test_fbd_link_args = [
+66
View File
@@ -116,6 +116,71 @@ test_fbd_feedback_theme_parse (void)
fbd_feedback_profile_get_name (profile));
}
static void
test_fbd_feedback_theme_update (void)
{
g_autoptr (GError) err = NULL;
FbdFeedbackTheme *theme, *from;
FbdFeedbackProfile *profile;
FbdFeedbackBase *fb;
const char *name;
/* test-dummy-1x feedbacks */
from = fbd_feedback_theme_new_from_file (TEST_DATA_DIR "/parent/test.json", &err);
g_assert_no_error (err);
g_assert_true (FBD_IS_FEEDBACK_THEME (from));
/* test-dummy-0{0,1} feedbacks */
theme = fbd_feedback_theme_new_from_file (TEST_DATA_DIR "/parent/base.json", &err);
g_assert_no_error (err);
g_assert_true (FBD_IS_FEEDBACK_THEME (theme));
name = fbd_feedback_theme_get_name (from);
g_assert_cmpstr ("test", ==, name);
name = fbd_feedback_theme_get_name (theme);
g_assert_cmpstr ("base", ==, name);
/* `theme` is lacking "silent" while `from` has it */
profile = fbd_feedback_theme_get_profile (theme, "silent");
g_assert_null (profile);
profile = fbd_feedback_theme_get_profile (from, "silent");
g_assert_true (FBD_IS_FEEDBACK_PROFILE(profile));
fbd_feedback_theme_update (theme, from);
/* After merging `theme` has a silent profile too */
profile = fbd_feedback_theme_get_profile (theme, "silent");
g_assert_true (FBD_IS_FEEDBACK_PROFILE(profile));
g_assert_cmpstr ("silent", ==, fbd_feedback_profile_get_name (profile));
/* Name updated */
name = fbd_feedback_theme_get_name (theme);
g_assert_cmpstr ("test", ==, name);
/* test-dummy-10 added */
profile = fbd_feedback_theme_get_profile (theme, "full");
fb = fbd_feedback_profile_get_feedback (profile, "test-dummy-10");
g_assert_cmpstr ("test-dummy-10", ==, fbd_feedback_get_event_name (fb));
profile = fbd_feedback_theme_get_profile (theme, "quiet");
fb = fbd_feedback_profile_get_feedback (profile, "test-dummy-10");
g_assert_cmpstr ("test-dummy-10", ==, fbd_feedback_get_event_name (fb));
profile = fbd_feedback_theme_get_profile (theme, "silent");
fb = fbd_feedback_profile_get_feedback (profile, "test-dummy-10");
g_assert_cmpstr ("test-dummy-10", ==, fbd_feedback_get_event_name (fb));
/* test-dummy-00 updated */
profile = fbd_feedback_theme_get_profile (theme, "full");
fb = fbd_feedback_profile_get_feedback (profile, "test-dummy-00");
g_assert_cmpstr ("test-dummy-00", ==, fbd_feedback_get_event_name (fb));
g_assert_cmpint (fbd_feedback_dummy_get_duration (FBD_FEEDBACK_DUMMY (fb)), ==, 0x10);
g_assert_finalize_object (from);
g_assert_finalize_object (theme);
}
gint
main (gint argc, gchar *argv[])
{
@@ -124,6 +189,7 @@ main (gint argc, gchar *argv[])
g_test_add_func("/feedbackd/fbd/feedback-theme/name", test_fbd_feedback_theme_name);
g_test_add_func("/feedbackd/fbd/feedback-theme/profiles", test_fbd_feedback_theme_profiles);
g_test_add_func("/feedbackd/fbd/feedback-theme/parse", test_fbd_feedback_theme_parse);
g_test_add_func("/feedbackd/fbd/feedback-theme/update", test_fbd_feedback_theme_update);
return g_test_run();
}