dee

Merge lp:~mhr3/dee/more-tests into lp:dee

Proposed by Michal Hruby
Status: Superseded
Proposed branch: lp:~mhr3/dee/more-tests
Merge into: lp:dee
Diff against target: 405 lines (+206/-21)
6 files modified
src/dee-marshal.list (+0/-9)
src/dee-model.c (+3/-3)
src/dee-serializable-model.c (+29/-7)
tests/test-filter-model.c (+65/-2)
tests/test-model-rows.c (+60/-0)
tests/test-transaction.c (+49/-0)
To merge this branch: bzr merge lp:~mhr3/dee/more-tests
Reviewer Review Type Date Requested Status
Unity Team Pending
Review via email: mp+152481@code.launchpad.net

This proposal has been superseded by a proposal from 2013-03-08.

Commit message

Increase the test coverage

Description of the change

Increase the test coverage

To post a comment you must log in.
lp:~mhr3/dee/more-tests updated
406. By Michal Hruby

Merge trunk

407. By Michal Hruby

Act on review comments

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/dee-marshal.list'
2--- src/dee-marshal.list 2012-01-05 19:27:06 +0000
3+++ src/dee-marshal.list 2013-03-08 18:23:30 +0000
4@@ -1,12 +1,3 @@
5-# DeeSharedModel::RowsAdded, DbusSharedModel::RowsChanged
6-VOID:BOXED,BOXED,BOXED
7-
8-# DeeSharedModel::RowsRemoved
9-VOID:BOXED,BOXED
10-
11 # DeeSharedModel
12 VOID:UINT64,UINT64
13
14-# DeePeer::bye
15-VOID:STRING,STRING
16-
17
18=== modified file 'src/dee-model.c'
19--- src/dee-model.c 2012-11-27 17:49:57 +0000
20+++ src/dee-model.c 2013-03-08 18:23:30 +0000
21@@ -1601,7 +1601,7 @@
22 * dee_model_insert_row_sorted() to insert rows in the model.
23 *
24 * Returns: (transfer none) (type Dee.ModelIter): If @out_was_found is set to
25- * %TRUE then a #DeeModelIter pointing to the first matching row.
26+ * %TRUE then a #DeeModelIter pointing to the last matching row.
27 * If it is %FALSE then the iter pointing to the row just after where
28 * @row_spec_would have been inserted.
29 */
30@@ -1649,7 +1649,7 @@
31 * to insert rows in the model.
32 *
33 * Returns: (transfer none) (type Dee.ModelIter): If @out_was_found is set to
34- * %TRUE then a #DeeModelIter pointing to the first matching row.
35+ * %TRUE then a #DeeModelIter pointing to the last matching row.
36 * If it is %FALSE then the iter pointing to the row just after where
37 * @row_spec_would have been inserted.
38 */
39@@ -1693,7 +1693,7 @@
40 * dee_model_insert_row_sorted() to insert rows in the model.
41 *
42 * Returns: (transfer none) (type Dee.ModelIter): If @out_was_found is set to
43- * %TRUE then a #DeeModelIter pointing to the first matching row.
44+ * %TRUE then a #DeeModelIter pointing to the last matching row.
45 * If it is %FALSE then the iter pointing to the row just after where
46 * @row_spec_would have been inserted.
47 */
48
49=== modified file 'src/dee-serializable-model.c'
50--- src/dee-serializable-model.c 2012-11-28 16:34:43 +0000
51+++ src/dee-serializable-model.c 2013-03-08 18:23:30 +0000
52@@ -849,13 +849,17 @@
53 gpointer user_data)
54 {
55 DeeModelIter *iter;
56+ gboolean was_found;
57
58 g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), NULL);
59 g_return_val_if_fail (row_members != NULL, NULL);
60 g_return_val_if_fail (cmp_func != NULL, NULL);
61
62 iter = dee_model_find_row_sorted (self, row_members, cmp_func,
63- user_data, NULL);
64+ user_data, &was_found);
65+ if (was_found)
66+ iter = dee_model_next (self, iter);
67+
68 return dee_model_insert_row_before (self, iter, row_members);
69 }
70
71@@ -866,14 +870,16 @@
72 gpointer user_data,
73 gboolean *out_was_found)
74 {
75- DeeModelIter *iter, *end;
76+ DeeModelIter *iter, *end, *last_matching;
77 GVariant **row_buf;
78+ gint cmp_result;
79 guint n_cols, i;
80
81 g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), NULL);
82 g_return_val_if_fail (row_spec != NULL, NULL);
83 g_return_val_if_fail (cmp_func != NULL, NULL);
84
85+ last_matching = NULL;
86 if (out_was_found != NULL) *out_was_found = FALSE;
87 n_cols = dee_model_get_n_columns (self);
88
89@@ -885,10 +891,25 @@
90 while (iter != end)
91 {
92 dee_model_get_row (self, iter, row_buf);
93- if (cmp_func(row_buf, row_spec, user_data) >= 0)
94- {
95- for (i = 0; i < n_cols; i++) g_variant_unref (row_buf[i]);
96- if (out_was_found != NULL) *out_was_found = TRUE;
97+ cmp_result = cmp_func (row_buf, row_spec, user_data);
98+ /* we're returning last matching row to make ordering
99+ * of insert_row_sorted stable and fast */
100+ while (cmp_result == 0)
101+ {
102+ last_matching = iter;
103+ iter = dee_model_next (self, iter);
104+ if (iter == end)
105+ {
106+ iter = last_matching;
107+ break;
108+ }
109+ for (i = 0; i < n_cols; i++) g_variant_unref (row_buf[i]);
110+ dee_model_get_row (self, iter, row_buf);
111+ cmp_result = cmp_func (row_buf, row_spec, user_data);
112+ }
113+ if (cmp_result >= 0)
114+ {
115+ for (i = 0; i < n_cols; i++) g_variant_unref (row_buf[i]);
116 break;
117 }
118
119@@ -896,7 +917,8 @@
120 iter = dee_model_next (self, iter);
121 }
122
123- return iter;
124+ if (out_was_found != NULL && last_matching != NULL) *out_was_found = TRUE;
125+ return last_matching ? last_matching : iter;
126 }
127
128 static void
129
130=== modified file 'tests/test-filter-model.c'
131--- tests/test-filter-model.c 2013-01-04 17:53:43 +0000
132+++ tests/test-filter-model.c 2013-03-08 18:23:30 +0000
133@@ -39,6 +39,8 @@
134 gconstpointer data);
135 static void test_discard_all_append_notify (FilterFixture *fix,
136 gconstpointer data);
137+static void test_change_backend (FilterFixture *fix,
138+ gconstpointer data);
139 static void test_collator_asc (FilterFixture *fix,
140 gconstpointer data);
141 static void test_collator_desc (FilterFixture *fix,
142@@ -64,6 +66,8 @@
143 setup, test_discard_all, teardown);
144 g_test_add (DOMAIN"/DiscardAllAppendNotify", FilterFixture, 0,
145 setup, test_discard_all_append_notify, teardown);
146+ g_test_add (DOMAIN"/ChangeBackend", FilterFixture, 0,
147+ setup, test_change_backend, teardown);
148 g_test_add (DOMAIN"/CollatorAscending", FilterFixture, 0,
149 setup, test_collator_asc, teardown);
150 g_test_add (DOMAIN"/CollatorDescending", FilterFixture, 0,
151@@ -71,7 +75,7 @@
152 g_test_add (DOMAIN"/Key", FilterFixture, 0,
153 setup, test_key, teardown);
154 g_test_add (DOMAIN"/Any", FilterFixture, 0,
155- setup, test_any, teardown);
156+ setup, test_any, teardown);
157 g_test_add (DOMAIN"/Regex", FilterFixture, 0,
158 setup, test_regex, teardown);
159 }
160@@ -201,7 +205,10 @@
161 g_assert (!dee_model_is_last (m, iter));
162 g_assert_cmpint (1, ==, dee_model_get_int32 (m, iter, 0));
163 g_assert_cmpstr ("One", ==, dee_model_get_string (m, iter, 1));
164-
165+
166+ /* Let's also test dee_model_prev at least once */
167+ g_assert (dee_model_get_first_iter (m) == dee_model_prev (m, iter));
168+
169 iter = dee_model_next (m, iter);
170 g_assert (!dee_model_is_first (m, iter));
171 g_assert (!dee_model_is_last (m, iter));
172@@ -335,6 +342,62 @@
173 g_object_unref (m);
174 }
175
176+static void
177+test_change_backend (FilterFixture *fix, gconstpointer data)
178+{
179+ DeeFilter filter;
180+
181+ dee_filter_new (append_all_model_map,
182+ append_all_model_notify,
183+ fix,
184+ NULL,
185+ &filter);
186+
187+ DeeModel *m = dee_filter_model_new (fix->model, &filter);
188+ g_assert_cmpint (3, ==, dee_model_get_n_rows (fix->model));
189+
190+ DeeModelIter *iter = dee_model_get_first_iter (m);
191+ g_assert (dee_model_is_first (m, iter));
192+ g_assert (!dee_model_is_last (m, iter));
193+ g_assert_cmpint (0, ==, dee_model_get_int32 (m, iter, 0));
194+ g_assert_cmpstr ("Zero", ==, dee_model_get_string (m, iter, 1));
195+ g_assert_cmpuint (0, ==, dee_model_get_position (m, iter));
196+
197+ iter = dee_model_get_first_iter (fix->model);
198+ dee_model_remove (fix->model, iter);
199+
200+ g_assert_cmpint (2, ==, dee_model_get_n_rows (fix->model));
201+ g_assert_cmpint (2, ==, dee_model_get_n_rows (m));
202+
203+ iter = dee_model_get_first_iter (fix->model);
204+ dee_model_remove (fix->model, iter);
205+
206+ g_assert_cmpint (1, ==, dee_model_get_n_rows (fix->model));
207+ g_assert_cmpint (1, ==, dee_model_get_n_rows (m));
208+
209+ iter = dee_model_get_first_iter (m);
210+ g_assert (dee_model_is_first (m, iter));
211+ g_assert (!dee_model_is_last (m, iter));
212+ g_assert_cmpint (2, ==, dee_model_get_int32 (m, iter, 0));
213+ g_assert_cmpstr ("Two", ==, dee_model_get_string (m, iter, 1));
214+
215+ iter = dee_model_get_first_iter (fix->model);
216+ dee_model_set (fix->model, iter, -1, "Minus one");
217+
218+ iter = dee_model_get_first_iter (m);
219+ g_assert (dee_model_is_first (m, iter));
220+ g_assert (!dee_model_is_last (m, iter));
221+ g_assert_cmpint (-1, ==, dee_model_get_int32 (m, iter, 0));
222+ g_assert_cmpstr ("Minus one", ==, dee_model_get_string (m, iter, 1));
223+ g_assert_cmpuint (0, ==, dee_model_get_position (m, iter));
224+
225+ /* and finally remove the last row via the filter model */
226+ dee_model_remove (m, iter);
227+
228+ g_assert_cmpint (0, ==, dee_model_get_n_rows (m));
229+ g_assert_cmpint (0, ==, dee_model_get_n_rows (fix->model));
230+}
231+
232 /* Test dee_filter_new_collator() ascending */
233 static void
234 test_collator_asc (FilterFixture *fix, gconstpointer data)
235
236=== modified file 'tests/test-model-rows.c'
237--- tests/test-model-rows.c 2012-11-23 10:57:29 +0000
238+++ tests/test-model-rows.c 2013-03-08 18:23:30 +0000
239@@ -53,6 +53,7 @@
240 static void test_iter_backwards (RowsFixture *fix, gconstpointer data);
241 static void test_illegal_access (RowsFixture *fix, gconstpointer data);
242 static void test_sorted (RowsFixture *fix, gconstpointer data);
243+static void test_sort_stable (RowsFixture *fix, gconstpointer data);
244 static void test_sorted_with_sizes (RowsFixture *fix, gconstpointer data);
245 static void test_named_cols_append (RowsFixture *fix, gconstpointer data);
246 static void test_named_cols_fields (RowsFixture *fix, gconstpointer data);
247@@ -159,6 +160,13 @@
248 g_test_add (TXN_DOMAIN"/Sorted/WithSizes", RowsFixture, 0,
249 txn_rows_setup, test_sorted_with_sizes, txn_rows_teardown);
250
251+ g_test_add (SEQ_DOMAIN"/StableSorted", RowsFixture, 0,
252+ seq_rows_setup, test_sort_stable, seq_rows_teardown);
253+ g_test_add (PROXY_DOMAIN"/StableSorted", RowsFixture, 0,
254+ proxy_rows_setup, test_sort_stable, proxy_rows_teardown);
255+ g_test_add (TXN_DOMAIN"/StableSorted", RowsFixture, 0,
256+ txn_rows_setup, test_sort_stable, txn_rows_teardown);
257+
258 g_test_add (SEQ_DOMAIN"/NamedColumns/Append", RowsFixture, 0,
259 seq_rows_setup, test_named_cols_append, seq_rows_teardown);
260 g_test_add (PROXY_DOMAIN"/NamedColumns/Append", RowsFixture, 0,
261@@ -593,6 +601,13 @@
262 }
263
264 static gint
265+cmp_constant (GVariant **row1, GVariant **row2, gpointer user_data)
266+{
267+ g_assert_cmpstr (user_data, ==, "test-user-data");
268+ return 0;
269+}
270+
271+static gint
272 cmp_col_0 (GVariant **row1, GVariant **row2, gpointer user_data)
273 {
274 g_assert_cmpstr (user_data, ==, "test-user-data");
275@@ -679,6 +694,51 @@
276 g_assert (result == hter);
277 }
278
279+static void
280+test_sort_stable (RowsFixture *fix, gconstpointer data)
281+{
282+ DeeModelIter *hter, *iter, *jter, *kter;
283+
284+ /* FINAL MODEL: [(25,s), (26,s), (27,s), (28,s)]
285+ * ~= [hter, iter, jter, kter] */
286+
287+ /* Insert the first row */
288+ iter = dee_model_insert_sorted (fix->model, cmp_constant, "test-user-data",
289+ 25, "Stable");
290+ g_assert (iter != dee_model_get_last_iter (fix->model));
291+ g_assert (iter == dee_model_get_first_iter (fix->model));
292+
293+ /* Second row */
294+ kter = dee_model_insert_sorted (fix->model, cmp_constant, "test-user-data",
295+ 26, "Stable");
296+ g_assert (kter != dee_model_get_last_iter (fix->model));
297+ g_assert (kter != dee_model_get_first_iter (fix->model));
298+ g_assert (iter == dee_model_get_first_iter (fix->model));
299+ g_assert (kter != iter);
300+
301+ g_assert_cmpint (2, ==, dee_model_get_n_rows (fix->model));
302+ g_assert (kter == dee_model_next (fix->model, iter));
303+
304+ /* Third row */
305+ jter = dee_model_insert_sorted (fix->model, cmp_constant, "test-user-data",
306+ 27, "Stable");
307+ g_assert (jter != dee_model_get_last_iter (fix->model));
308+ g_assert (jter != dee_model_get_first_iter (fix->model));
309+ g_assert (iter == dee_model_get_first_iter (fix->model));
310+ g_assert (jter != iter);
311+ g_assert (jter != kter);
312+
313+ g_assert (jter == dee_model_next (fix->model, kter));
314+ g_assert (dee_model_get_last_iter (fix->model) == dee_model_next (fix->model, jter));
315+
316+ /* Fourth row */
317+ hter = dee_model_insert_sorted (fix->model, cmp_constant, "test-user-data",
318+ 28, "Stable");
319+ g_assert (hter == dee_model_next (fix->model, jter));
320+
321+ g_assert_cmpint (4, ==, dee_model_get_n_rows (fix->model));
322+}
323+
324 static gint
325 sized_cmp_col_0 (GVariant **row1, guint row1_length,
326 GVariant **row2, guint row2_length, gpointer user_data)
327
328=== modified file 'tests/test-transaction.c'
329--- tests/test-transaction.c 2012-02-03 13:24:05 +0000
330+++ tests/test-transaction.c 2013-03-08 18:23:30 +0000
331@@ -45,6 +45,16 @@
332 }
333
334 static void
335+setup_basic_types (Fixture *fix, gconstpointer data)
336+{
337+ fix->model = dee_sequence_model_new ();
338+ dee_model_set_schema (fix->model, "b", "y", "i", "u", "x", "t", "d", "s", NULL);
339+
340+ /* The txn must be created during the tests because we need to verify how
341+ * it works when constructed on top of various states of the fix->model */
342+}
343+
344+static void
345 setup_proxy (Fixture *fix, gconstpointer data)
346 {
347 DeeModel *backend = dee_sequence_model_new ();
348@@ -85,6 +95,8 @@
349 g_assert_cmpint (dee_model_get_n_columns (fix->txn), == , 2);
350 g_assert_cmpstr (dee_model_get_column_schema (fix->txn, 0), ==, "s");
351 g_assert_cmpstr (dee_model_get_column_schema (fix->txn, 1), ==, "i");
352+
353+ g_assert (dee_transaction_get_target (DEE_TRANSACTION (fix->txn)) == fix->model);
354 }
355
356 static void
357@@ -1140,6 +1152,40 @@
358 g_assert_cmpint (dee_model_get_n_rows (fix->model), ==, 1);
359 }
360
361+static void
362+test_basic_types (Fixture *fix, gconstpointer data)
363+{
364+ GError *error;
365+ fix->txn = dee_transaction_new (fix->model);
366+
367+ dee_model_append (fix->txn, TRUE, 27, 27, 27,
368+ G_GINT64_CONSTANT (27), G_GUINT64_CONSTANT (27),
369+ 27.0, "TwentySeven");
370+
371+ DeeModelIter *iter = dee_model_get_first_iter (fix->txn);
372+ g_assert (dee_model_get_bool (fix->txn, iter, 0) == TRUE);
373+ g_assert (dee_model_get_uchar (fix->txn, iter, 1) == 27);
374+ g_assert (dee_model_get_int32 (fix->txn, iter, 2) == 27);
375+ g_assert (dee_model_get_uint32 (fix->txn, iter, 3) == 27);
376+ g_assert (dee_model_get_int64 (fix->txn, iter, 4) == 27);
377+ g_assert (dee_model_get_uint64 (fix->txn, iter, 5) == 27);
378+ g_assert (ABS (dee_model_get_double (fix->txn, iter, 6) - 27.0) <= 0.001);
379+ g_assert_cmpstr ("TwentySeven", ==, dee_model_get_string (fix->txn, iter, 7));
380+ g_assert_cmpstr ("s", ==, g_variant_get_type_string (dee_model_get_value (fix->txn, iter, 7)));
381+
382+ /* COMMIT */
383+ error = NULL;
384+ if (!dee_transaction_commit (DEE_TRANSACTION (fix->txn), &error))
385+ {
386+ g_critical ("Transaction failed to commit: %s", error->message);
387+ g_error_free (error);
388+ }
389+ if (error)
390+ {
391+ g_assert_not_reached ();
392+ }
393+}
394+
395 // FIXME tags
396
397 void
398@@ -1238,5 +1284,8 @@
399 setup, test_double_commit, teardown);
400 g_test_add (PROXY_DOMAIN"/DoubleCommit", Fixture, 0,
401 setup_proxy, test_double_commit, teardown);
402+
403+ g_test_add (DOMAIN"/BasicTypes", Fixture, 0,
404+ setup_basic_types, test_basic_types, teardown);
405 }
406

Subscribers

People subscribed via source and target branches

to all changes: