1 /* Simplistic test suite */
6 #include "gtktextbtree.h"
8 static void fill_buffer (GtkTextBuffer *buffer);
10 static void run_tests (GtkTextBuffer *buffer);
13 main (int argc, char** argv)
15 GtkTextBuffer *buffer;
18 GtkTextIter start, end;
20 gtk_init (&argc, &argv);
22 /* Check UTF8 unknown char thing */
23 g_assert (g_utf8_strlen (gtk_text_unknown_char_utf8, 3) == 1);
24 ch = g_utf8_get_char (gtk_text_unknown_char_utf8);
25 g_assert (ch == gtk_text_unknown_char);
27 /* First, we turn on btree debugging. */
28 gtk_debug_flags |= GTK_DEBUG_TEXT;
31 buffer = gtk_text_buffer_new (NULL);
33 /* Check that buffer starts with one empty line and zero chars */
35 n = gtk_text_buffer_get_line_count (buffer);
37 g_error ("%d lines, expected 1", n);
39 n = gtk_text_buffer_get_char_count (buffer);
41 g_error ("%d chars, expected 1", n);
43 /* Run gruesome alien test suite on buffer */
46 /* Put stuff in the buffer */
50 /* Subject stuff-bloated buffer to further torment */
53 /* Delete all stuff from the buffer */
54 gtk_text_buffer_get_bounds (buffer, &start, &end);
55 gtk_text_buffer_delete (buffer, &start, &end);
57 /* Check buffer for emptiness (note that a single
58 empty line always remains in the buffer) */
59 n = gtk_text_buffer_get_line_count (buffer);
61 g_error ("%d lines, expected 1", n);
63 n = gtk_text_buffer_get_char_count (buffer);
65 g_error ("%d chars, expected 1", n);
69 g_print ("All tests passed.\n");
75 run_tests (GtkTextBuffer *buffer)
83 GtkTextMark *bar_mark;
85 gtk_text_buffer_get_bounds (buffer, &start, &end);
87 /* Check that walking the tree via chars and via iterators produces
88 * the same number of indexable locations.
90 num_chars = gtk_text_buffer_get_char_count (buffer);
92 bar_mark = gtk_text_buffer_create_mark (buffer, "bar", &iter, FALSE);
97 GtkTextMark *foo_mark;
99 gtk_text_buffer_get_iter_at_offset (buffer, ¤t, i);
101 if (!gtk_text_iter_equal (&iter, ¤t))
103 g_error ("get_char_index didn't return current iter");
106 j = gtk_text_iter_get_offset (&iter);
110 g_error ("iter converted to %d not %d", j, i);
114 gtk_text_buffer_get_iter_at_mark (buffer, &mark, bar_mark);
116 if (!gtk_text_iter_equal (&iter, &mark))
118 gtk_text_iter_spew (&iter, "iter");
119 gtk_text_iter_spew (&mark, "mark");
120 g_error ("Mark not moved to the right place.");
123 foo_mark = gtk_text_buffer_create_mark (buffer, "foo", &iter, FALSE);
124 gtk_text_buffer_get_iter_at_mark (buffer, &mark, foo_mark);
125 gtk_text_buffer_delete_mark (buffer, foo_mark);
127 if (!gtk_text_iter_equal (&iter, &mark))
129 gtk_text_iter_spew (&iter, "iter");
130 gtk_text_iter_spew (&mark, "mark");
131 g_error ("Mark not created in the right place.");
134 if (gtk_text_iter_is_last (&iter))
135 g_error ("iterators ran out before chars (offset %d of %d)",
138 gtk_text_iter_next_char (&iter);
140 gtk_text_buffer_move_mark (buffer, bar_mark, &iter);
145 if (!gtk_text_iter_equal (&iter, &end))
146 g_error ("Iterating over all chars didn't end with the end iter");
148 /* Do the tree-walk backward
150 num_chars = gtk_text_buffer_get_char_count (buffer);
151 gtk_text_buffer_get_iter_at_offset (buffer, &iter, -1);
153 gtk_text_buffer_move_mark (buffer, bar_mark, &iter);
157 if (!gtk_text_iter_equal (&iter, &end))
158 g_error ("iter at char -1 is not equal to the end iterator");
163 GtkTextMark *foo_mark;
165 gtk_text_buffer_get_iter_at_offset (buffer, ¤t, i);
167 if (!gtk_text_iter_equal (&iter, ¤t))
169 g_error ("get_char_index didn't return current iter while going backward");
171 j = gtk_text_iter_get_offset (&iter);
175 g_error ("going backward, iter converted to %d not %d", j, i);
179 gtk_text_buffer_get_iter_at_mark (buffer, &mark, bar_mark);
181 if (!gtk_text_iter_equal (&iter, &mark))
183 gtk_text_iter_spew (&iter, "iter");
184 gtk_text_iter_spew (&mark, "mark");
185 g_error ("Mark not moved to the right place.");
188 foo_mark = gtk_text_buffer_create_mark (buffer, "foo", &iter, FALSE);
189 gtk_text_buffer_get_iter_at_mark (buffer, &mark, foo_mark);
190 gtk_text_buffer_delete_mark (buffer, foo_mark);
192 if (!gtk_text_iter_equal (&iter, &mark))
194 gtk_text_iter_spew (&iter, "iter");
195 gtk_text_iter_spew (&mark, "mark");
196 g_error ("Mark not created in the right place.");
201 if (!gtk_text_iter_prev_char (&iter))
202 g_error ("iterators ran out before char indexes");
204 gtk_text_buffer_move_mark (buffer, bar_mark, &iter);
208 if (gtk_text_iter_prev_char (&iter))
209 g_error ("went backward from 0?");
215 if (!gtk_text_iter_equal (&iter, &start))
216 g_error ("Iterating backward over all chars didn't end with the start iter");
219 * Check that get_line_count returns the same number of lines
220 * as walking the tree by line
222 i = 1; /* include current (first) line */
223 gtk_text_buffer_get_iter_at_line (buffer, &iter, 0);
224 while (gtk_text_iter_forward_line (&iter))
227 if (i != gtk_text_buffer_get_line_count (buffer))
228 g_error ("Counted %d lines, buffer has %d", i,
229 gtk_text_buffer_get_line_count (buffer));
233 static char *book_closed_xpm[] = {
259 fill_buffer (GtkTextBuffer *buffer)
262 GdkColor color, color2;
268 tag = gtk_text_buffer_create_tag (buffer, "fg_blue");
270 color.red = color.green = 0;
275 gtk_object_set (GTK_OBJECT (tag),
276 "foreground_gdk", &color,
277 "background_gdk", &color2,
278 "font", "-*-courier-bold-r-*-*-30-*-*-*-*-*-*-*",
281 tag = gtk_text_buffer_create_tag (buffer, "fg_red");
283 color.blue = color.green = 0;
285 gtk_object_set (GTK_OBJECT (tag),
287 "foreground_gdk", &color,
290 tag = gtk_text_buffer_create_tag (buffer, "bg_green");
292 color.blue = color.red = 0;
293 color.green = 0xffff;
294 gtk_object_set (GTK_OBJECT (tag),
295 "background_gdk", &color,
296 "font", "-*-courier-bold-r-*-*-10-*-*-*-*-*-*-*",
299 pixbuf = gdk_pixbuf_new_from_xpm_data (book_closed_xpm);
301 g_assert (pixbuf != NULL);
308 gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);
310 gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
312 gtk_text_buffer_get_iter_at_offset (buffer, &iter, 1);
314 gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
316 str = g_strdup_printf ("%d Hello World!\nwoo woo woo woo woo woo woo woo\n",
319 gtk_text_buffer_insert (buffer, &iter, str, -1);
323 gtk_text_buffer_insert (buffer, &iter,
324 "(Hello World!)\nfoo foo Hello this is some text we are using to text word wrap. It has punctuation! gee; blah - hmm, great.\nnew line\n\n"
325 /* This is UTF8 stuff, Emacs doesn't
326 really know how to display it */
327 "Spanish (Español) ¡Hola! / French (Français) Bonjour, Salut / German (Deutsch Süd) Grüß Gott (testing Latin-1 chars encoded in UTF8)\nThai (we can't display this, just making sure we don't crash) (ภาษาไทย) สวัสดีครับ, สวัสดีค่ะ\n",
330 gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
331 gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
333 gtk_text_buffer_get_iter_at_offset (buffer, &iter, 4);
335 gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
337 gtk_text_buffer_get_iter_at_offset (buffer, &iter, 7);
339 gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
341 gtk_text_buffer_get_iter_at_offset (buffer, &iter, 8);
343 gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf);
345 gtk_text_buffer_get_iter_at_line_offset (buffer, &iter, 0, 8);
347 gtk_text_iter_forward_chars (&iter2, 10);
349 gtk_text_buffer_apply_tag_by_name (buffer, "fg_blue", &iter, &iter2);
351 gtk_text_iter_forward_chars (&iter, 7);
352 gtk_text_iter_forward_chars (&iter2, 10);
354 gtk_text_buffer_apply_tag_by_name (buffer, "bg_green", &iter, &iter2);
356 gtk_text_iter_forward_chars (&iter, 12);
357 gtk_text_iter_forward_chars (&iter2, 10);
359 gtk_text_buffer_apply_tag_by_name (buffer, "bg_green", &iter, &iter2);
361 gtk_text_iter_forward_chars (&iter, 10);
362 gtk_text_iter_forward_chars (&iter2, 15);
364 gtk_text_buffer_apply_tag_by_name (buffer, "fg_red", &iter, &iter2);
365 gtk_text_buffer_apply_tag_by_name (buffer, "fg_blue", &iter, &iter2);
367 gtk_text_iter_forward_chars (&iter, 20);
368 gtk_text_iter_forward_chars (&iter2, 20);
370 gtk_text_buffer_apply_tag_by_name (buffer, "fg_red", &iter, &iter2);
371 gtk_text_buffer_apply_tag_by_name (buffer, "fg_blue", &iter, &iter2);
373 gtk_text_iter_backward_chars (&iter, 25);
374 gtk_text_iter_forward_chars (&iter2, 5);
376 gtk_text_buffer_apply_tag_by_name (buffer, "fg_red", &iter, &iter2);
377 gtk_text_buffer_apply_tag_by_name (buffer, "fg_blue", &iter, &iter2);
379 gtk_text_iter_forward_chars (&iter, 15);
380 gtk_text_iter_backward_chars (&iter2, 10);
382 gtk_text_buffer_remove_tag_by_name (buffer, "fg_red", &iter, &iter2);
383 gtk_text_buffer_remove_tag_by_name (buffer, "fg_blue", &iter, &iter2);
388 gdk_pixbuf_unref (pixbuf);