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 |
Related bugs: |
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 |