2
* Copyright © 2010 Canonical Ltd.
3
* By Mikkel Kamstrup Erlandsen <mikkel.kamstrup@canonical.com>
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License version 3 as
7
* published by the Free Software Foundation.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program. If not, see <http://www.gnu.org/licenses/>.
20
#include <glib-object.h>
21
#include "zeitgeist.h"
29
static void setup (Fixture *fix, gconstpointer data);
30
static void teardown (Fixture *fix, gconstpointer data);
33
setup (Fixture *fix, gconstpointer data)
35
fix->log = zeitgeist_log_new ();
36
fix->mainloop = g_main_loop_new (NULL, FALSE);
40
teardown (Fixture *fix, gconstpointer data)
42
g_object_unref (fix->log);
43
g_main_loop_unref (fix->mainloop);
47
_quit_main_loop (GMainLoop *mainloop)
49
g_main_loop_quit (mainloop);
54
_on_events_deleted (ZeitgeistLog *log,
56
GPtrArray *expected_events)
61
zeitgeist_log_delete_events_finish (log, res, &error);
64
g_critical ("Failed to get events: %s", error->message);
69
g_ptr_array_unref (expected_events);
73
_on_events_received (ZeitgeistLog *log,
75
GPtrArray *expected_events)
77
ZeitgeistResultSet *events;
80
ZeitgeistEvent *ev, *_ev;
85
events = zeitgeist_log_get_events_finish (log, res, &error);
88
g_critical ("Failed to get events: %s", error->message);
93
/* Assert that we got what we expected, and collect the event ids,
94
* so we can delete the events */
95
g_assert_cmpint (expected_events->len, ==, zeitgeist_result_set_size(events));
96
event_ids = g_array_sized_new (FALSE, FALSE, sizeof (guint32),
97
zeitgeist_result_set_size(events));
98
for (i = 0; i < zeitgeist_result_set_size(events); ++i)
100
ev = zeitgeist_result_set_next_value(events);
101
_ev = ZEITGEIST_EVENT (g_ptr_array_index (expected_events, i));
102
g_assert_cmpstr (zeitgeist_event_get_interpretation (ev), ==,
103
zeitgeist_event_get_interpretation (_ev));
104
g_assert_cmpstr (zeitgeist_event_get_manifestation (ev), ==,
105
zeitgeist_event_get_manifestation (_ev));
106
g_assert_cmpstr (zeitgeist_event_get_actor (ev), ==,
107
zeitgeist_event_get_actor (_ev));
108
g_assert_cmpint (zeitgeist_event_num_subjects (ev), ==,
109
zeitgeist_event_num_subjects (_ev));
110
// TODO: compare subjects
112
event_id = zeitgeist_event_get_id (ev);
113
g_array_append_val (event_ids, event_id);
116
/* This method call now owns event_ids */
117
zeitgeist_log_delete_events (log, event_ids, NULL,
118
(GAsyncReadyCallback) _on_events_deleted,
121
g_ptr_array_unref (events);
125
_on_events_inserted (ZeitgeistLog *log,
127
GPtrArray *expected_events)
133
event_ids = zeitgeist_log_insert_events_finish (log, res, &error);
136
g_critical ("Failed to insert events: %s", error->message);
137
g_error_free (error);
141
g_assert_cmpint (expected_events->len, ==, event_ids->len);
143
zeitgeist_log_get_events (log, event_ids, NULL,
144
(GAsyncReadyCallback) _on_events_received,
149
test_insert_get_delete (Fixture *fix, gconstpointer data)
152
ZeitgeistSubject *su;
153
GPtrArray *expected_events;
156
expected_events = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
157
ev = zeitgeist_event_new ();
158
su = zeitgeist_subject_new ();
159
zeitgeist_event_add_subject (ev, su);
160
g_ptr_array_add (expected_events, g_object_ref (ev));
161
/* ^^ Regarding the extra ref on ev above, it's not normally
162
* needed, but we need to keep them alive so we can compare the results
163
* against the expected values */
165
zeitgeist_event_set_interpretation (ev, "foo://Interp");
166
zeitgeist_event_set_manifestation (ev, "foo://Manif");
167
zeitgeist_event_set_actor (ev, "app://firefox.desktop");
169
zeitgeist_subject_set_uri (su, "file:///tmp/bar.txt");
170
zeitgeist_subject_set_interpretation (su, "foo://TextDoc");
171
zeitgeist_subject_set_manifestation (su, "foo://File");
172
zeitgeist_subject_set_mimetype (su, "text/plain");
173
zeitgeist_subject_set_origin (su, "file:///tmp");
174
zeitgeist_subject_set_text (su, "bar.txt");
175
zeitgeist_subject_set_storage (su, "bfb486f6-f5f8-4296-8871-0cc749cf8ef7");
177
/* This method call now owns all events, subjects, and the events array */
178
// FIXME: this should be different:
179
/* zeitgeist_log_insert_events (fix->log, NULL,
180
(GAsyncReadyCallback) _on_events_inserted,
184
zeitgeist_log_insert_events (fix->log, expected_events, NULL,
185
(GAsyncReadyCallback) _on_events_inserted,
187
g_assert_cmpint (expected_events->len, ==, 1);
189
g_timeout_add_seconds (1, (GSourceFunc) _quit_main_loop, fix->mainloop);
190
g_main_loop_run (fix->mainloop);
195
test_get_default (Fixture *fix, gconstpointer data) {
196
ZeitgeistLog *zeitgeist_log1, *zeitgeist_log2;
197
zeitgeist_log1 = zeitgeist_log_get_default ();
198
zeitgeist_log2 = zeitgeist_log_get_default ();
199
g_assert (zeitgeist_log1 == zeitgeist_log2);
207
g_test_init (&argc, &argv, NULL);
209
g_test_add ("/Zeitgeist/Log/InsertGetDelete", Fixture, NULL,
210
setup, test_insert_get_delete, teardown);
211
g_test_add ("/Zeitgeist/Log/GetDefault", Fixture, NULL,
212
NULL, test_get_default, NULL);