[folks] Add test to match via name similarity
- From: Raul Gutierrez Segales <raulgs src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [folks] Add test to match via name similarity
- Date: Sat, 9 Apr 2011 00:44:20 +0000 (UTC)
commit 92e829d0ea3d900a08aef1ff01887016c6595414
Author: Raul Gutierrez Segales <raul gutierrez segales collabora co uk>
Date: Fri Apr 8 23:59:00 2011 +0100
Add test to match via name similarity
tests/tracker/Makefile.am | 6 +
tests/tracker/match-name.vala | 268 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 274 insertions(+), 0 deletions(-)
---
diff --git a/tests/tracker/Makefile.am b/tests/tracker/Makefile.am
index 612b091..ea6d52a 100644
--- a/tests/tracker/Makefile.am
+++ b/tests/tracker/Makefile.am
@@ -97,6 +97,7 @@ noinst_PROGRAMS = \
match-email-addresses \
match-known-emails \
match-phone-number \
+ match-name \
$(NULL)
backend_store_key_file=$(srcdir)/data/backend-tracker-only.ini
@@ -327,6 +328,10 @@ match_phone_number_SOURCES = \
match-phone-number.vala \
$(NULL)
+match_name_SOURCES = \
+ match-name.vala \
+ $(NULL)
+
CLEANFILES = \
*.pid \
@@ -390,6 +395,7 @@ MAINTAINERCLEANFILES = \
match_email_addresses.stamp \
match_known_emails.stamp \
match_phone_number.stamp \
+ match_name.stamp \
$(NULL)
EXTRA_DIST = \
diff --git a/tests/tracker/match-name.vala b/tests/tracker/match-name.vala
new file mode 100644
index 0000000..e3acf85
--- /dev/null
+++ b/tests/tracker/match-name.vala
@@ -0,0 +1,268 @@
+/*
+ * Copyright (C) 2011 Collabora Ltd.
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ *
+ * Authors: Raul Gutierrez Segales <raul gutierrez segales collabora co uk>
+ *
+ */
+
+using Tracker.Sparql;
+using TrackerTest;
+using Folks;
+using Gee;
+
+public class MatchNameTests : Folks.TestCase
+{
+ private GLib.MainLoop _main_loop;
+ private TrackerTest.Backend _tracker_backend;
+ private IndividualAggregator _aggregator = null;
+ private string _persona_fullname_1 = "Bernie Innocenti";
+ private string _persona_fullname_2 = "Bernardo H. Innocenti";
+ private bool _added_personas;
+ private string _individual_id_1 = "";
+ private string _individual_id_2 = "";
+ private Folks.MatchResult _match;
+ private Trf.PersonaStore _pstore;
+
+ public MatchNameTests ()
+ {
+ base ("MatchNameTests");
+
+ this._tracker_backend = new TrackerTest.Backend ();
+
+ this.add_test ("test potential match by name #1 ",
+ this.test_match_name_1);
+ this.add_test ("test potential match by name #2 ",
+ this.test_match_name_2);
+ this.add_test ("test potential match by name #3 ",
+ this.test_match_name_3);
+ }
+
+ public override void set_up ()
+ {
+ }
+
+ public override void tear_down ()
+ {
+ this._tracker_backend.tear_down ();
+ }
+
+ public void test_match_name_1 ()
+ {
+ this._main_loop = new GLib.MainLoop (null, false);
+
+ this._match = Folks.MatchResult.MIN;
+ this._added_personas = false;
+ this._persona_fullname_1 = "Bernie Innocenti";
+ this._persona_fullname_2 = "Bernardo H. Innocenti";
+ this._individual_id_1 = "";
+ this._individual_id_2 = "";
+
+ this._test_match_name_async ();
+
+ Timeout.add_seconds (5, () =>
+ {
+ this._main_loop.quit ();
+ assert_not_reached ();
+ });
+
+ this._main_loop.run ();
+
+ assert (this._match >= Folks.MatchResult.MEDIUM);
+ }
+
+ public void test_match_name_2 ()
+ {
+ this._main_loop = new GLib.MainLoop (null, false);
+
+ this._match = Folks.MatchResult.MIN;
+ this._added_personas = false;
+ this._persona_fullname_1 = "AAAA BBBBB";
+ this._persona_fullname_2 = "CCCCC DDDDD";
+ this._individual_id_1 = "";
+ this._individual_id_2 = "";
+
+ this._test_match_name_async ();
+
+ Timeout.add_seconds (5, () =>
+ {
+ this._main_loop.quit ();
+ assert_not_reached ();
+ });
+
+ this._main_loop.run ();
+
+ assert (this._match <= Folks.MatchResult.LOW);
+ }
+
+ public void test_match_name_3 ()
+ {
+ this._main_loop = new GLib.MainLoop (null, false);
+
+ this._match = Folks.MatchResult.MIN;
+ this._added_personas = false;
+ this._persona_fullname_1 = "Travis Reitter";
+ this._persona_fullname_2 = "Travis R.";
+ this._individual_id_1 = "";
+ this._individual_id_2 = "";
+
+ this._test_match_name_async ();
+
+ Timeout.add_seconds (5, () =>
+ {
+ this._main_loop.quit ();
+ assert_not_reached ();
+ });
+
+ this._main_loop.run ();
+
+ assert (this._match >= Folks.MatchResult.MEDIUM);
+ }
+
+ private async void _test_match_name_async ()
+ {
+ var store = BackendStore.dup ();
+ yield store.prepare ();
+
+ if (this._aggregator == null)
+ {
+ this._aggregator = new IndividualAggregator ();
+ this._aggregator.individuals_changed.connect
+ (this._individuals_changed_cb);
+ }
+
+ try
+ {
+ yield this._aggregator.prepare ();
+ this._pstore = null;
+ foreach (var backend in store.enabled_backends)
+ {
+ this._pstore =
+ (Trf.PersonaStore) backend.persona_stores.lookup ("tracker");
+ if (this._pstore != null)
+ break;
+ }
+ assert (this._pstore != null);
+ this._pstore.notify["is-prepared"].connect (this._notify_pstore_cb);
+ this._try_to_add ();
+ }
+ catch (GLib.Error e)
+ {
+ GLib.warning ("Error when calling prepare: %s\n", e.message);
+ }
+ }
+
+ private void _individuals_changed_cb
+ (GLib.List<Individual>? added,
+ GLib.List<Individual>? removed,
+ string? message,
+ Persona? actor,
+ GroupDetails.ChangeReason reason)
+ {
+ foreach (unowned Individual i in added)
+ {
+ if (i.full_name == this._persona_fullname_1)
+ {
+ this._individual_id_1 = i.id;
+ }
+ else if (i.full_name == this._persona_fullname_2)
+ {
+ this._individual_id_2 = i.id;
+ }
+ }
+
+ if (this._individual_id_1 != "" &&
+ this._individual_id_2 != "")
+ {
+ this._try_potential_match ();
+ }
+
+ assert (removed == null);
+ }
+
+ private void _try_potential_match ()
+ {
+ var ind1 = this._aggregator.individuals.lookup (this._individual_id_1);
+ var ind2 = this._aggregator.individuals.lookup (this._individual_id_2);
+
+ Folks.PotentialMatch matchObj = new Folks.PotentialMatch ();
+ this._match = matchObj.potential_match (ind1, ind2);
+
+ this._main_loop.quit ();
+ }
+
+ private void _notify_pstore_cb (Object _pstore, ParamSpec ps)
+ {
+ this._try_to_add ();
+ }
+
+ private async void _try_to_add ()
+ {
+ lock (this._added_personas)
+ {
+ if (this._pstore.is_prepared &&
+ this._added_personas == false)
+ {
+ this._added_personas = true;
+ yield this._add_personas ();
+ }
+ }
+ }
+
+ private async void _add_personas ()
+ {
+ HashTable<string, Value?> details1 = new HashTable<string, Value?>
+ (str_hash, str_equal);
+ HashTable<string, Value?> details2 = new HashTable<string, Value?>
+ (str_hash, str_equal);
+ Value? val;
+
+ val = Value (typeof (string));
+ val.set_string (this._persona_fullname_1);
+ details1.insert (Folks.PersonaStore.detail_key (PersonaDetail.FULL_NAME),
+ (owned) val);
+
+ val = Value (typeof (string));
+ val.set_string (this._persona_fullname_2);
+ details2.insert (Folks.PersonaStore.detail_key (PersonaDetail.FULL_NAME),
+ (owned) val);
+
+ try
+ {
+ yield this._aggregator.add_persona_from_details (null,
+ this._pstore, details1);
+
+ yield this._aggregator.add_persona_from_details (null,
+ this._pstore, details2);
+ }
+ catch (Folks.IndividualAggregatorError e)
+ {
+ GLib.warning ("[AddPersonaError] add_persona_from_details: %s\n",
+ e.message);
+ }
+ }
+}
+
+public int main (string[] args)
+{
+ Test.init (ref args);
+
+ TestSuite root = TestSuite.get_root ();
+ root.add_suite (new MatchNameTests ().get_suite ());
+
+ Test.run ();
+
+ return 0;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]