[gtksourceview/wip/search] search: update occurrences_count on delete-range
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview/wip/search] search: update occurrences_count on delete-range
- Date: Sun, 23 Jun 2013 11:38:32 +0000 (UTC)
commit 1ff637e5455492d5464490b6e5c41e4d34675726
Author: Sébastien Wilmet <swilmet gnome org>
Date: Sun Jun 23 13:37:39 2013 +0200
search: update occurrences_count on delete-range
With unit tests (all pass).
gtksourceview/gtksourcesearch.c | 23 ++++++++++--
tests/test-search.c | 74 +++++++++++++++++++++++++++++++++++++++
2 files changed, 93 insertions(+), 4 deletions(-)
---
diff --git a/gtksourceview/gtksourcesearch.c b/gtksourceview/gtksourcesearch.c
index 6700e11..c701922 100644
--- a/gtksourceview/gtksourcesearch.c
+++ b/gtksourceview/gtksourcesearch.c
@@ -463,6 +463,11 @@ remove_occurrences_in_range (GtkSourceSearch *search,
GtkTextIter match_start;
GtkTextIter match_end;
+ if (search->priv->found_tag == NULL)
+ {
+ init_found_tag (search);
+ }
+
if (gtk_text_iter_has_tag (start, search->priv->found_tag) &&
!gtk_text_iter_toggles_tag (start, search->priv->found_tag))
{
@@ -802,19 +807,29 @@ insert_text_after_cb (GtkSourceSearch *search,
static void
delete_range_before_cb (GtkSourceSearch *search,
- GtkTextIter *start,
- GtkTextIter *end)
+ GtkTextIter *delete_start,
+ GtkTextIter *delete_end)
{
GtkTextIter start_buffer;
GtkTextIter end_buffer;
gtk_text_buffer_get_bounds (search->priv->buffer, &start_buffer, &end_buffer);
- if (gtk_text_iter_equal (start, &start_buffer) &&
- gtk_text_iter_equal (end, &end_buffer))
+ if (gtk_text_iter_equal (delete_start, &start_buffer) &&
+ gtk_text_iter_equal (delete_end, &end_buffer))
{
/* Special case when removing all the text. */
search->priv->occurrences_count = 0;
+ return;
+ }
+
+ if (search->priv->text != NULL)
+ {
+ GtkTextIter start = *delete_start;
+ GtkTextIter end = *delete_end;
+
+ remove_occurrences_in_range (search, &start, &end);
+ add_subregion_to_scan (search, &start, &end);
}
}
diff --git a/tests/test-search.c b/tests/test-search.c
index 9223207..f0ee70d 100644
--- a/tests/test-search.c
+++ b/tests/test-search.c
@@ -138,6 +138,79 @@ test_occurrences_count_with_insert (void)
g_object_unref (source_buffer);
}
+static void
+test_occurrences_count_with_delete (void)
+{
+ GtkSourceBuffer *source_buffer = gtk_source_buffer_new (NULL);
+ GtkTextBuffer *text_buffer = GTK_TEXT_BUFFER (source_buffer);
+ GtkTextIter start;
+ GtkTextIter end;
+ guint occurrences_count;
+
+ gtk_source_buffer_set_search_text (source_buffer, "foo");
+
+ /* Contents: "foo" -> "" */
+ gtk_text_buffer_set_text (text_buffer, "foo", -1);
+ flush_queue ();
+ occurrences_count = gtk_source_buffer_get_search_occurrences_count (source_buffer);
+ g_assert_cmpuint (occurrences_count, ==, 1);
+
+ gtk_text_buffer_get_bounds (text_buffer, &start, &end);
+ gtk_text_buffer_delete (text_buffer, &start, &end);
+ flush_queue ();
+ occurrences_count = gtk_source_buffer_get_search_occurrences_count (source_buffer);
+ g_assert_cmpuint (occurrences_count, ==, 0);
+
+ /* Contents: "foo" -> "oo" */
+ gtk_text_buffer_set_text (text_buffer, "foo", -1);
+ flush_queue ();
+ occurrences_count = gtk_source_buffer_get_search_occurrences_count (source_buffer);
+ g_assert_cmpuint (occurrences_count, ==, 1);
+
+ gtk_text_buffer_get_start_iter (text_buffer, &start);
+ gtk_text_buffer_get_iter_at_offset (text_buffer, &end, 1);
+ gtk_text_buffer_delete (text_buffer, &start, &end);
+ flush_queue ();
+ occurrences_count = gtk_source_buffer_get_search_occurrences_count (source_buffer);
+ g_assert_cmpuint (occurrences_count, ==, 0);
+
+ /* Contents: "foobar foobeer" -> "foobar" */
+ gtk_text_buffer_set_text (text_buffer, "foobar foobeer", -1);
+ flush_queue ();
+ occurrences_count = gtk_source_buffer_get_search_occurrences_count (source_buffer);
+ g_assert_cmpuint (occurrences_count, ==, 2);
+
+ gtk_text_buffer_get_iter_at_offset (text_buffer, &start, 6);
+ gtk_text_buffer_get_end_iter (text_buffer, &end);
+ gtk_text_buffer_delete (text_buffer, &start, &end);
+ flush_queue ();
+ occurrences_count = gtk_source_buffer_get_search_occurrences_count (source_buffer);
+ g_assert_cmpuint (occurrences_count, ==, 1);
+
+ /* Contents: "foo[foo]foo" -> "foofoo" */
+ gtk_text_buffer_set_text (text_buffer, "foofoofoo", -1);
+ flush_queue ();
+ occurrences_count = gtk_source_buffer_get_search_occurrences_count (source_buffer);
+ g_assert_cmpuint (occurrences_count, ==, 3);
+
+ gtk_text_buffer_get_iter_at_offset (text_buffer, &start, 3);
+ gtk_text_buffer_get_iter_at_offset (text_buffer, &end, 6);
+ gtk_text_buffer_delete (text_buffer, &start, &end);
+ flush_queue ();
+ occurrences_count = gtk_source_buffer_get_search_occurrences_count (source_buffer);
+ g_assert_cmpuint (occurrences_count, ==, 2);
+
+ /* Contents: "fo[of]oo" -> "fooo" */
+ gtk_text_buffer_get_iter_at_offset (text_buffer, &start, 2);
+ gtk_text_buffer_get_iter_at_offset (text_buffer, &end, 4);
+ gtk_text_buffer_delete (text_buffer, &start, &end);
+ flush_queue ();
+ occurrences_count = gtk_source_buffer_get_search_occurrences_count (source_buffer);
+ g_assert_cmpuint (occurrences_count, ==, 1);
+
+ g_object_unref (source_buffer);
+}
+
int
main (int argc, char **argv)
{
@@ -145,6 +218,7 @@ main (int argc, char **argv)
g_test_add_func ("/Search/occurrences-count/simple", test_occurrences_count_simple);
g_test_add_func ("/Search/occurrences-count/with-insert", test_occurrences_count_with_insert);
+ g_test_add_func ("/Search/occurrences-count/with-delete", test_occurrences_count_with_delete);
return g_test_run ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]