summaryrefslogtreecommitdiff
path: root/testsuite
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2014-04-13 14:03:12 -0700
committerMatthias Clasen <mclasen@redhat.com>2014-04-13 14:04:09 -0700
commit14ce8025cada0cab9042751f537717fe04f42eeb (patch)
treeefd50dae508e745c1a3bbf270f6f0b6b87949bf1 /testsuite
parent0d55346fbb09fa43049cafd9e3cfd9b3073c35fb (diff)
downloadgtk+-14ce8025cada0cab9042751f537717fe04f42eeb.tar.gz
listbox: Add tests for multi-selection
This was forgotten when the multi-selection API was added, and it was promptly broken in some places.
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/gtk/listbox.c92
1 files changed, 92 insertions, 0 deletions
diff --git a/testsuite/gtk/listbox.c b/testsuite/gtk/listbox.c
index 4f5e22db1b..ce1fca867f 100644
--- a/testsuite/gtk/listbox.c
+++ b/testsuite/gtk/listbox.c
@@ -130,7 +130,9 @@ test_selection (void)
&count);
row = gtk_list_box_get_row_at_index (list, 20);
+ g_assert (!gtk_list_box_row_is_selected (row));
gtk_list_box_select_row (list, row);
+ g_assert (gtk_list_box_row_is_selected (row));
g_assert (callback_row == row);
g_assert_cmpint (count, ==, 1);
row2 = gtk_list_box_get_selected_row (list);
@@ -145,10 +147,12 @@ test_selection (void)
row = gtk_list_box_get_row_at_index (list, 20);
gtk_list_box_select_row (list, row);
+ g_assert (gtk_list_box_row_is_selected (row));
g_assert (callback_row == row);
g_assert_cmpint (count, ==, 3);
gtk_list_box_set_selection_mode (list, GTK_SELECTION_NONE);
+ g_assert (!gtk_list_box_row_is_selected (row));
g_assert (callback_row == NULL);
g_assert_cmpint (count, ==, 4);
row2 = gtk_list_box_get_selected_row (list);
@@ -167,6 +171,93 @@ test_selection (void)
g_object_unref (list);
}
+static void
+on_selected_rows_changed (GtkListBox *box, gpointer data)
+{
+ gint *i = data;
+
+ (*i)++;
+}
+
+static void
+test_multi_selection (void)
+{
+ GtkListBox *list;
+ GList *l;
+ GtkListBoxRow *row, *row2;
+ GtkWidget *label;
+ gint i;
+ gchar *s;
+ gint count;
+
+ list = GTK_LIST_BOX (gtk_list_box_new ());
+ g_object_ref_sink (list);
+ gtk_widget_show (GTK_WIDGET (list));
+
+ g_assert_cmpint (gtk_list_box_get_selection_mode (list), ==, GTK_SELECTION_SINGLE);
+ g_assert (gtk_list_box_get_selected_rows (list) == NULL);
+
+ gtk_list_box_set_selection_mode (list, GTK_SELECTION_MULTIPLE);
+
+ for (i = 0; i < 100; i++)
+ {
+ s = g_strdup_printf ("%d", i);
+ label = gtk_label_new (s);
+ g_object_set_data (G_OBJECT (label), "data", GINT_TO_POINTER (i));
+ g_free (s);
+ gtk_container_add (GTK_CONTAINER (list), label);
+ }
+
+ count = 0;
+ g_signal_connect (list, "selected-rows-changed",
+ G_CALLBACK (on_selected_rows_changed),
+ &count);
+
+ row = gtk_list_box_get_row_at_index (list, 20);
+
+ gtk_list_box_select_all (list);
+ g_assert_cmpint (count, ==, 1);
+ l = gtk_list_box_get_selected_rows (list);
+ g_assert_cmpint (g_list_length (l), ==, 100);
+ g_list_free (l);
+ g_assert (gtk_list_box_row_is_selected (row));
+
+ gtk_list_box_unselect_all (list);
+ g_assert_cmpint (count, ==, 2);
+ l = gtk_list_box_get_selected_rows (list);
+ g_assert (l == NULL);
+ g_assert (!gtk_list_box_row_is_selected (row));
+
+ gtk_list_box_select_row (list, row);
+ g_assert (gtk_list_box_row_is_selected (row));
+ g_assert_cmpint (count, ==, 3);
+ l = gtk_list_box_get_selected_rows (list);
+ g_assert_cmpint (g_list_length (l), ==, 1);
+ g_assert (l->data == row);
+ g_list_free (l);
+
+ row2 = gtk_list_box_get_row_at_index (list, 40);
+ g_assert (!gtk_list_box_row_is_selected (row2));
+ gtk_list_box_select_row (list, row2);
+ g_assert (gtk_list_box_row_is_selected (row2));
+ g_assert_cmpint (count, ==, 4);
+ l = gtk_list_box_get_selected_rows (list);
+ g_assert_cmpint (g_list_length (l), ==, 2);
+ g_assert (l->data == row);
+ g_assert (l->next->data == row2);
+ g_list_free (l);
+
+ gtk_list_box_unselect_row (list, row);
+ g_assert (!gtk_list_box_row_is_selected (row));
+ g_assert_cmpint (count, ==, 5);
+ l = gtk_list_box_get_selected_rows (list);
+ g_assert_cmpint (g_list_length (l), ==, 1);
+ g_assert (l->data == row2);
+ g_list_free (l);
+
+ g_object_unref (list);
+}
+
static gboolean
filter_func (GtkListBoxRow *row,
gpointer data)
@@ -344,6 +435,7 @@ main (int argc, char *argv[])
g_test_add_func ("/listbox/sort", test_sort);
g_test_add_func ("/listbox/selection", test_selection);
+ g_test_add_func ("/listbox/multi-selection", test_multi_selection);
g_test_add_func ("/listbox/filter", test_filter);
g_test_add_func ("/listbox/header", test_header);