@@ -0,0 +1,36 @@
|
||||
{
|
||||
"name" : "default",
|
||||
"profiles" : [
|
||||
{
|
||||
"name" : "full",
|
||||
"feedbacks" : [
|
||||
{
|
||||
"type" : "Dummy",
|
||||
"event-name" : "test-dummy-0"
|
||||
},
|
||||
{
|
||||
"type" : "Dummy",
|
||||
"event-name" : "test-dummy-10",
|
||||
"duration" : 10000
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name" : "quiet",
|
||||
"feedbacks" : [
|
||||
{
|
||||
"type" : "Dummy",
|
||||
"event-name" : "test-dummy-0"
|
||||
},
|
||||
{
|
||||
"type" : "Dummy",
|
||||
"event-name" : "test-dummy-10",
|
||||
"duration" : 10000
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name" : "silent"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
if get_option('tests')
|
||||
|
||||
test_env = environment()
|
||||
test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
|
||||
test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
|
||||
test_env.set('G_DEBUG', 'gc-friendly,fatal-warnings')
|
||||
test_env.set('GSETTINGS_BACKEND', 'memory')
|
||||
test_env.set('GSETTINGS_SCHEMA_DIR', '@0@/data'.format(meson.build_root()))
|
||||
test_env.set('PYTHONDONTWRITEBYTECODE', 'yes')
|
||||
test_env.set('MALLOC_CHECK_', '2')
|
||||
test_env.set('XDG_CONFIG_HOME', meson.current_source_dir())
|
||||
test_env.set('XDG_CONFIG_DIRS', meson.current_source_dir())
|
||||
|
||||
# Shared lfbrary Unit tests
|
||||
|
||||
test_lfb_cflags = [
|
||||
'-DTEST_APP_ID="org.sigxcpu.feedbackd_test"',
|
||||
'-DLIBFEEDBACK_USE_UNSTABLE_API',
|
||||
'-DTEST_DATA_DIR="@0@"'.format(join_paths(meson.current_source_dir(), 'data')),
|
||||
]
|
||||
|
||||
test_lfb_link_args = [
|
||||
'-fPIC',
|
||||
]
|
||||
|
||||
test_lfb_deps = [
|
||||
libfeedback_dep,
|
||||
glib,
|
||||
gio_unix,
|
||||
]
|
||||
|
||||
lfb_tests = [
|
||||
'lfb-event',
|
||||
]
|
||||
|
||||
if get_option ('daemon')
|
||||
# The integration test needs the daemon
|
||||
lfb_tests += 'lfb-integration'
|
||||
subdir('services')
|
||||
endif
|
||||
|
||||
foreach test : lfb_tests
|
||||
t = executable('test-@0@'.format(test),
|
||||
['test-@0@.c'.format(test)],
|
||||
c_args : test_lfb_cflags,
|
||||
pie : true,
|
||||
link_args : test_lfb_link_args,
|
||||
dependencies : test_lfb_deps)
|
||||
test(test, t, env: test_env)
|
||||
endforeach
|
||||
|
||||
# Daemon Unit tests
|
||||
if get_option('daemon')
|
||||
|
||||
test_fbd_cflags = [
|
||||
'-DTEST_APP_ID="org.sigxcpu.feedbackd_test"',
|
||||
]
|
||||
|
||||
test_fbd_link_args = [
|
||||
'-fPIC',
|
||||
]
|
||||
|
||||
test_fbd_deps = [
|
||||
fbd_dep,
|
||||
]
|
||||
|
||||
fbd_tests = [
|
||||
'fbd-feedback-profile',
|
||||
'fbd-feedback-theme',
|
||||
]
|
||||
|
||||
foreach test : fbd_tests
|
||||
t = executable('test-@0@'.format(test),
|
||||
['test-@0@.c'.format(test)],
|
||||
c_args : test_fbd_cflags,
|
||||
pie : true,
|
||||
link_args : test_fbd_link_args,
|
||||
include_directories : fbd_inc,
|
||||
dependencies : test_fbd_deps)
|
||||
test(test, t, env : test_env)
|
||||
endforeach
|
||||
|
||||
|
||||
endif # daemon
|
||||
|
||||
endif
|
||||
@@ -0,0 +1,9 @@
|
||||
service_file = 'org.sigxcpu.Feedback.service'
|
||||
service_data = configuration_data()
|
||||
service_data.set('ABS_BUILDDIR', meson.build_root())
|
||||
|
||||
configure_file(
|
||||
input : service_file + '.in',
|
||||
output : service_file,
|
||||
configuration : service_data
|
||||
)
|
||||
@@ -0,0 +1,4 @@
|
||||
[D-BUS Service]
|
||||
Name=org.sigxcpu.Feedback
|
||||
Exec=@ABS_BUILDDIR@/run
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Purism SPC
|
||||
* SPDX-License-Identifier: GPL-3.0+
|
||||
* Author: Guido Günther <agx@sigxcpu.org>
|
||||
*/
|
||||
|
||||
#include "fbd-event.h"
|
||||
#include "fbd-feedback-dummy.h"
|
||||
|
||||
#define TEST_EVENT "window-close"
|
||||
|
||||
static void
|
||||
test_fbd_event (void)
|
||||
{
|
||||
g_autoptr(FbdEvent) event = NULL;
|
||||
g_autofree gchar *appid = NULL;
|
||||
g_autofree gchar *name = NULL;
|
||||
FbdEventEndReason reason;
|
||||
gint timeout;
|
||||
|
||||
event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, 2);
|
||||
|
||||
g_assert_true (FBD_IS_EVENT (event));
|
||||
g_object_get (event,
|
||||
"end-reason", &reason,
|
||||
"event", &name,
|
||||
"app-id", &appid,
|
||||
"timeout", &timeout,
|
||||
NULL);
|
||||
|
||||
g_assert_cmpstr (fbd_event_get_event (event), ==, TEST_EVENT);
|
||||
g_assert_cmpstr (name, ==, TEST_EVENT);
|
||||
|
||||
g_assert_cmpstr (fbd_event_get_app_id (event), ==, TEST_APP_ID);
|
||||
g_assert_cmpstr (appid, ==, TEST_APP_ID);
|
||||
|
||||
g_assert_cmpint (fbd_event_get_timeout (event), ==, timeout);
|
||||
g_assert_cmpint (timeout, ==, 2);
|
||||
|
||||
g_assert_cmpint (fbd_event_get_end_reason (event), ==, FBD_EVENT_END_REASON_NORMAL);
|
||||
g_assert_cmpint (reason, ==, FBD_EVENT_END_REASON_NORMAL);
|
||||
}
|
||||
|
||||
static void
|
||||
test_fbd_event_feedback (void)
|
||||
{
|
||||
GSList *feedbacks;
|
||||
g_autoptr(FbdEvent) event = NULL;
|
||||
g_autoptr(FbdFeedbackDummy) feedback1 = NULL;
|
||||
g_autoptr(FbdFeedbackDummy) feedback2 = NULL;
|
||||
|
||||
event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, -1);
|
||||
feedback1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
|
||||
feedback2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY, NULL);
|
||||
|
||||
feedbacks = fbd_event_get_feedbacks (event);
|
||||
g_assert_cmpint (g_slist_length (feedbacks), ==, 0);
|
||||
|
||||
fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1));
|
||||
feedbacks = fbd_event_get_feedbacks (event);
|
||||
g_assert_cmpint (g_slist_length (feedbacks), ==, 1);
|
||||
|
||||
/* Remove non existing feedback */
|
||||
fbd_event_remove_feedback (event, FBD_FEEDBACK_BASE(feedback2));
|
||||
feedbacks = fbd_event_get_feedbacks (event);
|
||||
g_assert_cmpint (g_slist_length (feedbacks), ==, 1);
|
||||
|
||||
fbd_event_remove_feedback (event, FBD_FEEDBACK_BASE(feedback1));
|
||||
feedbacks = fbd_event_get_feedbacks (event);
|
||||
g_assert_cmpint (g_slist_length (feedbacks), ==, 0);
|
||||
|
||||
fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback1));
|
||||
fbd_event_add_feedback (event, FBD_FEEDBACK_BASE(feedback2));
|
||||
feedbacks = fbd_event_get_feedbacks (event);
|
||||
g_assert_cmpint (g_slist_length (feedbacks), ==, 2);
|
||||
|
||||
g_assert_false (fbd_event_get_feedbacks_ended (event));
|
||||
fbd_event_end_feedbacks (event);
|
||||
/* Dummy feedback ends immediately */
|
||||
g_assert_true (fbd_event_get_feedbacks_ended (event));
|
||||
}
|
||||
|
||||
static void
|
||||
on_feedbacks_ended (FbdEvent *event, gboolean *ended)
|
||||
{
|
||||
FBD_IS_EVENT (event);
|
||||
|
||||
*ended = TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
test_fbd_event_feedback_ended (void)
|
||||
{
|
||||
g_autoptr(FbdEvent) event = NULL;
|
||||
g_autoptr(FbdFeedbackDummy) feedback1 = NULL;
|
||||
g_autoptr(FbdFeedbackDummy) feedback2 = NULL;
|
||||
gboolean ended = FALSE;
|
||||
|
||||
event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, FBD_EVENT_TIMEOUT_ONESHOT);
|
||||
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));
|
||||
|
||||
g_signal_connect (event, "feedbacks-ended",
|
||||
(GCallback)on_feedbacks_ended, &ended);
|
||||
|
||||
fbd_event_end_feedbacks (event);
|
||||
g_assert_true (ended);
|
||||
}
|
||||
|
||||
static void
|
||||
test_fbd_event_feedback_loop (void)
|
||||
{
|
||||
g_autoptr(FbdEvent) event = NULL;
|
||||
g_autoptr(FbdFeedbackDummy) feedback1 = NULL;
|
||||
g_autoptr(FbdFeedbackDummy) feedback2 = NULL;
|
||||
gboolean ended = FALSE;
|
||||
|
||||
event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, FBD_EVENT_TIMEOUT_LOOP);
|
||||
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));
|
||||
|
||||
g_signal_connect (event, "feedbacks-ended",
|
||||
(GCallback)on_feedbacks_ended, &ended);
|
||||
g_assert_false (ended);
|
||||
|
||||
fbd_event_end_feedbacks (event);
|
||||
g_assert_true (ended);
|
||||
}
|
||||
|
||||
static void
|
||||
test_fbd_event_feedback_timeout (void)
|
||||
{
|
||||
g_autoptr(FbdEvent) event = NULL;
|
||||
g_autoptr(FbdFeedbackDummy) feedback1 = NULL;
|
||||
g_autoptr(FbdFeedbackDummy) feedback2 = NULL;
|
||||
gboolean ended = FALSE;
|
||||
|
||||
event = fbd_event_new (1, TEST_APP_ID, TEST_EVENT, 1);
|
||||
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));
|
||||
|
||||
g_signal_connect (event, "feedbacks-ended",
|
||||
(GCallback)on_feedbacks_ended, &ended);
|
||||
g_assert_false (ended);
|
||||
|
||||
fbd_event_end_feedbacks (event);
|
||||
g_assert_true (ended);
|
||||
}
|
||||
|
||||
gint
|
||||
main (gint argc, gchar *argv[])
|
||||
{
|
||||
g_test_init (&argc, &argv, NULL);
|
||||
|
||||
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/loop", test_fbd_event_feedback_loop);
|
||||
g_test_add_func("/feedbackd/fbd/event/feedbacks/timeout", test_fbd_event_feedback_timeout);
|
||||
|
||||
return g_test_run();
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Purism SPC
|
||||
* SPDX-License-Identifier: GPL-3.0+
|
||||
* Author: Guido Günther <agx@sigxcpu.org>
|
||||
*/
|
||||
|
||||
#include "fbd-feedback-profile.h"
|
||||
#include "fbd-feedback-dummy.h"
|
||||
#include "fbd-feedback-vibra.h"
|
||||
|
||||
#include <json-glib/json-glib.h>
|
||||
|
||||
#define PROFILE_NAME "test"
|
||||
|
||||
static void
|
||||
test_fbd_feedback_profile_name (void)
|
||||
{
|
||||
g_autoptr(FbdFeedbackProfile) profile = fbd_feedback_profile_new (PROFILE_NAME);
|
||||
|
||||
g_assert_true (FBD_IS_FEEDBACK_PROFILE (profile));
|
||||
|
||||
g_assert_cmpstr (fbd_feedback_profile_get_name (profile), ==, PROFILE_NAME);
|
||||
}
|
||||
|
||||
static void
|
||||
test_fbd_feedback_profile_feedbacks (void)
|
||||
{
|
||||
GHashTable *feedbacks;
|
||||
FbdFeedbackBase *fb;
|
||||
g_autoptr (FbdFeedbackDummy) fb1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY,
|
||||
"event-name", "event1",
|
||||
NULL);
|
||||
g_autoptr (FbdFeedbackDummy) fb2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY,
|
||||
"event-name", "event2",
|
||||
NULL);
|
||||
g_autoptr(FbdFeedbackProfile) profile = fbd_feedback_profile_new (PROFILE_NAME);
|
||||
|
||||
g_assert_true (FBD_IS_FEEDBACK_PROFILE (profile));
|
||||
g_object_get (profile, "feedbacks", &feedbacks, NULL);
|
||||
g_assert_nonnull (feedbacks);
|
||||
g_hash_table_unref (feedbacks);
|
||||
fbd_feedback_profile_add_feedback (profile, FBD_FEEDBACK_BASE(fb1));
|
||||
fbd_feedback_profile_add_feedback (profile, FBD_FEEDBACK_BASE(fb2));
|
||||
|
||||
fb = fbd_feedback_profile_get_feedback (profile, "event1");
|
||||
g_assert_cmpstr (fbd_feedback_get_event_name (fb), ==, "event1");
|
||||
|
||||
fb = fbd_feedback_profile_get_feedback (profile, "does-not-exist");
|
||||
g_assert_null (fb);
|
||||
}
|
||||
|
||||
static void
|
||||
test_fbd_feedback_profile_parse (void)
|
||||
{
|
||||
const char *json =" "
|
||||
" { "
|
||||
" \"name\" : \"full\", "
|
||||
" \"feedbacks\" : [ "
|
||||
" { "
|
||||
" \"type\" : \"vibra\", "
|
||||
" \"event-name\" : \"event1\" "
|
||||
" }, "
|
||||
" { "
|
||||
" \"type\" : \"dummy\", "
|
||||
" \"event-name\" : \"event2\" "
|
||||
" } "
|
||||
" ] "
|
||||
" } ";
|
||||
g_autoptr (GError) err = NULL;
|
||||
g_autoptr (FbdFeedbackProfile) profile = NULL;
|
||||
JsonNode *node;
|
||||
FbdFeedbackBase *fb;
|
||||
|
||||
node = json_from_string(json, &err);
|
||||
g_assert_no_error (err);
|
||||
profile = FBD_FEEDBACK_PROFILE (json_gobject_deserialize (FBD_TYPE_FEEDBACK_PROFILE, node));
|
||||
g_assert_nonnull (profile);
|
||||
fb = fbd_feedback_profile_get_feedback (profile, "event2");
|
||||
g_assert_true (FBD_IS_FEEDBACK_DUMMY(fb));
|
||||
fb = fbd_feedback_profile_get_feedback (profile, "event1");
|
||||
g_assert_true (FBD_IS_FEEDBACK_VIBRA(fb));
|
||||
}
|
||||
|
||||
gint
|
||||
main (gint argc, gchar *argv[])
|
||||
{
|
||||
g_test_init (&argc, &argv, NULL);
|
||||
|
||||
g_test_add_func("/feedbackd/fbd/feedback-profile/name", test_fbd_feedback_profile_name);
|
||||
g_test_add_func("/feedbackd/fbd/feedback-profile/feedbacks", test_fbd_feedback_profile_feedbacks);
|
||||
g_test_add_func("/feedbackd/fbd/feedback-profile/parse", test_fbd_feedback_profile_parse);
|
||||
|
||||
return g_test_run();
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Purism SPC
|
||||
* SPDX-License-Identifier: GPL-3.0+
|
||||
* Author: Guido Günther <agx@sigxcpu.org>
|
||||
*/
|
||||
|
||||
#include "fbd-feedback-dummy.h"
|
||||
#include "fbd-feedback-theme.h"
|
||||
|
||||
#include <json-glib/json-glib.h>
|
||||
|
||||
#define THEME_NAME "test"
|
||||
|
||||
static void
|
||||
test_fbd_feedback_theme_name (void)
|
||||
{
|
||||
g_autoptr(FbdFeedbackTheme) theme = fbd_feedback_theme_new (THEME_NAME);
|
||||
|
||||
g_assert_true (FBD_IS_FEEDBACK_THEME (theme));
|
||||
|
||||
g_assert_cmpstr (fbd_feedback_theme_get_name (theme), ==, THEME_NAME);
|
||||
}
|
||||
|
||||
static void
|
||||
test_fbd_feedback_theme_profiles (void)
|
||||
{
|
||||
g_autoptr (FbdFeedbackDummy) quiet_fb1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY,
|
||||
"event-name", "event1",
|
||||
NULL);
|
||||
g_autoptr (FbdFeedbackDummy) quiet_fb2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY,
|
||||
"event-name", "event2",
|
||||
NULL);
|
||||
g_autoptr (FbdFeedbackDummy) full_fb1 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY,
|
||||
"event-name", "event1",
|
||||
NULL);
|
||||
g_autoptr (FbdFeedbackDummy) full_fb2 = g_object_new (FBD_TYPE_FEEDBACK_DUMMY,
|
||||
"event-name", "event2",
|
||||
NULL);
|
||||
g_autoptr(FbdFeedbackTheme) theme = fbd_feedback_theme_new (THEME_NAME);
|
||||
|
||||
FbdFeedbackProfile *profile_full = fbd_feedback_profile_new ("full");
|
||||
FbdFeedbackProfile *profile_quiet = fbd_feedback_profile_new ("quiet");
|
||||
FbdFeedbackProfile *profile;
|
||||
|
||||
fbd_feedback_profile_add_feedback (profile_quiet, FBD_FEEDBACK_BASE(quiet_fb1));
|
||||
fbd_feedback_profile_add_feedback (profile_quiet, FBD_FEEDBACK_BASE(quiet_fb2));
|
||||
|
||||
fbd_feedback_profile_add_feedback (profile_full, FBD_FEEDBACK_BASE(full_fb1));
|
||||
fbd_feedback_profile_add_feedback (profile_full, FBD_FEEDBACK_BASE(full_fb2));
|
||||
|
||||
g_assert_true (FBD_IS_FEEDBACK_THEME (theme));
|
||||
fbd_feedback_theme_add_profile (theme, profile_quiet);
|
||||
fbd_feedback_theme_add_profile (theme, profile_full);
|
||||
|
||||
profile = fbd_feedback_theme_get_profile (theme, "full");
|
||||
g_assert_true (FBD_IS_FEEDBACK_PROFILE (profile));
|
||||
|
||||
g_print ("%s\n", json_gobject_to_data (G_OBJECT(theme), NULL));
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
test_fbd_feedback_theme_parse (void)
|
||||
{
|
||||
const char *json =" "
|
||||
"{ "
|
||||
" \"name\" : \"test\", "
|
||||
" \"profiles\" : [ "
|
||||
" { "
|
||||
" \"name\" : \"full\", "
|
||||
" \"feedbacks\" : [ "
|
||||
" { "
|
||||
" \"type\" : \"dummy\", "
|
||||
" \"event-name\" : \"event1\" "
|
||||
" }, "
|
||||
" { "
|
||||
" \"type\" : \"dummy\", "
|
||||
" \"event-name\" : \"event2\" "
|
||||
" } "
|
||||
" ] "
|
||||
" }, "
|
||||
" { "
|
||||
" \"name\" : \"quiet\", "
|
||||
" \"feedbacks\" : [ "
|
||||
" { "
|
||||
" \"type\" : \"dummy\", "
|
||||
" \"event-name\" : \"event1\" "
|
||||
" }, "
|
||||
" { "
|
||||
" \"type\" : \"dummy\", "
|
||||
" \"event-name\" : \"event2\" "
|
||||
" } "
|
||||
" ] "
|
||||
" } "
|
||||
" ] "
|
||||
"} ";
|
||||
g_autoptr (GError) err = NULL;
|
||||
g_autoptr (FbdFeedbackTheme) theme = NULL;
|
||||
FbdFeedbackProfile *profile;
|
||||
|
||||
theme = fbd_feedback_theme_new_from_data (json, &err);
|
||||
g_assert_no_error (err);
|
||||
g_assert_nonnull (theme);
|
||||
profile = fbd_feedback_theme_get_profile (theme, "full");
|
||||
g_assert_true (FBD_IS_FEEDBACK_PROFILE(profile));
|
||||
g_assert_cmpstr ("full", ==,
|
||||
fbd_feedback_profile_get_name (profile));
|
||||
profile = fbd_feedback_theme_get_profile (theme, "quiet");
|
||||
g_assert_true (FBD_IS_FEEDBACK_PROFILE(profile));
|
||||
g_assert_cmpstr ("quiet", ==,
|
||||
fbd_feedback_profile_get_name (profile));
|
||||
}
|
||||
|
||||
gint
|
||||
main (gint argc, gchar *argv[])
|
||||
{
|
||||
g_test_init (&argc, &argv, NULL);
|
||||
|
||||
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);
|
||||
|
||||
return g_test_run();
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Purism SPC
|
||||
* SPDX-License-Identifier: GPL-3.0+
|
||||
* Author: Guido Günther <agx@sigxcpu.org>
|
||||
*/
|
||||
|
||||
#include "libfeedback.h"
|
||||
#include <gio/gio.h>
|
||||
|
||||
/* Property set/get */
|
||||
static void
|
||||
test_lfb_event_props (void)
|
||||
{
|
||||
g_autoptr(LfbEvent) event = NULL;
|
||||
g_autofree gchar *evname = NULL;
|
||||
gint timeout;
|
||||
|
||||
g_assert_true (lfb_init (TEST_APP_ID, NULL));
|
||||
|
||||
event = lfb_event_new ("window-close");
|
||||
g_assert_true (LFB_IS_EVENT (event));
|
||||
|
||||
g_object_get (event, "event", &evname, NULL);
|
||||
g_assert_cmpstr (evname, ==, "window-close");
|
||||
|
||||
g_object_get (event, "timeout", &timeout, NULL);
|
||||
g_assert_cmpint (timeout, ==, -1);
|
||||
|
||||
g_assert_cmpint (lfb_event_get_end_reason (event), ==, LFB_EVENT_END_REASON_NATURAL);
|
||||
g_assert_cmpint (lfb_event_get_state (event), ==, LFB_EVENT_STATE_NONE);
|
||||
|
||||
lfb_uninit ();
|
||||
}
|
||||
|
||||
/* Test failure paths when no feedback daemon is running */
|
||||
static void
|
||||
test_lfb_event_trigger (void)
|
||||
{
|
||||
g_autoptr(LfbEvent) event = NULL;
|
||||
g_autofree gchar *evname = NULL;
|
||||
g_autoptr (GError) err = NULL;
|
||||
|
||||
g_assert_true (lfb_init (TEST_APP_ID, NULL));
|
||||
|
||||
event = lfb_event_new ("window-close");
|
||||
g_assert_false (lfb_event_trigger_feedback (event, &err));
|
||||
g_assert_nonnull (err);
|
||||
g_clear_error (&err);
|
||||
|
||||
g_assert_false (lfb_event_end_feedback (event, &err));
|
||||
g_assert_nonnull (err);
|
||||
g_clear_error (&err);
|
||||
|
||||
lfb_uninit ();
|
||||
}
|
||||
|
||||
gint
|
||||
main (gint argc, gchar *argv[])
|
||||
{
|
||||
g_test_init (&argc, &argv, NULL);
|
||||
|
||||
g_autoptr(GTestDBus) bus = g_test_dbus_new (0);
|
||||
g_test_dbus_up (bus);
|
||||
|
||||
g_test_add_func("/feedbackd/libfeedback/lfb-event/props", test_lfb_event_props);
|
||||
g_test_add_func("/feedbackd/libfeedback/lfb-event/trigger", test_lfb_event_trigger);
|
||||
|
||||
return g_test_run();
|
||||
}
|
||||
@@ -0,0 +1,228 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Purism SPC
|
||||
* SPDX-License-Identifier: GPL-3.0+
|
||||
* Author: Guido Günther <agx@sigxcpu.org>
|
||||
*/
|
||||
|
||||
#include "libfeedback.h"
|
||||
#include <gio/gio.h>
|
||||
|
||||
typedef struct {
|
||||
GTestDBus *dbus;
|
||||
|
||||
} TestFixture;
|
||||
|
||||
GMainLoop *mainloop;
|
||||
|
||||
static void
|
||||
fixture_setup (TestFixture *fixture, gconstpointer unused)
|
||||
{
|
||||
g_autoptr (GError) err = NULL;
|
||||
gchar *relative, *servicesdir;
|
||||
gint success;
|
||||
|
||||
fixture->dbus = g_test_dbus_new (G_TEST_DBUS_NONE);
|
||||
relative = g_test_build_filename (G_TEST_BUILT, "services", NULL);
|
||||
servicesdir = g_canonicalize_filename (relative, NULL);
|
||||
g_free (relative);
|
||||
|
||||
g_test_dbus_add_service_dir (fixture->dbus, servicesdir);
|
||||
g_free (servicesdir);
|
||||
g_setenv ("FEEDBACK_THEME", TEST_DATA_DIR "/test.json", TRUE);
|
||||
g_setenv ("GSETTINGS_BACKEND", "memory", TRUE);
|
||||
g_test_dbus_up (fixture->dbus);
|
||||
|
||||
g_assert_null (mainloop);
|
||||
mainloop = g_main_loop_new (NULL, FALSE);
|
||||
|
||||
success = lfb_init (TEST_APP_ID, &err);
|
||||
g_assert_no_error (err);
|
||||
g_assert_true (success);
|
||||
}
|
||||
|
||||
static void
|
||||
fixture_teardown (TestFixture *fixture, gconstpointer unused)
|
||||
{
|
||||
g_clear_pointer (&mainloop, g_main_loop_unref);
|
||||
lfb_uninit ();
|
||||
|
||||
g_test_dbus_down (fixture->dbus);
|
||||
g_object_unref (fixture->dbus);
|
||||
}
|
||||
|
||||
static void
|
||||
on_feedback_ended (LfbEvent *event, LfbEvent **cmp)
|
||||
{
|
||||
g_assert_true (LFB_IS_EVENT (event));
|
||||
g_assert_null (*cmp);
|
||||
|
||||
g_debug ("Feedback ended for %s", lfb_event_get_event (event));
|
||||
g_assert_cmpint (lfb_event_get_end_reason (event), ==, LFB_EVENT_END_REASON_EXPLICIT);
|
||||
|
||||
/* "Return" event */
|
||||
*cmp = event;
|
||||
g_main_loop_quit (mainloop);
|
||||
}
|
||||
|
||||
static void
|
||||
test_lfb_integration_event_sync (void)
|
||||
{
|
||||
g_autoptr(LfbEvent) event0 = NULL;
|
||||
g_autoptr(LfbEvent) event1 = NULL;
|
||||
g_autoptr(LfbEvent) event10 = NULL;
|
||||
g_autofree gchar *evname = NULL;
|
||||
g_autoptr (GError) err = NULL;
|
||||
LfbEvent *cmp = NULL;
|
||||
gboolean success;
|
||||
|
||||
event0 = lfb_event_new ("test-dummy-0");
|
||||
success = lfb_event_trigger_feedback (event0, &err);
|
||||
g_assert_no_error (err);
|
||||
g_assert_true (success);
|
||||
|
||||
event10 = lfb_event_new ("test-dummy-10");
|
||||
g_signal_connect (event10, "feedback-ended", (GCallback)on_feedback_ended, &cmp);
|
||||
success = lfb_event_trigger_feedback (event10, &err);
|
||||
g_assert_no_error (err);
|
||||
g_assert_true (success);
|
||||
|
||||
success = lfb_event_end_feedback (event10, &err);
|
||||
g_assert_no_error (err);
|
||||
g_assert_true (success);
|
||||
|
||||
g_main_loop_run (mainloop);
|
||||
|
||||
/* If the signal fired cmp will match event */
|
||||
g_assert_true (event10 == cmp);
|
||||
g_assert_cmpint (lfb_event_get_state (event10), ==, LFB_EVENT_STATE_ENDED);
|
||||
g_assert_cmpint (lfb_event_get_end_reason (event10), ==, LFB_EVENT_END_REASON_EXPLICIT);
|
||||
}
|
||||
|
||||
static void
|
||||
on_event_triggered (LfbEvent *event,
|
||||
GAsyncResult *res,
|
||||
LfbEvent **cmp)
|
||||
{
|
||||
g_autoptr (GError) err = NULL;
|
||||
gboolean success;
|
||||
|
||||
g_assert_true (LFB_IS_EVENT (event));
|
||||
g_assert_null (*cmp);
|
||||
|
||||
g_debug ("%s", __func__);
|
||||
success = lfb_event_trigger_feedback_finish (event, res, &err);
|
||||
g_assert_no_error (err);
|
||||
g_assert_true (success);
|
||||
|
||||
/* "Return" event */
|
||||
*cmp = event;
|
||||
g_main_loop_quit (mainloop);
|
||||
}
|
||||
|
||||
static void
|
||||
on_event_ended (LfbEvent *event,
|
||||
GAsyncResult *res,
|
||||
LfbEvent **cmp)
|
||||
{
|
||||
g_autoptr (GError) err = NULL;
|
||||
gboolean success;
|
||||
|
||||
g_debug ("%s", __func__);
|
||||
g_assert_true (LFB_IS_EVENT (event));
|
||||
g_assert_null (*cmp);
|
||||
|
||||
success = lfb_event_end_feedback_finish (event, res, &err);
|
||||
g_assert_no_error (err);
|
||||
g_assert_true (success);
|
||||
|
||||
/* "Return" event */
|
||||
*cmp = event;
|
||||
g_main_loop_quit (mainloop);
|
||||
}
|
||||
|
||||
static void
|
||||
test_lfb_integration_event_async (void)
|
||||
{
|
||||
g_autoptr(LfbEvent) event0 = NULL;
|
||||
g_autoptr(LfbEvent) event10 = NULL;
|
||||
g_autofree gchar *evname = NULL;
|
||||
g_autoptr (GError) err = NULL;
|
||||
LfbEvent *cmp = NULL;
|
||||
gboolean success;
|
||||
|
||||
event0 = lfb_event_new ("test-dummy-0");
|
||||
lfb_event_trigger_feedback_async (event0,
|
||||
NULL,
|
||||
(GAsyncReadyCallback)on_event_triggered,
|
||||
&cmp);
|
||||
g_main_loop_run (mainloop);
|
||||
/* The async finish callback saw the right event */
|
||||
g_assert_true (event0 == cmp);
|
||||
cmp = NULL;
|
||||
|
||||
event10 = lfb_event_new ("test-dummy-10");
|
||||
success = lfb_event_trigger_feedback (event10, &err);
|
||||
g_assert_no_error (err);
|
||||
g_assert_true (success);
|
||||
|
||||
lfb_event_end_feedback_async (event10,
|
||||
NULL,
|
||||
(GAsyncReadyCallback)on_event_ended,
|
||||
&cmp);
|
||||
|
||||
g_main_loop_run (mainloop);
|
||||
/* The async finish callback saw the right event */
|
||||
g_assert_true (event10 == cmp);
|
||||
g_assert_cmpint (lfb_event_get_state (event10), ==, LFB_EVENT_STATE_ENDED);
|
||||
}
|
||||
|
||||
static void
|
||||
on_profile_changed (LfbGdbusFeedback *proxy, GParamSpec *psepc, const gchar **profile)
|
||||
{
|
||||
g_assert_null (*profile);
|
||||
*profile = lfb_get_feedback_profile();
|
||||
g_debug("Set feedback profile to: '%s'", *profile);
|
||||
|
||||
g_main_loop_quit (mainloop);
|
||||
}
|
||||
|
||||
static void
|
||||
test_lfb_integration_profile (void)
|
||||
{
|
||||
g_autoptr (GError) err = NULL;
|
||||
LfbGdbusFeedback *proxy;
|
||||
gchar *cmp = NULL;
|
||||
|
||||
g_assert_cmpstr (lfb_get_feedback_profile (), ==, "full");
|
||||
proxy = lfb_get_proxy ();
|
||||
g_assert_nonnull (proxy);
|
||||
|
||||
lfb_set_feedback_profile ("quiet");
|
||||
g_signal_connect (proxy, "notify::profile", (GCallback)on_profile_changed, &cmp);
|
||||
g_main_loop_run (mainloop);
|
||||
g_assert_cmpstr (lfb_get_feedback_profile (), ==, "quiet");
|
||||
g_assert_cmpstr (cmp, ==, "quiet");
|
||||
}
|
||||
|
||||
gint
|
||||
main (gint argc, gchar *argv[])
|
||||
{
|
||||
g_test_init (&argc, &argv, NULL);
|
||||
|
||||
g_test_add("/feedbackd/lfb-integration/event_sync", TestFixture, NULL,
|
||||
(gpointer)fixture_setup,
|
||||
(gpointer)test_lfb_integration_event_sync,
|
||||
(gpointer)fixture_teardown);
|
||||
|
||||
g_test_add("/feedbackd/lfb-integration/event_async", TestFixture, NULL,
|
||||
(gpointer)fixture_setup,
|
||||
(gpointer)test_lfb_integration_event_async,
|
||||
(gpointer)fixture_teardown);
|
||||
|
||||
g_test_add("/feedbackd/lfb-integration/profile", TestFixture, NULL,
|
||||
(gpointer)fixture_setup,
|
||||
(gpointer)test_lfb_integration_profile,
|
||||
(gpointer)fixture_teardown);
|
||||
|
||||
return g_test_run();
|
||||
}
|
||||
Reference in New Issue
Block a user