summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Hruby <michal.mhr@gmail.com>2012-03-14 16:47:20 +0100
committerMichal Hruby <michal.mhr@gmail.com>2012-03-14 16:47:20 +0100
commit6d5079ec1aca4a46316934b65eef359ff171b2a8 (patch)
tree640626f465ce1982e45aa9d8289796eaef969dbe
parent085f49f99d0b8d20e3cec4cfc015425a7dd45844 (diff)
downloadzeitgeist-6d5079ec1aca4a46316934b65eef359ff171b2a8.tar.gz
Make sure that mangling works with capital letters as well
-rw-r--r--extensions/fts++/stringutils.cpp8
-rw-r--r--extensions/fts++/test/test-indexer.cpp47
2 files changed, 52 insertions, 3 deletions
diff --git a/extensions/fts++/stringutils.cpp b/extensions/fts++/stringutils.cpp
index 6e173aa7..9c9d2d7d 100644
--- a/extensions/fts++/stringutils.cpp
+++ b/extensions/fts++/stringutils.cpp
@@ -69,9 +69,13 @@ string Truncate (string const& s, unsigned int nbytes)
*/
string MangleUri (string const& orig)
{
- string s(orig);
+ // the input is supposed to be a uri, so no utf8 characters
+ gchar *casefolded = g_ascii_strdown (orig.c_str (), orig.size ());
+
+ string s(casefolded);
+ g_free (casefolded);
size_t pos = 0;
- while ((pos = s.find_first_of (": /-.", pos)) != string::npos)
+ while ((pos = s.find_first_of (": /-.%", pos)) != string::npos)
{
s.replace (pos, 1, 1, '_');
pos++;
diff --git a/extensions/fts++/test/test-indexer.cpp b/extensions/fts++/test/test-indexer.cpp
index cbe83f28..5ed1338a 100644
--- a/extensions/fts++/test/test-indexer.cpp
+++ b/extensions/fts++/test/test-indexer.cpp
@@ -190,7 +190,7 @@ static ZeitgeistEvent* create_test_event7 (void)
zeitgeist_subject_set_interpretation (subject, ZEITGEIST_NFO_PRESENTATION);
zeitgeist_subject_set_manifestation (subject, ZEITGEIST_NFO_FILE_DATA_OBJECT);
- zeitgeist_subject_set_uri (subject, "file:///home/username/directory-with-dashes/and.dot/CamelCasePresentation.pdf");
+ zeitgeist_subject_set_uri (subject, "file:///home/username/directory-with-dashes/and.dot/%C4%8C%20some-intl/CamelCasePresentation.pdf");
zeitgeist_subject_set_text (subject, NULL);
zeitgeist_subject_set_mimetype (subject, "application/pdf");
@@ -645,6 +645,49 @@ test_simple_dots_prefix (Fixture *fix, gconstpointer data)
}
static void
+test_simple_intl_prefix (Fixture *fix, gconstpointer data)
+{
+ guint matches;
+ guint event_id;
+ ZeitgeistEvent* event;
+ ZeitgeistSubject *subject;
+
+ // add test events to DBs
+ index_event (fix, create_test_event1 ());
+ index_event (fix, create_test_event2 ());
+ index_event (fix, create_test_event3 ());
+ index_event (fix, create_test_event4 ());
+ index_event (fix, create_test_event5 ());
+ index_event (fix, create_test_event6 ());
+ event_id = index_event (fix, create_test_event7 ());
+
+ GPtrArray *event_template = g_ptr_array_new ();
+ event = zeitgeist_event_new ();
+ subject = zeitgeist_subject_new ();
+ zeitgeist_subject_set_uri (subject,
+ "file:///home/username/directory-with-dashes/and.dot/%C4%8C*");
+ zeitgeist_event_add_subject (event, subject);
+ g_ptr_array_add (event_template, event);
+
+ GPtrArray *results =
+ zeitgeist_indexer_search (fix->indexer,
+ "pdf",
+ zeitgeist_time_range_new_anytime (),
+ event_template,
+ 0,
+ 10,
+ ZEITGEIST_RESULT_TYPE_MOST_RECENT_EVENTS,
+ &matches,
+ NULL);
+
+ g_assert_cmpuint (matches, >, 0);
+ g_assert_cmpuint (results->len, ==, 1);
+
+ event = (ZeitgeistEvent*) results->pdata[0];
+ g_assert_cmpuint (zeitgeist_event_get_id (event), ==, event_id);
+}
+
+static void
test_simple_cjk (Fixture *fix, gconstpointer data)
{
guint matches;
@@ -826,6 +869,8 @@ void test_indexer_create_suite (void)
setup, test_simple_dashes_prefix, teardown);
g_test_add ("/Zeitgeist/FTS/Indexer/PrefixWithDots", Fixture, 0,
setup, test_simple_dots_prefix, teardown);
+ g_test_add ("/Zeitgeist/FTS/Indexer/PrefixWithIntlChars", Fixture, 0,
+ setup, test_simple_intl_prefix, teardown);
g_test_add ("/Zeitgeist/FTS/Indexer/URLUnescape", Fixture, 0,
setup, test_simple_url_unescape, teardown);
g_test_add ("/Zeitgeist/FTS/Indexer/IDNSupport", Fixture, 0,