Blame testsuite/test-view.c

Packit a7d494
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; coding: utf-8 -*- */
Packit a7d494
/*
Packit a7d494
 * This file is part of GtkSourceView
Packit a7d494
 *
Packit a7d494
 * Copyright (C) 2017 - Sébastien Wilmet
Packit a7d494
 *
Packit a7d494
 * GtkSourceView is free software; you can redistribute it and/or
Packit a7d494
 * modify it under the terms of the GNU Lesser General Public
Packit a7d494
 * License as published by the Free Software Foundation; either
Packit a7d494
 * version 2.1 of the License, or (at your option) any later version.
Packit a7d494
 *
Packit a7d494
 * GtkSourceView is distributed in the hope that it will be useful,
Packit a7d494
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit a7d494
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit a7d494
 * Lesser General Public License for more details.
Packit a7d494
 *
Packit a7d494
 * You should have received a copy of the GNU Lesser General Public License
Packit a7d494
 * along with this library; if not, see <http://www.gnu.org/licenses/>.
Packit a7d494
 */
Packit a7d494
Packit a7d494
#include <gtksourceview/gtksource.h>
Packit a7d494
Packit a7d494
static gchar *
Packit a7d494
get_text (GtkTextBuffer *buffer)
Packit a7d494
{
Packit a7d494
	GtkTextIter start;
Packit a7d494
	GtkTextIter end;
Packit a7d494
Packit a7d494
	gtk_text_buffer_get_bounds (buffer, &start, &end;;
Packit a7d494
	return gtk_text_buffer_get_text (buffer, &start, &end, TRUE);
Packit a7d494
}
Packit a7d494
Packit a7d494
#define N_CASES_INITIAL_SELECTION_FOR_SINGLE_LINE (6)
Packit a7d494
Packit a7d494
static void
Packit a7d494
set_initial_selection_for_single_line (GtkTextBuffer *buffer,
Packit a7d494
				       gint           line_num,
Packit a7d494
				       gint           case_num)
Packit a7d494
{
Packit a7d494
	GtkTextIter start;
Packit a7d494
	GtkTextIter end;
Packit a7d494
Packit a7d494
	switch (case_num)
Packit a7d494
	{
Packit a7d494
		case 0:
Packit a7d494
			gtk_text_buffer_get_iter_at_line (buffer, &start, line_num);
Packit a7d494
			gtk_text_buffer_place_cursor (buffer, &start;;
Packit a7d494
			break;
Packit a7d494
Packit a7d494
		case 1:
Packit a7d494
			gtk_text_buffer_get_iter_at_line_offset (buffer, &start, line_num, 1);
Packit a7d494
			gtk_text_buffer_place_cursor (buffer, &start;;
Packit a7d494
			break;
Packit a7d494
Packit a7d494
		case 2:
Packit a7d494
			gtk_text_buffer_get_iter_at_line (buffer, &start, line_num);
Packit a7d494
			gtk_text_iter_forward_to_line_end (&start;;
Packit a7d494
			gtk_text_buffer_place_cursor (buffer, &start;;
Packit a7d494
			break;
Packit a7d494
Packit a7d494
		case 3:
Packit a7d494
			gtk_text_buffer_get_iter_at_line (buffer, &start, line_num);
Packit a7d494
			end = start;
Packit a7d494
			gtk_text_iter_forward_to_line_end (&end;;
Packit a7d494
			gtk_text_buffer_select_range (buffer, &start, &end;;
Packit a7d494
			break;
Packit a7d494
Packit a7d494
		case 4:
Packit a7d494
			gtk_text_buffer_get_iter_at_line (buffer, &start, line_num);
Packit a7d494
			gtk_text_buffer_get_iter_at_line (buffer, &end, line_num + 1);
Packit a7d494
			gtk_text_buffer_select_range (buffer, &start, &end;;
Packit a7d494
			break;
Packit a7d494
Packit a7d494
		case 5:
Packit a7d494
			gtk_text_buffer_get_iter_at_line_offset (buffer, &start, line_num, 1);
Packit a7d494
			gtk_text_buffer_get_iter_at_line_offset (buffer, &end, line_num, 2);
Packit a7d494
			gtk_text_buffer_select_range (buffer, &start, &end;;
Packit a7d494
			break;
Packit a7d494
Packit a7d494
		default:
Packit a7d494
			g_assert_not_reached ();
Packit a7d494
	}
Packit a7d494
}
Packit a7d494
Packit a7d494
static void
Packit a7d494
test_move_lines__move_single_line (void)
Packit a7d494
{
Packit a7d494
	GtkSourceView *view;
Packit a7d494
	GtkTextBuffer *buffer;
Packit a7d494
	GtkTextIter start;
Packit a7d494
	GtkTextIter end;
Packit a7d494
	gchar *text;
Packit a7d494
	gint case_num;
Packit a7d494
Packit a7d494
	view = GTK_SOURCE_VIEW (gtk_source_view_new ());
Packit a7d494
	g_object_ref_sink (view);
Packit a7d494
Packit a7d494
	buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
Packit a7d494
Packit a7d494
	/* Move down first line */
Packit a7d494
	for (case_num = 0; case_num < N_CASES_INITIAL_SELECTION_FOR_SINGLE_LINE; case_num++)
Packit a7d494
	{
Packit a7d494
		gtk_text_buffer_set_text (buffer,
Packit a7d494
					  "line1\n"
Packit a7d494
					  "line2\n"
Packit a7d494
					  "line3",
Packit a7d494
					  -1);
Packit a7d494
Packit a7d494
		set_initial_selection_for_single_line (buffer, 0, case_num);
Packit a7d494
Packit a7d494
		g_signal_emit_by_name (view, "move-lines", FALSE, 1);
Packit a7d494
		text = get_text (buffer);
Packit a7d494
		g_assert_cmpstr (text, ==,
Packit a7d494
				 "line2\n"
Packit a7d494
				 "line1\n"
Packit a7d494
				 "line3");
Packit a7d494
		g_free (text);
Packit a7d494
Packit a7d494
		gtk_text_buffer_get_selection_bounds (buffer, &start, &end;;
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&start), ==, 6);
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&end), ==, 12);
Packit a7d494
	}
Packit a7d494
Packit a7d494
	/* Move up second line */
Packit a7d494
	for (case_num = 0; case_num < N_CASES_INITIAL_SELECTION_FOR_SINGLE_LINE; case_num++)
Packit a7d494
	{
Packit a7d494
		gtk_text_buffer_set_text (buffer,
Packit a7d494
					  "line1\n"
Packit a7d494
					  "line2\n"
Packit a7d494
					  "line3",
Packit a7d494
					  -1);
Packit a7d494
Packit a7d494
		set_initial_selection_for_single_line (buffer, 1, case_num);
Packit a7d494
Packit a7d494
		g_signal_emit_by_name (view, "move-lines", FALSE, -1);
Packit a7d494
		text = get_text (buffer);
Packit a7d494
		g_assert_cmpstr (text, ==,
Packit a7d494
				 "line2\n"
Packit a7d494
				 "line1\n"
Packit a7d494
				 "line3");
Packit a7d494
		g_free (text);
Packit a7d494
Packit a7d494
		gtk_text_buffer_get_selection_bounds (buffer, &start, &end;;
Packit a7d494
		g_assert (gtk_text_iter_is_start (&start));
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&end), ==, 6);
Packit a7d494
	}
Packit a7d494
Packit a7d494
	/* Move down second line, without final newline */
Packit a7d494
	for (case_num = 0; case_num < N_CASES_INITIAL_SELECTION_FOR_SINGLE_LINE; case_num++)
Packit a7d494
	{
Packit a7d494
		gtk_text_buffer_set_text (buffer,
Packit a7d494
					  "line1\n"
Packit a7d494
					  "line2\n"
Packit a7d494
					  "line3",
Packit a7d494
					  -1);
Packit a7d494
Packit a7d494
		set_initial_selection_for_single_line (buffer, 1, case_num);
Packit a7d494
Packit a7d494
		g_signal_emit_by_name (view, "move-lines", FALSE, 1);
Packit a7d494
		text = get_text (buffer);
Packit a7d494
		g_assert_cmpstr (text, ==,
Packit a7d494
				 "line1\n"
Packit a7d494
				 "line3\n"
Packit a7d494
				 "line2");
Packit a7d494
		g_free (text);
Packit a7d494
Packit a7d494
		gtk_text_buffer_get_selection_bounds (buffer, &start, &end;;
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&start), ==, 12);
Packit a7d494
		g_assert (gtk_text_iter_is_end (&end));
Packit a7d494
	}
Packit a7d494
Packit a7d494
	/* Move down second line, with final newline */
Packit a7d494
	for (case_num = 0; case_num < N_CASES_INITIAL_SELECTION_FOR_SINGLE_LINE; case_num++)
Packit a7d494
	{
Packit a7d494
		gtk_text_buffer_set_text (buffer,
Packit a7d494
					  "line1\n"
Packit a7d494
					  "line2\n"
Packit a7d494
					  "line3\n",
Packit a7d494
					  -1);
Packit a7d494
Packit a7d494
		set_initial_selection_for_single_line (buffer, 1, case_num);
Packit a7d494
Packit a7d494
		g_signal_emit_by_name (view, "move-lines", FALSE, 1);
Packit a7d494
		text = get_text (buffer);
Packit a7d494
		g_assert_cmpstr (text, ==,
Packit a7d494
				 "line1\n"
Packit a7d494
				 "line3\n"
Packit a7d494
				 "line2\n");
Packit a7d494
		g_free (text);
Packit a7d494
Packit a7d494
		gtk_text_buffer_get_selection_bounds (buffer, &start, &end;;
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&start), ==, 12);
Packit a7d494
		g_assert (gtk_text_iter_is_end (&end));
Packit a7d494
	}
Packit a7d494
Packit a7d494
	/* Move up third line, without final newline */
Packit a7d494
	for (case_num = 0; case_num < N_CASES_INITIAL_SELECTION_FOR_SINGLE_LINE; case_num++)
Packit a7d494
	{
Packit a7d494
		gtk_text_buffer_set_text (buffer,
Packit a7d494
					  "line1\n"
Packit a7d494
					  "line2\n"
Packit a7d494
					  "line3",
Packit a7d494
					  -1);
Packit a7d494
Packit a7d494
		set_initial_selection_for_single_line (buffer, 2, case_num);
Packit a7d494
Packit a7d494
		g_signal_emit_by_name (view, "move-lines", FALSE, -1);
Packit a7d494
		text = get_text (buffer);
Packit a7d494
		g_assert_cmpstr (text, ==,
Packit a7d494
				 "line1\n"
Packit a7d494
				 "line3\n"
Packit a7d494
				 "line2");
Packit a7d494
		g_free (text);
Packit a7d494
Packit a7d494
		gtk_text_buffer_get_selection_bounds (buffer, &start, &end;;
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&start), ==, 6);
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&end), ==, 12);
Packit a7d494
	}
Packit a7d494
Packit a7d494
	/* Move up third line, with final newline */
Packit a7d494
	for (case_num = 0; case_num < N_CASES_INITIAL_SELECTION_FOR_SINGLE_LINE; case_num++)
Packit a7d494
	{
Packit a7d494
		gtk_text_buffer_set_text (buffer,
Packit a7d494
					  "line1\n"
Packit a7d494
					  "line2\n"
Packit a7d494
					  "line3\n",
Packit a7d494
					  -1);
Packit a7d494
Packit a7d494
		set_initial_selection_for_single_line (buffer, 2, case_num);
Packit a7d494
Packit a7d494
		g_signal_emit_by_name (view, "move-lines", FALSE, -1);
Packit a7d494
		text = get_text (buffer);
Packit a7d494
		g_assert_cmpstr (text, ==,
Packit a7d494
				 "line1\n"
Packit a7d494
				 "line3\n"
Packit a7d494
				 "line2\n");
Packit a7d494
		g_free (text);
Packit a7d494
Packit a7d494
		gtk_text_buffer_get_selection_bounds (buffer, &start, &end;;
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&start), ==, 6);
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&end), ==, 12);
Packit a7d494
	}
