libpurple/tests/test_scheduler.c

Sun, 10 Aug 2025 23:44:08 +0800

author
Gong Zhile <gongzl@stu.hebust.edu.cn>
date
Sun, 10 Aug 2025 23:44:08 +0800
branch
purple_conversation_find_message_by_id
changeset 43309
099e1dfb856b
parent 43293
f5d33dbc18a9
permissions
-rw-r--r--

Add Purple.Conversation.find_message_by_id

The method was added so that a protocol or plugin could easily lookup
for the reference for a message. This will be especially useful when a
protocol received a quoted message but only with an id.

43293
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Purple - Internet Messaging Library
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 * version 2 of the License, or (at your option) any later version.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 *
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 * Lesser General Public License for more details.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 *
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * License along with this library; if not, see <https://www.gnu.org/licenses/>.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 #include <glib.h>
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 #include <birb.h>
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include <purple.h>
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 /******************************************************************************
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26 * Tests
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 *****************************************************************************/
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 static void
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 test_purple_scheduler_new(void) {
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 PurpleScheduler *scheduler = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32 scheduler = purple_scheduler_new();
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 birb_assert_type(scheduler, PURPLE_TYPE_SCHEDULER);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 g_assert_true(G_IS_LIST_MODEL(scheduler));
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 g_assert_finalize_object(scheduler);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 }
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 static void
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 test_purple_scheduler_properties(void) {
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41 PurpleScheduler *scheduler = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 GType item_type = G_TYPE_INVALID;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 guint n_items = 0;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 scheduler = g_object_new(
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 PURPLE_TYPE_SCHEDULER,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47 NULL);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49 g_object_get(
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50 G_OBJECT(scheduler),
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 "item-type", &item_type,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52 "n-items", &n_items,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 NULL);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 g_assert_cmpuint(item_type, ==, PURPLE_TYPE_SCHEDULED_TASK);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 g_assert_cmpuint(n_items, ==, 0);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59 g_assert_finalize_object(scheduler);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 }
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62 static void
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 test_purple_scheduler_add_remove(void) {
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 PurpleScheduledTask *task = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65 PurpleScheduledTaskState state = PURPLE_SCHEDULED_TASK_STATE_UNSCHEDULED;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 PurpleScheduler *scheduler = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67 GDateTime *execute_at = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 GDateTime *now = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69 GError *error = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 guint counter = 0;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71 gboolean result = FALSE;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 scheduler = purple_scheduler_new();
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74 birb_assert_type(scheduler, PURPLE_TYPE_SCHEDULER);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75 g_assert_true(G_IS_LIST_MODEL(scheduler));
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77 /* Create our execute_at time. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 now = g_date_time_new_now_local();
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79 execute_at = g_date_time_add(now, 10 * G_TIME_SPAN_MINUTE);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80 g_clear_pointer(&now, g_date_time_unref);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 /* Wire up our signals. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83 birb_count_list_model_items_changed(G_LIST_MODEL(scheduler), &counter);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 /* Create the task. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86 task = purple_scheduled_task_new("test-scheduler", "Scheduler Tests",
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87 TRUE);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88 birb_assert_type(task, PURPLE_TYPE_SCHEDULED_TASK);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90 /* Make sure the task is unscheduled. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 state = purple_scheduled_task_get_state(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92 g_assert_cmpuint(state, ==, PURPLE_SCHEDULED_TASK_STATE_UNSCHEDULED);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94 /* Add the task to the scheduler. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 counter = 0;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
96 result = purple_scheduler_add_task(scheduler, task, execute_at, &error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
97
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98 g_assert_no_error(error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99 g_assert_true(result);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
100
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101 /* Make sure items changed was called once and that we have 1 item in the
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102 * list model.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104 g_assert_cmpuint(counter, ==, 1);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105 birb_assert_list_model_n_items(scheduler, 1);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107 /* Make sure that the task got scheduled. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
108 state = purple_scheduled_task_get_state(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
109 g_assert_cmpuint(state, ==, PURPLE_SCHEDULED_TASK_STATE_SCHEDULED);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
111 /* Remove the task. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
112 counter = 0;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
113
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
114 result = purple_scheduler_remove_task(scheduler,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
115 purple_scheduled_task_get_id(task));
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
116 g_assert_true(result);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
117
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
118 /* Make sure items changed was called once and that the model empty. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
119 g_assert_cmpuint(counter, ==, 1);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
120 birb_assert_list_model_n_items(scheduler, 0);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
121
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
122 /* Make sure the that the task got cancelled. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
123 state = purple_scheduled_task_get_state(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
124 g_assert_cmpuint(state, ==, PURPLE_SCHEDULED_TASK_STATE_CANCELLED);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
125
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
126 /* After removal from the scheduler, only our reference should exist. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
127 g_assert_finalize_object(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
128
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
129 /* Clean up the scheduler. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
130 g_assert_finalize_object(scheduler);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
131
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
132 g_clear_pointer(&execute_at, g_date_time_unref);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
133 }
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
134
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
135 static void
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
136 test_purple_scheduler_add_already_scheduled(void) {
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
137 PurpleScheduledTask *task = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
138 PurpleScheduler *scheduler = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
139 GDateTime *original_execute_at = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
140 GDateTime *updated_execute_at = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
141 GError *error = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
142 gboolean result = FALSE;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
143
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
144 scheduler = purple_scheduler_new();
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
145
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
146 /* Create the task. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
147 task = purple_scheduled_task_new("test-scheduler", "Scheduler Tests",
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
148 TRUE);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
149
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
150 /* Schedule the task and store the original execute_at. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
151 result = purple_scheduled_task_schedule_relative(task,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
152 10 * G_TIME_SPAN_MILLISECOND,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
153 &error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
154 g_assert_no_error(error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
155 g_assert_true(result);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
156
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
157 original_execute_at = purple_scheduled_task_get_execute_at(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
158 if(original_execute_at != NULL) {
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
159 g_date_time_ref(original_execute_at);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
160 }
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
161
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
162 /* Add the task to the scheduler. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
163 result = purple_scheduler_add_task_relative(scheduler,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
164 task,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
165 100 * G_TIME_SPAN_MILLISECOND,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
166 &error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
167 g_assert_no_error(error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
168 g_assert_true(result);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
169
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
170 /* Get the execute time of the task and verify that it is not the same as
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
171 * the original time.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
172 */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
173 updated_execute_at = purple_scheduled_task_get_execute_at(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
174 g_assert_false(birb_date_time_equal(original_execute_at,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
175 updated_execute_at));
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
176
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
177 /* Clean up everything. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
178 g_assert_finalize_object(scheduler);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
179 g_assert_finalize_object(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
180 g_clear_pointer(&original_execute_at, g_date_time_unref);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
181 }
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
182
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
183 static void
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
184 test_purple_scheduler_double_add(void) {
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
185 PurpleScheduledTask *task = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
186 PurpleScheduledTaskState state = PURPLE_SCHEDULED_TASK_STATE_UNSCHEDULED;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
187 PurpleScheduler *scheduler = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
188 GDateTime *execute_at = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
189 GDateTime *now = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
190 GError *error = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 guint counter = 0;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
192 gboolean result = FALSE;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
193
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
194 scheduler = purple_scheduler_new();
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
195 birb_assert_type(scheduler, PURPLE_TYPE_SCHEDULER);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
196 g_assert_true(G_IS_LIST_MODEL(scheduler));
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
197
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
198 /* Create our execute_at time. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
199 now = g_date_time_new_now_local();
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
200 execute_at = g_date_time_add(now, 10 * G_TIME_SPAN_MINUTE);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
201 g_clear_pointer(&now, g_date_time_unref);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
202
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
203 /* Wire up our signals. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
204 birb_count_list_model_items_changed(G_LIST_MODEL(scheduler), &counter);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
205
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
206 /* Create the task. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
207 task = purple_scheduled_task_new("test-scheduler", "Scheduler Tests",
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
208 TRUE);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
209 birb_assert_type(task, PURPLE_TYPE_SCHEDULED_TASK);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
210
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
211 /* Make sure the task is unscheduled. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
212 state = purple_scheduled_task_get_state(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
213 g_assert_cmpuint(state, ==, PURPLE_SCHEDULED_TASK_STATE_UNSCHEDULED);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
214
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
215 /* Add the task to the scheduler. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
216 counter = 0;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
217 result = purple_scheduler_add_task(scheduler, task, execute_at, &error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
218
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
219 g_assert_no_error(error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
220 g_assert_true(result);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
221
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
222 /* Make sure items changed was called once and that we have 1 item in the
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
223 * list model.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
224 */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
225 g_assert_cmpuint(counter, ==, 1);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
226 birb_assert_list_model_n_items(scheduler, 1);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
228 /* Make sure that the task got scheduled. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
229 state = purple_scheduled_task_get_state(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
230 g_assert_cmpuint(state, ==, PURPLE_SCHEDULED_TASK_STATE_SCHEDULED);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
231
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
232 /* Now add the task again. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
233 counter = 0;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
234 result = purple_scheduler_add_task(scheduler, task, execute_at, &error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
235 g_assert_error(error,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236 PURPLE_SCHEDULER_ERROR,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
237 PURPLE_SCHEDULER_ERROR_TASK_EXISTS);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
238 g_clear_error(&error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
239 g_assert_false(result);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
240
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
241 /* Make sure the items-changed signal wasn't called and that we still only
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
242 * have one item in the list.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
243 */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
244 g_assert_cmpuint(counter, ==, 0);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
245 birb_assert_list_model_n_items(scheduler, 1);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
246
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
247 /* Cleanup. We don't remove the task because we want to make sure the
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
248 * scheduler will cancel it when it shuts down. Also the task is last as
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
249 * it's still known to the scheduler.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
250 */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
251 g_assert_finalize_object(scheduler);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
252
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
253 state = purple_scheduled_task_get_state(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
254 g_assert_cmpuint(state, ==, PURPLE_SCHEDULED_TASK_STATE_CANCELLED);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
255
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
256 g_assert_finalize_object(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
257
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
258 g_clear_pointer(&execute_at, g_date_time_unref);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
259 }
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
260
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
261 static void
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
262 test_purple_scheduler_double_remove(void) {
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
263 PurpleScheduledTask *task = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
264 PurpleScheduledTaskState state = PURPLE_SCHEDULED_TASK_STATE_UNSCHEDULED;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
265 PurpleScheduler *scheduler = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
266 GDateTime *execute_at = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
267 GDateTime *now = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
268 GError *error = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
269 guint counter = 0;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
270 gboolean result = FALSE;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
271
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
272 scheduler = purple_scheduler_new();
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
273 birb_assert_type(scheduler, PURPLE_TYPE_SCHEDULER);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
274 g_assert_true(G_IS_LIST_MODEL(scheduler));
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
275
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
276 /* Create our execute_at time. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
277 now = g_date_time_new_now_local();
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
278 execute_at = g_date_time_add(now, 10 * G_TIME_SPAN_MINUTE);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
279 g_clear_pointer(&now, g_date_time_unref);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
280
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
281 /* Wire up our signals. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
282 birb_count_list_model_items_changed(G_LIST_MODEL(scheduler), &counter);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
283
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
284 /* Create the task. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
285 task = purple_scheduled_task_new("test-scheduler", "Scheduler Tests",
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
286 TRUE);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
287 birb_assert_type(task, PURPLE_TYPE_SCHEDULED_TASK);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
288
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
289 /* Make sure the task is unscheduled. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
290 state = purple_scheduled_task_get_state(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
291 g_assert_cmpuint(state, ==, PURPLE_SCHEDULED_TASK_STATE_UNSCHEDULED);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
292
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
293 /* Add the task to the scheduler. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
294 counter = 0;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
295 result = purple_scheduler_add_task(scheduler, task, execute_at, &error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
296
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
297 g_assert_no_error(error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
298 g_assert_true(result);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
299
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
300 /* Make sure items changed was called once and that we have 1 item in the
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
301 * list model.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
302 */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
303 g_assert_cmpuint(counter, ==, 1);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
304 birb_assert_list_model_n_items(scheduler, 1);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
305
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
306 /* Make sure that the task got scheduled. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
307 state = purple_scheduled_task_get_state(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
308 g_assert_cmpuint(state, ==, PURPLE_SCHEDULED_TASK_STATE_SCHEDULED);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
309
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
310 /* Remove the task. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
311 counter = 0;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
312 result = purple_scheduler_remove_task(scheduler,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
313 purple_scheduled_task_get_id(task));
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
314 g_assert_true(result);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
315
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
316 /* Make sure the items-changed signal got called once and that we no longer
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
317 * have any items in the model.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
318 */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
319 g_assert_cmpuint(counter, ==, 1);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
320 birb_assert_list_model_n_items(scheduler, 0);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
321
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
322 /* Attempt to remove the task again. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
323 counter = 0;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
324 result = purple_scheduler_remove_task(scheduler,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
325 purple_scheduled_task_get_id(task));
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
326 g_assert_false(result);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
327
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
328 /* Make sure the items-changed signal wasn't called and that we still don't
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
329 * have any items in the model.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
330 */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
331 g_assert_cmpuint(counter, ==, 0);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
332 birb_assert_list_model_n_items(scheduler, 0);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
333
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
334 /* Cleanup. We remove task first because the scheduler shouldn't know about
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
335 * it anymore.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
336 */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
337 g_assert_finalize_object(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
338 g_assert_finalize_object(scheduler);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
339
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
340 g_clear_pointer(&execute_at, g_date_time_unref);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
341 }
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
342
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
343 /******************************************************************************
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
344 * Main
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
345 *****************************************************************************/
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
346 static void
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
347 test_purple_scheduler_execute_task_cb(PurpleScheduler *scheduler,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
348 PurpleScheduledTask *task,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
349 const char *task_type,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
350 gpointer data)
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
351 {
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
352 PurpleScheduledTaskState state = PURPLE_SCHEDULED_TASK_STATE_UNSCHEDULED;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
353 const char *actual_task_type = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
354 guint *counter = data;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
355
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
356 birb_assert_type(scheduler, PURPLE_TYPE_SCHEDULER);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
357
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
358 state = purple_scheduled_task_get_state(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
359 g_assert_cmpuint(state, ==, PURPLE_SCHEDULED_TASK_STATE_EXECUTING);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
360
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
361 actual_task_type = purple_scheduled_task_get_task_type(task);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
362 g_assert_cmpstr(actual_task_type, ==, task_type);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
363
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
364 *counter = *counter + 1;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
365 }
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
366
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
367 static void
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
368 test_purple_scheduler_signals_quit_cb(G_GNUC_UNUSED PurpleScheduler *scheduler,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
369 G_GNUC_UNUSED PurpleScheduledTask *task,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
370 G_GNUC_UNUSED const char *task_type,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
371 gpointer data)
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
372 {
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
373 g_main_loop_quit(data);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
374 }
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
375
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
376 static void
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
377 test_purple_scheduler_signals_timeout_cb(gpointer data) {
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
378 g_main_loop_quit(data);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
379
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
380 g_assert_not_reached();
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
381 }
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
382
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
383 static void
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
384 test_purple_scheduler_signals(void) {
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
385 PurpleScheduledTask *task1 = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
386 PurpleScheduledTask *task2 = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
387 PurpleScheduler *scheduler = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
388 GError *error = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
389 GMainLoop *loop = NULL;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
390 guint all_counter = 0;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
391 guint detailed_counter = 0;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
392 gboolean result = FALSE;
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
393
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
394 /* This test creates 2 tasks, one for 10ms from now and the second for 20ms
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
395 * from now. When the 20ms task is executed the main loop will be quit and
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
396 * allow the rest of the test to finish.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
397 *
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
398 * There is a 2 second timeout to make sure we don't hang the unit tests if
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
399 * something unexpected happens. We use 2 seconds because internally the
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
400 * tasks are scheduled with g_timeout_add_seconds which tries to schedule
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
401 * timeouts together to avoid excessive CPU wake ups, so 2 seconds should
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
402 * cover that.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
403 */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
404
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
405 /* Create the counter and add our signal handlers with and without the
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
406 * detail.
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
407 */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
408 scheduler = purple_scheduler_new();
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
409 g_signal_connect(scheduler,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
410 "execute-task",
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
411 G_CALLBACK(test_purple_scheduler_execute_task_cb),
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
412 &all_counter);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
413 g_signal_connect(scheduler,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
414 "execute-task::scheduler-test-2",
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
415 G_CALLBACK(test_purple_scheduler_execute_task_cb),
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
416 &detailed_counter);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
417
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
418 /* Add the first task. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
419 task1 = purple_scheduled_task_new("scheduler-test-1", "Scheduler Test 1",
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
420 TRUE);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
421 result = purple_scheduler_add_task_relative(scheduler,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
422 task1,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
423 10 * G_TIME_SPAN_MILLISECOND,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
424 &error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
425 g_assert_no_error(error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
426 g_assert_true(result);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
427
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
428 /* Add the second task. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
429 task2 = purple_scheduled_task_new("scheduler-test-2", "Scheduler Test 2",
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
430 FALSE);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
431 result = purple_scheduler_add_task_relative(scheduler,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
432 task2,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
433 20 * G_TIME_SPAN_MILLISECOND,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
434 &error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
435 g_assert_no_error(error);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
436 g_assert_true(result);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
437
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
438 /* Create the main loop to run the tasks. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
439 loop = g_main_loop_new(NULL, FALSE);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
440
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
441 /* Add a handler to quit the main loop when the second task is executed. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
442 g_signal_connect(scheduler,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
443 "execute-task::scheduler-test-2",
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
444 G_CALLBACK(test_purple_scheduler_signals_quit_cb),
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
445 loop);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
446
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
447 /* Add a timeout to avoid hangs on unexpected behavior. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
448 g_timeout_add_seconds_once(2, test_purple_scheduler_signals_timeout_cb,
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
449 loop);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
450
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
451 /* Run the main loop. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
452 g_main_loop_run(loop);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
453
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
454 g_clear_pointer(&loop, g_main_loop_unref);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
455
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
456 /* Make sure the counters are correct. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
457 g_assert_cmpuint(all_counter, ==, 2);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
458 g_assert_cmpuint(detailed_counter, ==, 1);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
459
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
460 /* Make sure the scheduler is empty. */
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
461 birb_assert_list_model_n_items(scheduler, 0);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
462
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
463 g_assert_finalize_object(scheduler);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
464 g_assert_finalize_object(task1);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
465 g_assert_finalize_object(task2);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
466 }
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
467
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
468 /******************************************************************************
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
469 * Main
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
470 *****************************************************************************/
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
471 int
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
472 main(int argc, char *argv[]) {
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
473 g_test_init(&argc, &argv, NULL);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
474 g_test_set_nonfatal_assertions();
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
475
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
476 g_test_add_func("/scheduler/new", test_purple_scheduler_new);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
477 g_test_add_func("/scheduler/properties", test_purple_scheduler_properties);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
478
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
479 g_test_add_func("/scheduler/add-remove", test_purple_scheduler_add_remove);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
480 g_test_add_func("/scheduler/add-already-scheduled",
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
481 test_purple_scheduler_add_already_scheduled);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
482 g_test_add_func("/scheduler/double-add", test_purple_scheduler_double_add);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
483 g_test_add_func("/scheduler/double-remove",
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
484 test_purple_scheduler_double_remove);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
485
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
486 g_test_add_func("/scheduler/signals", test_purple_scheduler_signals);
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
487
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
488 return g_test_run();
f5d33dbc18a9 Create Purple.Scheduler
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
489 }

mercurial