# -*- Autotest -*- AT_BANNER([TextBuffer search]) ## -------------------------- ## ## compares two search items ## ## -------------------------- ## AT_TESTFUN([sitem_compare], [[ #include "internal_libreport.h" #include "search_item.h" #include /* comparing two items */ int test() { char text[] = "Some text"; GtkTextBuffer *buffer = gtk_text_buffer_new(gtk_text_tag_table_new()); gtk_text_buffer_insert_at_cursor(buffer, text, strlen(text)); GtkTextIter start; gtk_text_buffer_get_start_iter(buffer, &start); GtkTextIter end; gtk_text_buffer_get_end_iter(buffer, &end); search_item_t *sitem1 = sitem_new( 0, buffer, NULL, //not needed, maybe we can remove it from the sitem struct? start, end ); search_item_t *sitem2 = sitem_new( //yes, it's the same, so it should return 0 0, buffer, NULL, //not needed, maybe we can remove it from the sitem struct? start, end ); return sitem_compare(sitem1, sitem2); } int main(void) { glib_init(); assert(test() == 0); return 0; } ]]) AT_TESTFUN([sitem_is_in_sitemlist], [[ #include "internal_libreport.h" #include "search_item.h" #include static GList *find_words_in_text_buffer(GtkTextBuffer *buffer, GList *words) { GList *found_words = NULL; GtkTextIter start; GtkTextIter end; for (GList *w = words; w; w = g_list_next(w)) { gtk_text_buffer_get_start_iter(buffer, &start); const char *search_word = w->data; while (search_word && search_word[0] && gtk_text_iter_forward_search(&start, search_word, GTK_TEXT_SEARCH_TEXT_ONLY, &start, &end, NULL)) { search_item_t *found_word = sitem_new( 0, buffer, NULL, start, end ); int offset = gtk_text_iter_get_offset(&end); gtk_text_buffer_get_iter_at_offset(buffer, &start, offset); found_words = g_list_prepend(found_words, found_word); } } return found_words; } int test() { const char text[] = "Some text with few words and I don't want lorem ipsum"; GtkTextBuffer *buffer = gtk_text_buffer_new(gtk_text_tag_table_new()); gtk_text_buffer_insert_at_cursor(buffer, text, strlen(text)); const char *blacklist = "few,tex"; const char *whitelist = "few,text"; const char *whitelist_2 = "words"; GList *blacklist_in = parse_list(blacklist); GList *whitelist_in = parse_list(whitelist); GList *whitelist_not_in = parse_list(whitelist_2); GList *blacklist_sitems = find_words_in_text_buffer(buffer, blacklist_in); GList *whitelist_sitems = find_words_in_text_buffer(buffer, whitelist_in); GList *whitelist_2_sitems = find_words_in_text_buffer(buffer, whitelist_not_in); for(GList *sitems = blacklist_sitems; sitems; sitems = g_list_next(sitems)) { if (!sitem_is_in_sitemlist((search_item_t *)sitems->data, whitelist_sitems)) { printf("'%s' should be in list!\n", gtk_text_buffer_get_text ( buffer, sitem_get_start_iter((search_item_t *)sitems->data), sitem_get_end_iter((search_item_t *)sitems->data), false ) ); return 1; } if (sitem_is_in_sitemlist((search_item_t *)sitems->data, whitelist_2_sitems)) { printf("'%s' should NOT be in the list!\n", gtk_text_buffer_get_text ( buffer, sitem_get_start_iter((search_item_t *)sitems->data), sitem_get_end_iter((search_item_t *)sitems->data), false ) ); return 1; } } return 0; } int main(void) { glib_init(); assert(test() == 0); return 0; } ]])