/* * Copyright (C) 2011 Philip Withnall * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see . * * Authors: Philip Withnall * */ using EdsTest; using E; using Folks; using Gee; public class StoreRemovedTests : EdsTest.TestCase { private GLib.MainLoop _main_loop; private IndividualAggregator _aggregator; public StoreRemovedTests () { base ("StoreRemoved"); this.add_test ("single store", this.test_single_store); } public void test_single_store () { this._main_loop = new GLib.MainLoop (null, false); this.eds_backend.reset (); /* Create a contact in the address book. */ var c1 = new Gee.HashMap (); Value? v = Value (typeof (string)); v.set_string ("Chancellor Brian Blessed"); c1.set ("full_name", (owned) v); v = Value (typeof (string)); v.set_string ("brian@example.com"); c1.set (Edsf.Persona.email_fields[0], (owned) v); this.eds_backend.add_contact (c1); /* Schedule the test to start with the main loop. */ this._test_single_store_part1_async.begin (); TestUtils.loop_run_with_timeout (this._main_loop, 5); /* We should have a single individual by now. */ assert (this._aggregator.individuals.size == 1); /* Part 2, where we remove the address book. */ this._test_single_store_part2_async.begin (); TestUtils.loop_run_with_timeout (this._main_loop, 5); /* The individual should be gone. */ assert (this._aggregator.individuals.size == 0); } private async void _test_single_store_part1_async () { yield this.eds_backend.commit_contacts_to_addressbook (); var store = BackendStore.dup (); yield store.prepare (); this._aggregator = IndividualAggregator.dup (); ulong signal_id = 0; signal_id = this._aggregator.individuals_changed_detailed.connect ( (changes) => { var added = changes.get_values (); var removed = changes.get_keys (); assert (added.size == 1); /* We don't really care what the individual is, as long as it's not * null. */ foreach (var i in added) { assert (i != null); } assert (removed.size == 1); foreach (var i in removed) { assert (i == null); } /* Success! */ this._main_loop.quit (); this._aggregator.disconnect (signal_id); }); try { yield this._aggregator.prepare (); } catch (GLib.Error e) { critical ("Error when calling prepare: %s", e.message); } } private async void _test_single_store_part2_async () { ulong signal_id = 0; signal_id = this._aggregator.individuals_changed_detailed.connect ( (changes) => { var added = changes.get_values (); var removed = changes.get_keys (); assert (added.size == 1); foreach (var i in added) { assert (i == null); } assert (removed.size == 1); /* We don't really care what the individual is, as long as it's not * null. */ foreach (var i in removed) { assert (i != null); } /* Success! */ this._main_loop.quit (); this._aggregator.disconnect (signal_id); }); /* Tear down the backend. This should remove all individuals. We check * for this above. */ this.eds_backend.tear_down (); this.eds_backend = null; } } public int main (string[] args) { Test.init (ref args); var tests = new StoreRemovedTests (); tests.register (); Test.run (); tests.final_tear_down (); return 0; }