Packit a7d494
Packit a7d494
	/* Move down last line */
Packit a7d494
	gtk_text_buffer_set_text (buffer,
Packit a7d494
				  "line1\n"
Packit a7d494
				  "line2\n"
Packit a7d494
				  "line3",
Packit a7d494
				  -1);
Packit a7d494
Packit a7d494
	gtk_text_buffer_get_end_iter (buffer, &end;;
Packit a7d494
	gtk_text_buffer_place_cursor (buffer, &end;;
Packit a7d494
Packit a7d494
	g_signal_emit_by_name (view, "move-lines", FALSE, 1);
Packit a7d494
	text = get_text (buffer);
Packit a7d494
	g_assert_cmpstr (text, ==,
Packit a7d494
			 "line1\n"
Packit a7d494
			 "line2\n"
Packit a7d494
			 "line3");
Packit a7d494
	g_free (text);
Packit a7d494
Packit a7d494
	gtk_text_buffer_get_selection_bounds (buffer, &start, &end;;
Packit a7d494
	g_assert (gtk_text_iter_is_end (&start));
Packit a7d494
	g_assert (gtk_text_iter_is_end (&end));
Packit a7d494
Packit a7d494
	/* Move up first line */
Packit a7d494
	gtk_text_buffer_set_text (buffer,
Packit a7d494
				  "line1\n"
Packit a7d494
				  "line2\n"
Packit a7d494
				  "line3",
Packit a7d494
				  -1);
Packit a7d494
Packit a7d494
	gtk_text_buffer_get_start_iter (buffer, &start;;
Packit a7d494
	gtk_text_buffer_place_cursor (buffer, &start;;
Packit a7d494
Packit a7d494
	g_signal_emit_by_name (view, "move-lines", FALSE, -1);
Packit a7d494
	text = get_text (buffer);
Packit a7d494
	g_assert_cmpstr (text, ==,
Packit a7d494
			 "line1\n"
Packit a7d494
			 "line2\n"
Packit a7d494
			 "line3");
Packit a7d494
	g_free (text);
Packit a7d494
Packit a7d494
	gtk_text_buffer_get_selection_bounds (buffer, &start, &end;;
Packit a7d494
	g_assert (gtk_text_iter_is_start (&start));
Packit a7d494
	g_assert (gtk_text_iter_is_start (&end));
Packit a7d494
Packit a7d494
	g_object_unref (view);
Packit a7d494
}
Packit a7d494
Packit a7d494
#define N_CASES_INITIAL_SELECTION_FOR_SEVERAL_LINES (3)
Packit a7d494
Packit a7d494
static void
Packit a7d494
set_initial_selection_for_several_lines (GtkTextBuffer *buffer,
Packit a7d494
					 gint           start_line_num,
Packit a7d494
					 gint           end_line_num,
Packit a7d494
					 gint           case_num)
Packit a7d494
{
Packit a7d494
	GtkTextIter start;
Packit a7d494
	GtkTextIter end;
Packit a7d494
Packit a7d494
	switch (case_num)
Packit a7d494
	{
Packit a7d494
		case 0:
Packit a7d494
			gtk_text_buffer_get_iter_at_line (buffer, &start, start_line_num);
Packit a7d494
			gtk_text_buffer_get_iter_at_line (buffer, &end, end_line_num);
Packit a7d494
			gtk_text_iter_forward_to_line_end (&end;;
Packit a7d494
			gtk_text_buffer_select_range (buffer, &start, &end;;
Packit a7d494
			break;
Packit a7d494
Packit a7d494
		case 1:
Packit a7d494
			gtk_text_buffer_get_iter_at_line (buffer, &start, start_line_num);
Packit a7d494
			gtk_text_buffer_get_iter_at_line (buffer, &end, end_line_num + 1);
Packit a7d494
			gtk_text_buffer_select_range (buffer, &start, &end;;
Packit a7d494
			break;
Packit a7d494
Packit a7d494
		case 2:
Packit a7d494
			gtk_text_buffer_get_iter_at_line_offset (buffer, &start, start_line_num, 1);
Packit a7d494
			gtk_text_buffer_get_iter_at_line_offset (buffer, &end, end_line_num, 1);
Packit a7d494
			gtk_text_buffer_select_range (buffer, &start, &end;;
Packit a7d494
			break;
Packit a7d494
Packit a7d494
		default:
Packit a7d494
			g_assert_not_reached ();
Packit a7d494
	}
Packit a7d494
}
Packit a7d494
Packit a7d494
static void
Packit a7d494
test_move_lines__move_several_lines (void)
Packit a7d494
{
Packit a7d494
	GtkSourceView *view;
Packit a7d494
	GtkTextBuffer *buffer;
Packit a7d494
	GtkTextIter start;
Packit a7d494
	GtkTextIter end;
Packit a7d494
	gchar *text;
Packit a7d494
	gint case_num;
Packit a7d494
Packit a7d494
	view = GTK_SOURCE_VIEW (gtk_source_view_new ());
Packit a7d494
	g_object_ref_sink (view);
Packit a7d494
Packit a7d494
	buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
Packit a7d494
Packit a7d494
	/* Move down first two lines */
Packit a7d494
	for (case_num = 0; case_num < N_CASES_INITIAL_SELECTION_FOR_SEVERAL_LINES; case_num++)
Packit a7d494
	{
Packit a7d494
		gtk_text_buffer_set_text (buffer,
Packit a7d494
					  "line1\n"
Packit a7d494
					  "line2\n"
Packit a7d494
					  "line3\n"
Packit a7d494
					  "line4",
Packit a7d494
					  -1);
Packit a7d494
Packit a7d494
		set_initial_selection_for_several_lines (buffer, 0, 1, case_num);
Packit a7d494
Packit a7d494
		g_signal_emit_by_name (view, "move-lines", FALSE, 1);
Packit a7d494
		text = get_text (buffer);
Packit a7d494
		g_assert_cmpstr (text, ==,
Packit a7d494
				 "line3\n"
Packit a7d494
				 "line1\n"
Packit a7d494
				 "line2\n"
Packit a7d494
				 "line4");
Packit a7d494
		g_free (text);
Packit a7d494
Packit a7d494
		gtk_text_buffer_get_selection_bounds (buffer, &start, &end;;
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&start), ==, 6);
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&end), ==, 18);
Packit a7d494
	}
Packit a7d494
Packit a7d494
	/* Move up second and third lines */
Packit a7d494
	for (case_num = 0; case_num < N_CASES_INITIAL_SELECTION_FOR_SEVERAL_LINES; case_num++)
Packit a7d494
	{
Packit a7d494
		gtk_text_buffer_set_text (buffer,
Packit a7d494
					  "line1\n"
Packit a7d494
					  "line2\n"
Packit a7d494
					  "line3\n"
Packit a7d494
					  "line4",
Packit a7d494
					  -1);
Packit a7d494
Packit a7d494
		set_initial_selection_for_several_lines (buffer, 1, 2, case_num);
Packit a7d494
Packit a7d494
		g_signal_emit_by_name (view, "move-lines", FALSE, -1);
Packit a7d494
		text = get_text (buffer);
Packit a7d494
		g_assert_cmpstr (text, ==,
Packit a7d494
				 "line2\n"
Packit a7d494
				 "line3\n"
Packit a7d494
				 "line1\n"
Packit a7d494
				 "line4");
Packit a7d494
		g_free (text);
Packit a7d494
Packit a7d494
		gtk_text_buffer_get_selection_bounds (buffer, &start, &end;;
Packit a7d494
		g_assert (gtk_text_iter_is_start (&start));
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&end), ==, 12);
Packit a7d494
	}
Packit a7d494
Packit a7d494
	/* Move down second and third lines, without final newline */
Packit a7d494
	for (case_num = 0; case_num < N_CASES_INITIAL_SELECTION_FOR_SEVERAL_LINES; case_num++)
Packit a7d494
	{
Packit a7d494
		gtk_text_buffer_set_text (buffer,
Packit a7d494
					  "line1\n"
Packit a7d494
					  "line2\n"
Packit a7d494
					  "line3\n"
Packit a7d494
					  "line4",
Packit a7d494
					  -1);
Packit a7d494
Packit a7d494
		set_initial_selection_for_several_lines (buffer, 1, 2, case_num);
Packit a7d494
Packit a7d494
		g_signal_emit_by_name (view, "move-lines", FALSE, 1);
Packit a7d494
		text = get_text (buffer);
Packit a7d494
		g_assert_cmpstr (text, ==,
Packit a7d494
				 "line1\n"
Packit a7d494
				 "line4\n"
Packit a7d494
				 "line2\n"
Packit a7d494
				 "line3");
Packit a7d494
		g_free (text);
Packit a7d494
Packit a7d494
		gtk_text_buffer_get_selection_bounds (buffer, &start, &end;;
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&start), ==, 12);
Packit a7d494
		g_assert (gtk_text_iter_is_end (&end));
Packit a7d494
	}
Packit a7d494
Packit a7d494
	/* Move down second and third lines, with final newline */
Packit a7d494
	for (case_num = 0; case_num < N_CASES_INITIAL_SELECTION_FOR_SEVERAL_LINES; case_num++)
Packit a7d494
	{
Packit a7d494
		gtk_text_buffer_set_text (buffer,
Packit a7d494
					  "line1\n"
Packit a7d494
					  "line2\n"
Packit a7d494
					  "line3\n"
Packit a7d494
					  "line4\n",
Packit a7d494
					  -1);
Packit a7d494
Packit a7d494
		set_initial_selection_for_several_lines (buffer, 1, 2, case_num);
Packit a7d494
Packit a7d494
		g_signal_emit_by_name (view, "move-lines", FALSE, 1);
Packit a7d494
		text = get_text (buffer);
Packit a7d494
		g_assert_cmpstr (text, ==,
Packit a7d494
				 "line1\n"
Packit a7d494
				 "line4\n"
Packit a7d494
				 "line2\n"
Packit a7d494
				 "line3\n");
Packit a7d494
		g_free (text);
Packit a7d494
Packit a7d494
		gtk_text_buffer_get_selection_bounds (buffer, &start, &end;;
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&start), ==, 12);
Packit a7d494
		g_assert (gtk_text_iter_is_end (&end));
Packit a7d494
	}
Packit a7d494
Packit a7d494
	/* Move up third and fourth lines, without final newline */
Packit a7d494
	for (case_num = 0; case_num < N_CASES_INITIAL_SELECTION_FOR_SEVERAL_LINES; case_num++)
Packit a7d494
	{
Packit a7d494
		gtk_text_buffer_set_text (buffer,
Packit a7d494
					  "line1\n"
Packit a7d494
					  "line2\n"
Packit a7d494
					  "line3\n"
Packit a7d494
					  "line4",
Packit a7d494
					  -1);
Packit a7d494
Packit a7d494
		set_initial_selection_for_several_lines (buffer, 2, 3, case_num);
Packit a7d494
Packit a7d494
		g_signal_emit_by_name (view, "move-lines", FALSE, -1);
Packit a7d494
		text = get_text (buffer);
Packit a7d494
		g_assert_cmpstr (text, ==,
Packit a7d494
				 "line1\n"
Packit a7d494
				 "line3\n"
Packit a7d494
				 "line4\n"
Packit a7d494
				 "line2");
Packit a7d494
		g_free (text);
Packit a7d494
Packit a7d494
		gtk_text_buffer_get_selection_bounds (buffer, &start, &end;;
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&start), ==, 6);
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&end), ==, 18);
Packit a7d494
	}
Packit a7d494
Packit a7d494
	/* Move up third and fourth lines, with final newline */
Packit a7d494
	for (case_num = 0; case_num < N_CASES_INITIAL_SELECTION_FOR_SEVERAL_LINES; case_num++)
Packit a7d494
	{
Packit a7d494
		gtk_text_buffer_set_text (buffer,
Packit a7d494
					  "line1\n"
Packit a7d494
					  "line2\n"
Packit a7d494
					  "line3\n"
Packit a7d494
					  "line4\n",
Packit a7d494
					  -1);
Packit a7d494
Packit a7d494
		set_initial_selection_for_several_lines (buffer, 2, 3, case_num);
Packit a7d494
Packit a7d494
		g_signal_emit_by_name (view, "move-lines", FALSE, -1);
Packit a7d494
		text = get_text (buffer);
Packit a7d494
		g_assert_cmpstr (text, ==,
Packit a7d494
				 "line1\n"
Packit a7d494
				 "line3\n"
Packit a7d494
				 "line4\n"
Packit a7d494
				 "line2\n");
Packit a7d494
		g_free (text);
Packit a7d494
Packit a7d494
		gtk_text_buffer_get_selection_bounds (buffer, &start, &end;;
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&start), ==, 6);
Packit a7d494
		g_assert_cmpint (gtk_text_iter_get_offset (&end), ==, 18);
Packit a7d494
	}
