~ubuntu-branches/ubuntu/saucy/zeitgeist/saucy

« back to all changes in this revision

Viewing changes to test/c/test-log.c

  • Committer: Luke Yelavich
  • Date: 2013-06-26 00:25:54 UTC
  • mfrom: (28.1.2 zeitgeist)
  • Revision ID: luke.yelavich@canonical.com-20130626002554-k570ix39vjum9v9p
Tags: 0.9.14-0ubuntu1
Merge branch lp:~zeitgeist/zeitgeist/saucy-packaging-0-9-14

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright © 2010 Canonical Ltd.
 
3
 *             By Mikkel Kamstrup Erlandsen <mikkel.kamstrup@canonical.com>
 
4
 *
 
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.
 
8
 *
 
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.
 
13
 *
 
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/>.
 
16
 *
 
17
 */
 
18
 
 
19
#include <glib.h>
 
20
#include <glib-object.h>
 
21
#include "zeitgeist.h"
 
22
 
 
23
typedef struct
 
24
{
 
25
  ZeitgeistLog *log;
 
26
  GMainLoop    *mainloop;
 
27
} Fixture;
 
28
 
 
29
static void setup    (Fixture *fix, gconstpointer data);
 
30
static void teardown (Fixture *fix, gconstpointer data);
 
31
 
 
32
static void
 
33
setup (Fixture *fix, gconstpointer data)
 
34
{
 
35
  fix->log = zeitgeist_log_new ();
 
36
  fix->mainloop = g_main_loop_new (NULL, FALSE);
 
37
}
 
38
 
 
39
static void
 
40
teardown (Fixture *fix, gconstpointer data)
 
41
{
 
42
  g_object_unref (fix->log);
 
43
  g_main_loop_unref (fix->mainloop);
 
44
}
 
45
 
 
46
static gboolean
 
47
_quit_main_loop (GMainLoop *mainloop)
 
48
{
 
49
  g_main_loop_quit (mainloop);
 
50
  return FALSE;
 
51
}
 
52
 
 
53
static void
 
54
_on_events_deleted (ZeitgeistLog *log,
 
55
                    GAsyncResult *res,
 
56
                    GPtrArray    *expected_events)
 
57
{
 
58
  GError    *error;
 
59
 
 
60
  error = NULL;
 
61
  zeitgeist_log_delete_events_finish (log, res, &error);
 
62
  if (error)
 
63
    {
 
64
      g_critical ("Failed to get events: %s", error->message);
 
65
      g_error_free (error);
 
66
      return;
 
67
    }
 
68
 
 
69
  g_ptr_array_unref (expected_events);
 
70
}
 
71
 
 
72
static void
 
73
_on_events_received (ZeitgeistLog *log,
 
74
                     GAsyncResult *res,
 
75
                     GPtrArray    *expected_events)
 
76
{
 
77
  ZeitgeistResultSet *events;
 
78
  GArray             *event_ids;
 
79
  GError             *error;
 
80
  ZeitgeistEvent     *ev, *_ev;
 
81
  gint                i;
 
82
  guint32             event_id;
 
83
 
 
84
  error = NULL;
 
85
  events = zeitgeist_log_get_events_finish (log, res, &error);
 
86
  if (error)
 
87
    {
 
88
      g_critical ("Failed to get events: %s", error->message);
 
89
      g_error_free (error);
 
90
      return;
 
91
    }
 
92
 
 
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)
 
99
    {
 
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
 
111
 
 
112
      event_id = zeitgeist_event_get_id (ev);
 
113
      g_array_append_val (event_ids, event_id);
 
114
    }
 
115
 
 
116
  /* This method call now owns event_ids */
 
117
  zeitgeist_log_delete_events (log, event_ids, NULL,
 
118
                               (GAsyncReadyCallback) _on_events_deleted,
 
119
                               expected_events);
 
120
 
 
121
  g_ptr_array_unref (events);
 
122
}
 
123
 
 
124
static void
 
125
_on_events_inserted (ZeitgeistLog *log,
 
126
                     GAsyncResult *res,
 
127
                     GPtrArray    *expected_events)
 
128
{
 
129
  GArray *event_ids;
 
130
  GError *error;
 
131
 
 
132
  error = NULL;
 
133
  event_ids = zeitgeist_log_insert_events_finish (log, res, &error);
 
134
  if (error)
 
135
    {
 
136
      g_critical ("Failed to insert events: %s", error->message);
 
137
      g_error_free (error);
 
138
      return;
 
139
    }
 
140
 
 
141
  g_assert_cmpint (expected_events->len, ==, event_ids->len);
 
142
 
 
143
  zeitgeist_log_get_events (log, event_ids, NULL, 
 
144
                            (GAsyncReadyCallback) _on_events_received,
 
145
                            expected_events);
 
146
}
 
147
 
 
148
static void
 
149
test_insert_get_delete (Fixture *fix, gconstpointer data)
 
150
{
 
151
  ZeitgeistEvent   *ev;
 
152
  ZeitgeistSubject *su;
 
153
  GPtrArray        *expected_events;
 
154
 
 
155
 
 
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 */
 
164
 
 
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");
 
168
 
 
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");
 
176
 
 
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,
 
181
                               expected_events,
 
182
                               ev);
 
183
  */
 
184
  zeitgeist_log_insert_events (fix->log, expected_events, NULL,
 
185
                               (GAsyncReadyCallback) _on_events_inserted,
 
186
                               expected_events);
 
187
  g_assert_cmpint (expected_events->len, ==, 1);
 
188
 
 
189
  g_timeout_add_seconds (1, (GSourceFunc) _quit_main_loop, fix->mainloop);
 
190
  g_main_loop_run (fix->mainloop);
 
191
 
 
192
}
 
193
 
 
194
static void
 
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);
 
200
}
 
201
 
 
202
int
 
203
main (int   argc,
 
204
      char *argv[])
 
205
{
 
206
  g_type_init();
 
207
  g_test_init (&argc, &argv, NULL);
 
208
 
 
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);
 
213
 
 
214
  return g_test_run();
 
215
}