diff options
Diffstat (limited to 'camel/tests/misc')
-rw-r--r-- | camel/tests/misc/Makefile.am | 5 | ||||
-rw-r--r-- | camel/tests/misc/README | 2 | ||||
-rw-r--r-- | camel/tests/misc/split.c | 113 |
3 files changed, 117 insertions, 3 deletions
diff --git a/camel/tests/misc/Makefile.am b/camel/tests/misc/Makefile.am index 44d28cb0a5..4ad681158d 100644 --- a/camel/tests/misc/Makefile.am +++ b/camel/tests/misc/Makefile.am @@ -20,9 +20,10 @@ LDADD = \ check_PROGRAMS = \ url \ - utf7 + utf7 \ + split -TESTS = url utf7 +TESTS = url utf7 split diff --git a/camel/tests/misc/README b/camel/tests/misc/README index 17cbba017a..e92f579cf6 100644 --- a/camel/tests/misc/README +++ b/camel/tests/misc/README @@ -1,4 +1,4 @@ url URL parsing utf7 UTF7 and UTF8 processing - +split word splitting for searching diff --git a/camel/tests/misc/split.c b/camel/tests/misc/split.c new file mode 100644 index 0000000000..254b91974f --- /dev/null +++ b/camel/tests/misc/split.c @@ -0,0 +1,113 @@ +#include <config.h> + +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <glib.h> +#include <e-util/e-sexp.h> +#include <camel/camel-exception.h> +#include <camel/camel-search-private.h> + +#include "camel-test.h" + +/* TODO: should put utf8 stuff here too */ + +static struct { + char *word; + int count; + struct { + char *word; + int type; + } splits[5]; +} split_tests[] = { + { "simple", 1, { { "simple", CAMEL_SEARCH_WORD_SIMPLE } } }, + { "two words", 2, { { "two", CAMEL_SEARCH_WORD_SIMPLE }, {"words" , CAMEL_SEARCH_WORD_SIMPLE } } }, + { "compl;ex", 1, { { "compl;ex", CAMEL_SEARCH_WORD_COMPLEX } } }, + { "compl;ex simple", 2, { { "compl;ex", CAMEL_SEARCH_WORD_COMPLEX} , {"simple", CAMEL_SEARCH_WORD_SIMPLE} } }, + { "\"quoted\"", 1, { { "quoted", CAMEL_SEARCH_WORD_SIMPLE } } }, + { "\"quoted double\"", 1, { { "quoted double", CAMEL_SEARCH_WORD_COMPLEX } } }, + { "\"quoted double\" compl;ex", 2, { { "quoted double", CAMEL_SEARCH_WORD_COMPLEX }, { "compl;ex", CAMEL_SEARCH_WORD_COMPLEX } } }, + { "\"quoted double \\\" escaped\"", 1, { { "quoted double \" escaped", CAMEL_SEARCH_WORD_COMPLEX } } }, + { "\"quoted\\\"double\" \\\" escaped\\\"", 3, { { "quoted\"double", CAMEL_SEARCH_WORD_COMPLEX }, {"\"", CAMEL_SEARCH_WORD_COMPLEX}, { "escaped\"", CAMEL_SEARCH_WORD_COMPLEX } } }, + { "\\\"escaped", 1, { { "\"escaped", CAMEL_SEARCH_WORD_COMPLEX } } }, + +}; +#define SPLIT_LENGTH (sizeof(split_tests)/sizeof(split_tests[0])) + +static struct { + char *word; + int count; + struct { + char *word; + int type; + } splits[5]; +} simple_tests[] = { + { "simple", 1, { {"simple", CAMEL_SEARCH_WORD_SIMPLE } } }, + { "simpleCaSe", 1, { { "simplecase", CAMEL_SEARCH_WORD_SIMPLE } } }, + { "two words", 2, { { "two", CAMEL_SEARCH_WORD_SIMPLE }, { "words", CAMEL_SEARCH_WORD_SIMPLE } } }, + { "two wordscAsE", 2, { { "two", CAMEL_SEARCH_WORD_SIMPLE} , { "wordscase", CAMEL_SEARCH_WORD_SIMPLE } } }, + { "compl;ex", 2, { { "compl", CAMEL_SEARCH_WORD_SIMPLE }, { "ex", CAMEL_SEARCH_WORD_SIMPLE } } }, + { "compl;ex simple", 3, { { "compl", CAMEL_SEARCH_WORD_SIMPLE }, { "ex", CAMEL_SEARCH_WORD_SIMPLE }, { "simple", CAMEL_SEARCH_WORD_SIMPLE } } }, + { "\"quoted compl;ex\" simple", 4, { { "quoted", CAMEL_SEARCH_WORD_SIMPLE}, { "compl", CAMEL_SEARCH_WORD_SIMPLE }, { "ex", CAMEL_SEARCH_WORD_SIMPLE }, { "simple", CAMEL_SEARCH_WORD_SIMPLE } } }, + { "\\\" \"quoted\"compl;ex\" simple", 4, { { "quoted", CAMEL_SEARCH_WORD_SIMPLE}, { "compl", CAMEL_SEARCH_WORD_SIMPLE }, { "ex", CAMEL_SEARCH_WORD_SIMPLE }, { "simple", CAMEL_SEARCH_WORD_SIMPLE } } }, +}; + +#define SIMPLE_LENGTH (sizeof(simple_tests)/sizeof(simple_tests[0])) + +int +main (int argc, char **argv) +{ + int i, j; + struct _camel_search_words *words, *tmp; + + camel_test_init(argc, argv); + + camel_test_start("Search splitting"); + + for (i=0; i<SPLIT_LENGTH; i++) { + camel_test_push("split %d '%s'", i, split_tests[i].word); + + words = camel_search_words_split(split_tests[i].word); + check(words != NULL); + check_msg(words->len == split_tests[i].count, "words->len = %d, count = %d", words->len, split_tests[i].count); + + for (j=0;j<words->len;j++) { + check_msg(strcmp(split_tests[i].splits[j].word, words->words[j]->word) == 0, + "'%s' != '%s'", split_tests[i].splits[j].word, words->words[j]->word); + check(split_tests[i].splits[j].type == words->words[j]->type); + } + + camel_search_words_free(words); + camel_test_pull(); + } + + camel_test_end(); + + camel_test_start("Search splitting - simple"); + + for (i=0; i<SIMPLE_LENGTH; i++) { + camel_test_push("simple split %d '%s'", i, simple_tests[i].word); + + tmp = camel_search_words_split(simple_tests[i].word); + check(tmp != NULL); + + words = camel_search_words_simple(tmp); + check(words != NULL); + check_msg(words->len == simple_tests[i].count, "words->len = %d, count = %d", words->len, simple_tests[i].count); + + for (j=0;j<words->len;j++) { + check_msg(strcmp(simple_tests[i].splits[j].word, words->words[j]->word) == 0, + "'%s' != '%s'", simple_tests[i].splits[j].word, words->words[j]->word); + check(simple_tests[i].splits[j].type == words->words[j]->type); + } + + camel_search_words_free(words); + camel_search_words_free(tmp); + camel_test_pull(); + } + + camel_test_end(); + + return 0; +} |