[gspell: 4/4] testsuite: add basic unit test for the InlineCheckerTextBuffer
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gspell: 4/4] testsuite: add basic unit test for the InlineCheckerTextBuffer
- Date: Thu, 4 Feb 2016 17:10:28 +0000 (UTC)
commit 0fb6c98ac78dbe5ba109c19fb4159331d22e5781
Author: Sébastien Wilmet <swilmet gnome org>
Date: Thu Feb 4 15:12:03 2016 +0100
testsuite: add basic unit test for the InlineCheckerTextBuffer
testsuite/Makefile.am | 3 +
testsuite/test-inline-checker-text-buffer.c | 141 +++++++++++++++++++++++++++
2 files changed, 144 insertions(+), 0 deletions(-)
---
diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
index d22a7eb..88b31c7 100644
--- a/testsuite/Makefile.am
+++ b/testsuite/Makefile.am
@@ -15,4 +15,7 @@ UNIT_TEST_PROGS =
UNIT_TEST_PROGS += test-checker
test_checker_SOURCES = test-checker.c
+UNIT_TEST_PROGS += test-inline-checker-text-buffer
+test_inline_checker_text_buffer_SOURCES = test-inline-checker-text-buffer.c
+
-include $(top_srcdir)/git.mk
diff --git a/testsuite/test-inline-checker-text-buffer.c b/testsuite/test-inline-checker-text-buffer.c
new file mode 100644
index 0000000..6255049
--- /dev/null
+++ b/testsuite/test-inline-checker-text-buffer.c
@@ -0,0 +1,141 @@
+/*
+ * This file is part of gspell, a spell-checking library.
+ *
+ * Copyright 2016 - Sébastien Wilmet <swilmet gnome org>
+ *
+ * This library 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; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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 library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <gspell/gspell.h>
+#include "gspell/gspell-inline-checker-text-buffer.h"
+
+static GtkTextBuffer *
+create_buffer (void)
+{
+ GtkTextBuffer *buffer;
+ const GspellLanguage *lang;
+ GspellChecker *checker;
+
+ buffer = gtk_text_buffer_new (NULL);
+
+ lang = gspell_language_lookup ("en_US");
+ checker = gspell_checker_new (lang);
+ gspell_text_buffer_set_spell_checker (buffer, checker);
+ g_object_unref (checker);
+
+ return buffer;
+}
+
+/*
+ * check_highlighted_words:
+ * @buffer:
+ * @inline_checker:
+ * @...: list of pairs of character offsets (as #gint's) delimiting the expected
+ * highlighted words in @buffer. The list must be terminated by -1.
+ *
+ * Checks the boundaries of the highlighted words in @buffer.
+ */
+static void
+check_highlighted_words (GtkTextBuffer *buffer,
+ GspellInlineCheckerTextBuffer *inline_checker,
+ ...)
+{
+ GtkTextTag *tag;
+ GtkTextIter iter;
+ va_list list;
+ gint remaining_list_element;
+
+ tag = _gspell_inline_checker_text_buffer_get_highlight_tag (inline_checker);
+ g_assert (GTK_IS_TEXT_TAG (tag));
+
+ gtk_text_buffer_get_start_iter (buffer, &iter);
+ va_start (list, inline_checker);
+
+ while (!gtk_text_iter_is_end (&iter))
+ {
+ GtkTextIter start;
+ GtkTextIter end;
+ gint start_offset;
+ gint end_offset;
+ gint expected_start_offset;
+ gint expected_end_offset;
+
+ start = iter;
+ if (!gtk_text_iter_starts_tag (&start, tag))
+ {
+ if (!gtk_text_iter_forward_to_tag_toggle (&start, tag))
+ {
+ break;
+ }
+
+ g_assert (gtk_text_iter_starts_tag (&start, tag));
+ }
+
+ end = start;
+ if (!gtk_text_iter_forward_to_tag_toggle (&end, tag))
+ {
+ g_assert_not_reached ();
+ }
+ g_assert (gtk_text_iter_ends_tag (&end, tag));
+
+ start_offset = gtk_text_iter_get_offset (&start);
+ expected_start_offset = va_arg (list, gint);
+ g_assert_cmpint (expected_start_offset, ==, start_offset);
+
+ end_offset = gtk_text_iter_get_offset (&end);
+ expected_end_offset = va_arg (list, gint);
+ g_assert_cmpint (expected_end_offset, ==, end_offset);
+
+ iter = end;
+ }
+
+ remaining_list_element = va_arg (list, gint);
+ g_assert_cmpint (remaining_list_element, ==, -1);
+
+ va_end (list);
+}
+
+static void
+test_whole_buffer (void)
+{
+ GtkTextBuffer *buffer;
+ GspellInlineCheckerTextBuffer *inline_checker;
+
+ buffer = create_buffer ();
+ gtk_text_buffer_set_text (buffer, "Hello jlyxdt, grrimbl?\nNo, not really today.", -1);
+
+ inline_checker = _gspell_inline_checker_text_buffer_new (buffer);
+ _gspell_inline_checker_text_buffer_set_unit_test_mode (inline_checker, TRUE);
+
+ check_highlighted_words (buffer,
+ inline_checker,
+ 6, 12,
+ 14, 21,
+ -1);
+
+ g_object_unref (inline_checker);
+ g_object_unref (buffer);
+}
+
+gint
+main (gint argc,
+ gchar **argv)
+{
+ gtk_test_init (&argc, &argv);
+
+ g_test_add_func ("/inline-checker-text-buffer/whole-buffer",
+ test_whole_buffer);
+
+ return g_test_run ();
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]