/* * This program 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. * * This program 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 program. If not, see . * */ #include #include #include #define QUERY_STRING1 #define QUERY_STRING2 /* Pick a locale category to set and test. */ #ifdef LC_ADDRESS /* LC_ADDRESS is a GNU extension. */ #define CATEGORY LC_ADDRESS #else /* Mimic the fallback branch in EBookQuery. */ #ifdef G_OS_WIN32 #ifndef LC_MESSAGES #define LC_MESSAGES LC_CTYPE #endif #endif #define CATEGORY LC_MESSAGES #endif /* LC_ADDRESS */ typedef struct { EBookQuery *query; gchar *locale; gchar *sexp; } TestData; static void normalize_space (gchar *str) { while (*str) { gchar *tail; if (*str++ != ' ') continue; tail = str; while (*tail == ' ') ++tail; memmove (str, tail, strlen (tail) + 1); } } static void test_query (gconstpointer data) { const TestData *const test = data; EBookQuery *query; gchar *sexp; g_assert (setlocale (CATEGORY, test->locale) != NULL); sexp = e_book_query_to_string (test->query); normalize_space (sexp); g_assert_cmpstr (test->sexp, ==, sexp); g_free (sexp); query = e_book_query_from_string (test->sexp); g_assert (query != NULL); sexp = e_book_query_to_string (query); e_book_query_unref (query); normalize_space (sexp); g_assert_cmpstr (test->sexp, ==, sexp); g_free (sexp); } static void test_data_free (gpointer data) { TestData *const test = data; e_book_query_unref (test->query); g_free (test->sexp); g_free (test->locale); g_slice_free (TestData, test); } static void add_query_test (const gchar *path, EBookQuery *query, const gchar *sexp) { TestData *data = g_slice_new (TestData); data->locale = g_strdup (setlocale (CATEGORY, NULL)); data->sexp = g_strdup (sexp); data->query = query; g_test_add_data_func_full (path, data, test_query, test_data_free); } gint main (gint argc, gchar **argv) { g_test_init (&argc, &argv, NULL); g_test_bug_base ("http://bugzilla.gnome.org/"); add_query_test ( "/libebook/test-query/sexp/all", e_book_query_any_field_contains (NULL), "(contains \"x-evolution-any-field\" \"\")"); add_query_test ( "/libebook/test-query/sexp/any", e_book_query_any_field_contains ("liberty"), "(contains \"x-evolution-any-field\" \"liberty\")"); add_query_test ( "/libebook/test-query/sexp/not", e_book_query_not ( e_book_query_any_field_contains ("liberty"), TRUE), "(not (contains \"x-evolution-any-field\" \"liberty\"))"); add_query_test ( "/libebook/test-query/sexp/and", e_book_query_andv ( e_book_query_any_field_contains ("liberty"), e_book_query_any_field_contains ("friendship"), NULL), "(and (contains \"x-evolution-any-field\" \"liberty\")" " (contains \"x-evolution-any-field\" \"friendship\")" " )"); add_query_test ( "/libebook/test-query/sexp/or", e_book_query_orv ( e_book_query_any_field_contains ("liberty"), e_book_query_any_field_contains ("friendship"), NULL), "(or (contains \"x-evolution-any-field\" \"liberty\")" " (contains \"x-evolution-any-field\" \"friendship\")" " )"); add_query_test ( "/libebook/test-query/sexp/exists", e_book_query_field_exists ( E_CONTACT_FULL_NAME), "(exists \"full_name\")"); add_query_test ( "/libebook/test-query/sexp/contains", e_book_query_field_test ( E_CONTACT_FULL_NAME, E_BOOK_QUERY_CONTAINS, "Miguel"), "(contains \"full_name\" \"Miguel\")"); add_query_test ( "/libebook/test-query/sexp/is", e_book_query_field_test ( E_CONTACT_GIVEN_NAME, E_BOOK_QUERY_IS, "Miguel"), "(is \"given_name\" \"Miguel\")"); add_query_test ( "/libebook/test-query/sexp/beginswith", e_book_query_field_test ( E_CONTACT_FULL_NAME, E_BOOK_QUERY_BEGINS_WITH, "Mig"), "(beginswith \"full_name\" \"Mig\")"); add_query_test ( "/libebook/test-query/sexp/endswith", e_book_query_field_test ( E_CONTACT_TEL, E_BOOK_QUERY_ENDS_WITH, "5423789"), "(endswith \"phone\" \"5423789\")"); if (setlocale (CATEGORY, "en_US.UTF-8") != NULL) { add_query_test ( "/libebook/test-query/sexp/eqphone/us", e_book_query_orv ( e_book_query_field_test ( E_CONTACT_TEL, E_BOOK_QUERY_EQUALS_PHONE_NUMBER, "+1-2215423789"), e_book_query_field_test ( E_CONTACT_TEL, E_BOOK_QUERY_EQUALS_NATIONAL_PHONE_NUMBER, "2215423789"), e_book_query_field_test ( E_CONTACT_TEL, E_BOOK_QUERY_EQUALS_SHORT_PHONE_NUMBER, "5423789"), NULL), "(or (eqphone \"phone\" \"+1-2215423789\" \"en_US.UTF-8\")" " (eqphone_national \"phone\" \"2215423789\" \"en_US.UTF-8\")" " (eqphone_short \"phone\" \"5423789\" \"en_US.UTF-8\")" " )"); } else { g_message ("Failed to set locale to en_US.UTF-8"); g_message ("Skipping /libebook/test-query/sexp/eqphone/us"); } if (setlocale (CATEGORY, "en_GB.UTF-8") != NULL) { add_query_test ( "/libebook/test-query/sexp/eqphone/gb", e_book_query_orv ( e_book_query_field_test ( E_CONTACT_TEL, E_BOOK_QUERY_EQUALS_PHONE_NUMBER, "+1-2215423789"), e_book_query_field_test ( E_CONTACT_TEL, E_BOOK_QUERY_EQUALS_NATIONAL_PHONE_NUMBER, "2215423789"), e_book_query_field_test ( E_CONTACT_TEL, E_BOOK_QUERY_EQUALS_SHORT_PHONE_NUMBER, "5423789"), NULL), "(or (eqphone \"phone\" \"+1-2215423789\" \"en_GB.UTF-8\")" " (eqphone_national \"phone\" \"2215423789\" \"en_GB.UTF-8\")" " (eqphone_short \"phone\" \"5423789\" \"en_GB.UTF-8\")" " )"); } else { g_message ("Failed to set locale to en_GB.UTF-8"); g_message ("Skipping /libebook/test-query/sexp/eqphone/gb"); } return g_test_run (); }