Packit a7d494
Packit a7d494
	/* Move down last two lines */
Packit a7d494
	gtk_text_buffer_set_text (buffer,
Packit a7d494
				  "line1\n"
Packit a7d494
				  "line2\n"
Packit a7d494
				  "line3\n"
Packit a7d494
				  "line4",
Packit a7d494
				  -1);
Packit a7d494
Packit a7d494
	set_initial_selection_for_several_lines (buffer, 2, 3, 0);
Packit a7d494
Packit a7d494
	g_signal_emit_by_name (view, "move-lines", FALSE, 1);
Packit a7d494
	text = get_text (buffer);
Packit a7d494
	g_assert_cmpstr (text, ==,
Packit a7d494
			 "line1\n"
Packit a7d494
			 "line2\n"
Packit a7d494
			 "line3\n"
Packit a7d494
			 "line4");
Packit a7d494
	g_free (text);
Packit a7d494
Packit a7d494
	/* Move up first two lines */
Packit a7d494
	gtk_text_buffer_set_text (buffer,
Packit a7d494
				  "line1\n"
Packit a7d494
				  "line2\n"
Packit a7d494
				  "line3\n"
Packit a7d494
				  "line4",
Packit a7d494
				  -1);
Packit a7d494
Packit a7d494
	set_initial_selection_for_several_lines (buffer, 0, 1, 0);
Packit a7d494
Packit a7d494
	g_signal_emit_by_name (view, "move-lines", FALSE, -1);
Packit a7d494
	text = get_text (buffer);
Packit a7d494
	g_assert_cmpstr (text, ==,
Packit a7d494
			 "line1\n"
Packit a7d494
			 "line2\n"
Packit a7d494
			 "line3\n"
Packit a7d494
			 "line4");
Packit a7d494
	g_free (text);
Packit a7d494
Packit a7d494
	g_object_unref (view);
Packit a7d494
}
Packit a7d494
Packit a7d494
int
Packit a7d494
main (int argc, char **argv)
Packit a7d494
{
Packit a7d494
	gtk_test_init (&argc, &argv);
Packit a7d494
Packit a7d494
	g_test_add_func ("/view/move-lines/move-single-line", test_move_lines__move_single_line);
Packit a7d494
	g_test_add_func ("/view/move-lines/move-several-lines", test_move_lines__move_several_lines);
Packit a7d494
Packit a7d494
	return g_test_run();
Packit a7d494
}