Bug Summary

File:testsuite/ctk/listbox.c
Warning:line 31, column 8
Although the value stored to 'n1' is used in the enclosing expression, the value is never actually read from 'n1'

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name listbox.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/rootdir/testsuite/ctk -resource-dir /usr/lib/llvm-16/lib/clang/16 -D HAVE_CONFIG_H -I . -I ../.. -D CTK_LOCALEDIR="/usr/share/locale" -I ../.. -I ../../cdk -I ../../cdk -I ../../ctk -I ../../ctk -D G_ENABLE_DEBUG -D G_ENABLE_CONSISTENCY_CHECKS -D GLIB_MIN_REQUIRED_VERSION=GLIB_VERSION_2_66 -D GLIB_MAX_ALLOWED_VERSION=GLIB_VERSION_2_66 -I /usr/include/pango-1.0 -I /usr/include/glib-2.0 -I /usr/lib/x86_64-linux-gnu/glib-2.0/include -I /usr/include/sysprof-6 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/cairo -I /usr/include/pixman-1 -I /usr/include/atk-1.0 -I /usr/include/gdk-pixbuf-2.0 -I /usr/include/x86_64-linux-gnu -I /usr/include/webp -I /usr/include/at-spi2-atk/2.0 -I /usr/include/at-spi-2.0 -I /usr/include/dbus-1.0 -I /usr/lib/x86_64-linux-gnu/dbus-1.0/include -I /usr/include/gio-unix-2.0 -I /usr/include/harfbuzz -I /usr/include/freetype2 -I /usr/include/libpng16 -I /usr/include/glib-2.0 -I /usr/lib/x86_64-linux-gnu/glib-2.0/include -I /usr/include/sysprof-6 -I /usr/include/pango-1.0 -I /usr/include/libmount -I /usr/include/blkid -I /usr/include/fribidi -I /usr/include/cairo -I /usr/include/pixman-1 -D HAVE_UNIX_PRINT_WIDGETS -internal-isystem /usr/lib/llvm-16/lib/clang/16/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir=/rootdir/testsuite/ctk -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /rootdir/html-report/2024-09-19-172934-43638-1 -x c listbox.c
1#include <ctk/ctk.h>
2
3static gint
4sort_list (CtkListBoxRow *row1,
5 CtkListBoxRow *row2,
6 gpointer data)
7{
8 CtkWidget *label1, *label2;
9 gint n1, n2;
10 gint *count = data;
11
12 (*count)++;
13
14 label1 = ctk_bin_get_child (CTK_BIN (row1)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((row1)), ((ctk_bin_get_type ()))))))
);
15 n1 = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (label1), "data"))((gint) (glong) (g_object_get_data (((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((label1)), (((GType) ((20) << (2)))
))))), "data")))
;
16
17 label2 = ctk_bin_get_child (CTK_BIN (row2)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((row2)), ((ctk_bin_get_type ()))))))
);
18 n2 = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (label2), "data"))((gint) (glong) (g_object_get_data (((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((label2)), (((GType) ((20) << (2)))
))))), "data")))
;
19
20 return (n1 - n2);
21}
22
23static void
24check_sorted (CtkListBox *list)
25{
26 GList *children;
27 CtkWidget *row, *label;
28 gint n1, n2;
29 GList *l;
30
31 n2 = n1 = 0;
Although the value stored to 'n1' is used in the enclosing expression, the value is never actually read from 'n1'
32 children = ctk_container_get_children (CTK_CONTAINER (list)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((list)), ((ctk_container_get_type ()))))))
);
33 for (l = children; l; l = l->next)
34 {
35 row = l->data;
36 n1 = n2;
37 label = ctk_bin_get_child (CTK_BIN (row)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((row)), ((ctk_bin_get_type ()))))))
);
38 n2 = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (label), "data"))((gint) (glong) (g_object_get_data (((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((label)), (((GType) ((20) << (2))))
)))), "data")))
;
39 g_assert_cmpint (n1, <=, n2)do { gint64 __n1 = (n1), __n2 = (n2); if (__n1 <= __n2) ; else
g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 39, (
(const char*) (__func__)), "n1" " " "<=" " " "n2", (guint64
)__n1, "<=", (guint64)__n2, 'i'); } while (0)
;
40 }
41 g_list_free (children);
42}
43
44static void
45test_sort (void)
46{
47 CtkListBox *list;
48 CtkListBoxRow *row;
49 CtkWidget *label;
50 gint i, r;
51 gchar *s;
52 gint count;
53
54 list = CTK_LIST_BOX (ctk_list_box_new ())((((CtkListBox*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_list_box_new ())), ((ctk_list_box_get_type ()))))))
;
55 g_object_ref_sink (list)((__typeof__ (list)) (g_object_ref_sink) (list));
56 ctk_widget_show (CTK_WIDGET (list)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((list)), ((ctk_widget_get_type ()))))))
);
57
58 for (i = 0; i < 100; i++)
59 {
60 r = g_random_int_range (0, 1000);
61 s = g_strdup_printf ("%d: %d", i, r);
62 label = ctk_label_new (s);
63 g_object_set_data (G_OBJECT (label)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((label)), (((GType) ((20) << (2))))))))
, "data", GINT_TO_POINTER (r)((gpointer) (glong) (r)));
64 g_free (s);
65 ctk_container_add (CTK_CONTAINER (list)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((list)), ((ctk_container_get_type ()))))))
, label);
66 }
67
68 count = 0;
69 ctk_list_box_set_sort_func (list, sort_list, &count, NULL((void*)0));
70 g_assert_cmpint (count, >, 0)do { gint64 __n1 = (count), __n2 = (0); if (__n1 > __n2) ;
else g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 70
, ((const char*) (__func__)), "count" " " ">" " " "0", (guint64
)__n1, ">", (guint64)__n2, 'i'); } while (0)
;
71
72 check_sorted (list);
73
74 count = 0;
75 ctk_list_box_invalidate_sort (list);
76 g_assert_cmpint (count, >, 0)do { gint64 __n1 = (count), __n2 = (0); if (__n1 > __n2) ;
else g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 76
, ((const char*) (__func__)), "count" " " ">" " " "0", (guint64
)__n1, ">", (guint64)__n2, 'i'); } while (0)
;
77
78 count = 0;
79 row = ctk_list_box_get_row_at_index (list, 0);
80 ctk_list_box_row_changed (row);
81 g_assert_cmpint (count, >, 0)do { gint64 __n1 = (count), __n2 = (0); if (__n1 > __n2) ;
else g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 81
, ((const char*) (__func__)), "count" " " ">" " " "0", (guint64
)__n1, ">", (guint64)__n2, 'i'); } while (0)
;
82
83 g_object_unref (list);
84}
85
86static CtkListBoxRow *callback_row;
87
88static void
89on_row_selected (CtkListBox *list_box,
90 CtkListBoxRow *row,
91 gpointer data)
92{
93 gint *i = data;
94
95 (*i)++;
96
97 callback_row = row;
98}
99
100static void
101test_selection (void)
102{
103 CtkListBox *list;
104 CtkListBoxRow *row, *row2;
105 CtkWidget *label;
106 gint i;
107 gchar *s;
108 gint count;
109 gint index;
110
111 list = CTK_LIST_BOX (ctk_list_box_new ())((((CtkListBox*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_list_box_new ())), ((ctk_list_box_get_type ()))))))
;
112 g_object_ref_sink (list)((__typeof__ (list)) (g_object_ref_sink) (list));
113 ctk_widget_show (CTK_WIDGET (list)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((list)), ((ctk_widget_get_type ()))))))
);
114
115 g_assert_cmpint (ctk_list_box_get_selection_mode (list), ==, CTK_SELECTION_SINGLE)do { gint64 __n1 = (ctk_list_box_get_selection_mode (list)), __n2
= (CTK_SELECTION_SINGLE); if (__n1 == __n2) ; else g_assertion_message_cmpint
(((gchar*) 0), "listbox.c", 115, ((const char*) (__func__)),
"ctk_list_box_get_selection_mode (list)" " " "==" " " "CTK_SELECTION_SINGLE"
, (guint64)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
116 g_assert (ctk_list_box_get_selected_row (list) == NULL)do { if (ctk_list_box_get_selected_row (list) == ((void*)0)) ;
else g_assertion_message_expr (((gchar*) 0), "listbox.c", 116
, ((const char*) (__func__)), "ctk_list_box_get_selected_row (list) == NULL"
); } while (0)
;
117
118 for (i = 0; i < 100; i++)
119 {
120 s = g_strdup_printf ("%d", i);
121 label = ctk_label_new (s);
122 g_object_set_data (G_OBJECT (label)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((label)), (((GType) ((20) << (2))))))))
, "data", GINT_TO_POINTER (i)((gpointer) (glong) (i)));
123 g_free (s);
124 ctk_container_add (CTK_CONTAINER (list)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((list)), ((ctk_container_get_type ()))))))
, label);
125 }
126
127 count = 0;
128 g_signal_connect (list, "row-selected",g_signal_connect_data ((list), ("row-selected"), (((GCallback
) (on_row_selected))), (&count), ((void*)0), (GConnectFlags
) 0)
129 G_CALLBACK (on_row_selected),g_signal_connect_data ((list), ("row-selected"), (((GCallback
) (on_row_selected))), (&count), ((void*)0), (GConnectFlags
) 0)
130 &count)g_signal_connect_data ((list), ("row-selected"), (((GCallback
) (on_row_selected))), (&count), ((void*)0), (GConnectFlags
) 0)
;
131
132 row = ctk_list_box_get_row_at_index (list, 20);
133 g_assert (!ctk_list_box_row_is_selected (row))do { if (!ctk_list_box_row_is_selected (row)) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 133, ((const char*) (__func__)),
"!ctk_list_box_row_is_selected (row)"); } while (0)
;
134 ctk_list_box_select_row (list, row);
135 g_assert (ctk_list_box_row_is_selected (row))do { if (ctk_list_box_row_is_selected (row)) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 135, ((const char*) (__func__)),
"ctk_list_box_row_is_selected (row)"); } while (0)
;
136 g_assert (callback_row == row)do { if (callback_row == row) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 136, ((const char*) (__func__)),
"callback_row == row"); } while (0)
;
137 g_assert_cmpint (count, ==, 1)do { gint64 __n1 = (count), __n2 = (1); if (__n1 == __n2) ; else
g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 137, (
(const char*) (__func__)), "count" " " "==" " " "1", (guint64
)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
138 row2 = ctk_list_box_get_selected_row (list);
139 g_assert (row2 == row)do { if (row2 == row) ; else g_assertion_message_expr (((gchar
*) 0), "listbox.c", 139, ((const char*) (__func__)), "row2 == row"
); } while (0)
;
140 ctk_list_box_unselect_all (list);
141 row2 = ctk_list_box_get_selected_row (list);
142 g_assert (row2 == NULL)do { if (row2 == ((void*)0)) ; else g_assertion_message_expr (
((gchar*) 0), "listbox.c", 142, ((const char*) (__func__)), "row2 == NULL"
); } while (0)
;
143 ctk_list_box_select_row (list, row);
144 row2 = ctk_list_box_get_selected_row (list);
145 g_assert (row2 == row)do { if (row2 == row) ; else g_assertion_message_expr (((gchar
*) 0), "listbox.c", 145, ((const char*) (__func__)), "row2 == row"
); } while (0)
;
146
147 ctk_list_box_set_selection_mode (list, CTK_SELECTION_BROWSE);
148 ctk_container_remove (CTK_CONTAINER (list)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((list)), ((ctk_container_get_type ()))))))
, CTK_WIDGET (row)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((row)), ((ctk_widget_get_type ()))))))
);
149 g_assert (callback_row == NULL)do { if (callback_row == ((void*)0)) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 149, ((const char*) (__func__)),
"callback_row == NULL"); } while (0)
;
150 g_assert_cmpint (count, ==, 4)do { gint64 __n1 = (count), __n2 = (4); if (__n1 == __n2) ; else
g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 150, (
(const char*) (__func__)), "count" " " "==" " " "4", (guint64
)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
151 row2 = ctk_list_box_get_selected_row (list);
152 g_assert (row2 == NULL)do { if (row2 == ((void*)0)) ; else g_assertion_message_expr (
((gchar*) 0), "listbox.c", 152, ((const char*) (__func__)), "row2 == NULL"
); } while (0)
;
153
154 row = ctk_list_box_get_row_at_index (list, 20);
155 ctk_list_box_select_row (list, row);
156 g_assert (ctk_list_box_row_is_selected (row))do { if (ctk_list_box_row_is_selected (row)) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 156, ((const char*) (__func__)),
"ctk_list_box_row_is_selected (row)"); } while (0)
;
157 g_assert (callback_row == row)do { if (callback_row == row) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 157, ((const char*) (__func__)),
"callback_row == row"); } while (0)
;
158 g_assert_cmpint (count, ==, 5)do { gint64 __n1 = (count), __n2 = (5); if (__n1 == __n2) ; else
g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 158, (
(const char*) (__func__)), "count" " " "==" " " "5", (guint64
)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
159
160 ctk_list_box_set_selection_mode (list, CTK_SELECTION_NONE);
161 g_assert (!ctk_list_box_row_is_selected (row))do { if (!ctk_list_box_row_is_selected (row)) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 161, ((const char*) (__func__)),
"!ctk_list_box_row_is_selected (row)"); } while (0)
;
162 g_assert (callback_row == NULL)do { if (callback_row == ((void*)0)) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 162, ((const char*) (__func__)),
"callback_row == NULL"); } while (0)
;
163 g_assert_cmpint (count, ==, 6)do { gint64 __n1 = (count), __n2 = (6); if (__n1 == __n2) ; else
g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 163, (
(const char*) (__func__)), "count" " " "==" " " "6", (guint64
)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
164 row2 = ctk_list_box_get_selected_row (list);
165 g_assert (row2 == NULL)do { if (row2 == ((void*)0)) ; else g_assertion_message_expr (
((gchar*) 0), "listbox.c", 165, ((const char*) (__func__)), "row2 == NULL"
); } while (0)
;
166
167 row = ctk_list_box_get_row_at_index (list, 20);
168 index = ctk_list_box_row_get_index (row);
169 g_assert_cmpint (index, ==, 20)do { gint64 __n1 = (index), __n2 = (20); if (__n1 == __n2) ; else
g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 169, (
(const char*) (__func__)), "index" " " "==" " " "20", (guint64
)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
170
171 row = CTK_LIST_BOX_ROW (ctk_list_box_row_new ())((((CtkListBoxRow*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_list_box_row_new ())), ((ctk_list_box_row_get_type (
)))))))
;
172 g_object_ref_sink (row)((__typeof__ (row)) (g_object_ref_sink) (row));
173 index = ctk_list_box_row_get_index (row);
174 g_assert_cmpint (index, ==, -1)do { gint64 __n1 = (index), __n2 = (-1); if (__n1 == __n2) ; else
g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 174, (
(const char*) (__func__)), "index" " " "==" " " "-1", (guint64
)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
175 g_object_unref (row);
176
177 g_object_unref (list);
178}
179
180static void
181on_selected_rows_changed (CtkListBox *box, gpointer data)
182{
183 gint *i = data;
184
185 (*i)++;
186}
187
188static void
189test_multi_selection (void)
190{
191 CtkListBox *list;
192 GList *l;
193 CtkListBoxRow *row, *row2;
194 CtkWidget *label;
195 gint i;
196 gchar *s;
197 gint count;
198
199 list = CTK_LIST_BOX (ctk_list_box_new ())((((CtkListBox*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_list_box_new ())), ((ctk_list_box_get_type ()))))))
;
200 g_object_ref_sink (list)((__typeof__ (list)) (g_object_ref_sink) (list));
201 ctk_widget_show (CTK_WIDGET (list)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((list)), ((ctk_widget_get_type ()))))))
);
202
203 g_assert_cmpint (ctk_list_box_get_selection_mode (list), ==, CTK_SELECTION_SINGLE)do { gint64 __n1 = (ctk_list_box_get_selection_mode (list)), __n2
= (CTK_SELECTION_SINGLE); if (__n1 == __n2) ; else g_assertion_message_cmpint
(((gchar*) 0), "listbox.c", 203, ((const char*) (__func__)),
"ctk_list_box_get_selection_mode (list)" " " "==" " " "CTK_SELECTION_SINGLE"
, (guint64)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
204 g_assert (ctk_list_box_get_selected_rows (list) == NULL)do { if (ctk_list_box_get_selected_rows (list) == ((void*)0))
; else g_assertion_message_expr (((gchar*) 0), "listbox.c", 204
, ((const char*) (__func__)), "ctk_list_box_get_selected_rows (list) == NULL"
); } while (0)
;
205
206 ctk_list_box_set_selection_mode (list, CTK_SELECTION_MULTIPLE);
207
208 for (i = 0; i < 100; i++)
209 {
210 s = g_strdup_printf ("%d", i);
211 label = ctk_label_new (s);
212 g_object_set_data (G_OBJECT (label)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((label)), (((GType) ((20) << (2))))))))
, "data", GINT_TO_POINTER (i)((gpointer) (glong) (i)));
213 g_free (s);
214 ctk_container_add (CTK_CONTAINER (list)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((list)), ((ctk_container_get_type ()))))))
, label);
215 }
216
217 count = 0;
218 g_signal_connect (list, "selected-rows-changed",g_signal_connect_data ((list), ("selected-rows-changed"), (((
GCallback) (on_selected_rows_changed))), (&count), ((void
*)0), (GConnectFlags) 0)
219 G_CALLBACK (on_selected_rows_changed),g_signal_connect_data ((list), ("selected-rows-changed"), (((
GCallback) (on_selected_rows_changed))), (&count), ((void
*)0), (GConnectFlags) 0)
220 &count)g_signal_connect_data ((list), ("selected-rows-changed"), (((
GCallback) (on_selected_rows_changed))), (&count), ((void
*)0), (GConnectFlags) 0)
;
221
222 row = ctk_list_box_get_row_at_index (list, 20);
223
224 ctk_list_box_select_all (list);
225 g_assert_cmpint (count, ==, 1)do { gint64 __n1 = (count), __n2 = (1); if (__n1 == __n2) ; else
g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 225, (
(const char*) (__func__)), "count" " " "==" " " "1", (guint64
)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
226 l = ctk_list_box_get_selected_rows (list);
227 g_assert_cmpint (g_list_length (l), ==, 100)do { gint64 __n1 = (g_list_length (l)), __n2 = (100); if (__n1
== __n2) ; else g_assertion_message_cmpint (((gchar*) 0), "listbox.c"
, 227, ((const char*) (__func__)), "g_list_length (l)" " " "=="
" " "100", (guint64)__n1, "==", (guint64)__n2, 'i'); } while
(0)
;
228 g_list_free (l);
229 g_assert (ctk_list_box_row_is_selected (row))do { if (ctk_list_box_row_is_selected (row)) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 229, ((const char*) (__func__)),
"ctk_list_box_row_is_selected (row)"); } while (0)
;
230
231 ctk_list_box_unselect_all (list);
232 g_assert_cmpint (count, ==, 2)do { gint64 __n1 = (count), __n2 = (2); if (__n1 == __n2) ; else
g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 232, (
(const char*) (__func__)), "count" " " "==" " " "2", (guint64
)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
233 l = ctk_list_box_get_selected_rows (list);
234 g_assert (l == NULL)do { if (l == ((void*)0)) ; else g_assertion_message_expr (((
gchar*) 0), "listbox.c", 234, ((const char*) (__func__)), "l == NULL"
); } while (0)
;
235 g_assert (!ctk_list_box_row_is_selected (row))do { if (!ctk_list_box_row_is_selected (row)) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 235, ((const char*) (__func__)),
"!ctk_list_box_row_is_selected (row)"); } while (0)
;
236
237 ctk_list_box_select_row (list, row);
238 g_assert (ctk_list_box_row_is_selected (row))do { if (ctk_list_box_row_is_selected (row)) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 238, ((const char*) (__func__)),
"ctk_list_box_row_is_selected (row)"); } while (0)
;
239 g_assert_cmpint (count, ==, 3)do { gint64 __n1 = (count), __n2 = (3); if (__n1 == __n2) ; else
g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 239, (
(const char*) (__func__)), "count" " " "==" " " "3", (guint64
)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
240 l = ctk_list_box_get_selected_rows (list);
241 g_assert_cmpint (g_list_length (l), ==, 1)do { gint64 __n1 = (g_list_length (l)), __n2 = (1); if (__n1 ==
__n2) ; else g_assertion_message_cmpint (((gchar*) 0), "listbox.c"
, 241, ((const char*) (__func__)), "g_list_length (l)" " " "=="
" " "1", (guint64)__n1, "==", (guint64)__n2, 'i'); } while (
0)
;
242 g_assert (l->data == row)do { if (l->data == row) ; else g_assertion_message_expr (
((gchar*) 0), "listbox.c", 242, ((const char*) (__func__)), "l->data == row"
); } while (0)
;
243 g_list_free (l);
244
245 row2 = ctk_list_box_get_row_at_index (list, 40);
246 g_assert (!ctk_list_box_row_is_selected (row2))do { if (!ctk_list_box_row_is_selected (row2)) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 246, ((const char*) (__func__)),
"!ctk_list_box_row_is_selected (row2)"); } while (0)
;
247 ctk_list_box_select_row (list, row2);
248 g_assert (ctk_list_box_row_is_selected (row2))do { if (ctk_list_box_row_is_selected (row2)) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 248, ((const char*) (__func__)),
"ctk_list_box_row_is_selected (row2)"); } while (0)
;
249 g_assert_cmpint (count, ==, 4)do { gint64 __n1 = (count), __n2 = (4); if (__n1 == __n2) ; else
g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 249, (
(const char*) (__func__)), "count" " " "==" " " "4", (guint64
)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
250 l = ctk_list_box_get_selected_rows (list);
251 g_assert_cmpint (g_list_length (l), ==, 2)do { gint64 __n1 = (g_list_length (l)), __n2 = (2); if (__n1 ==
__n2) ; else g_assertion_message_cmpint (((gchar*) 0), "listbox.c"
, 251, ((const char*) (__func__)), "g_list_length (l)" " " "=="
" " "2", (guint64)__n1, "==", (guint64)__n2, 'i'); } while (
0)
;
252 g_assert (l->data == row)do { if (l->data == row) ; else g_assertion_message_expr (
((gchar*) 0), "listbox.c", 252, ((const char*) (__func__)), "l->data == row"
); } while (0)
;
253 g_assert (l->next->data == row2)do { if (l->next->data == row2) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 253, ((const char*) (__func__)),
"l->next->data == row2"); } while (0)
;
254 g_list_free (l);
255
256 ctk_list_box_unselect_row (list, row);
257 g_assert (!ctk_list_box_row_is_selected (row))do { if (!ctk_list_box_row_is_selected (row)) ; else g_assertion_message_expr
(((gchar*) 0), "listbox.c", 257, ((const char*) (__func__)),
"!ctk_list_box_row_is_selected (row)"); } while (0)
;
258 g_assert_cmpint (count, ==, 5)do { gint64 __n1 = (count), __n2 = (5); if (__n1 == __n2) ; else
g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 258, (
(const char*) (__func__)), "count" " " "==" " " "5", (guint64
)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
259 l = ctk_list_box_get_selected_rows (list);
260 g_assert_cmpint (g_list_length (l), ==, 1)do { gint64 __n1 = (g_list_length (l)), __n2 = (1); if (__n1 ==
__n2) ; else g_assertion_message_cmpint (((gchar*) 0), "listbox.c"
, 260, ((const char*) (__func__)), "g_list_length (l)" " " "=="
" " "1", (guint64)__n1, "==", (guint64)__n2, 'i'); } while (
0)
;
261 g_assert (l->data == row2)do { if (l->data == row2) ; else g_assertion_message_expr (
((gchar*) 0), "listbox.c", 261, ((const char*) (__func__)), "l->data == row2"
); } while (0)
;
262 g_list_free (l);
263
264 g_object_unref (list);
265}
266
267static gboolean
268filter_func (CtkListBoxRow *row,
269 gpointer data)
270{
271 gint *count = data;
272 CtkWidget *child;
273 gint i;
274
275 (*count)++;
276
277 child = ctk_bin_get_child (CTK_BIN (row)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((row)), ((ctk_bin_get_type ()))))))
);
278 i = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (child), "data"))((gint) (glong) (g_object_get_data (((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((child)), (((GType) ((20) << (2))))
)))), "data")))
;
279
280 return (i % 2) == 0;
281}
282
283static void
284check_filtered (CtkListBox *list)
285{
286 GList *children, *l;
287 gint count;
288 CtkWidget *row;
289
290 count = 0;
291 children = ctk_container_get_children (CTK_CONTAINER (list)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((list)), ((ctk_container_get_type ()))))))
);
292 for (l = children; l; l = l->next)
293 {
294 row = l->data;
295 if (ctk_widget_get_child_visible (row))
296 count++;
297 }
298 g_list_free (children);
299 g_assert_cmpint (count, ==, 50)do { gint64 __n1 = (count), __n2 = (50); if (__n1 == __n2) ; else
g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 299, (
(const char*) (__func__)), "count" " " "==" " " "50", (guint64
)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
300}
301
302static void
303test_filter (void)
304{
305 CtkListBox *list;
306 CtkListBoxRow *row;
307 gint i;
308 gchar *s;
309 CtkWidget *label;
310 gint count;
311
312 list = CTK_LIST_BOX (ctk_list_box_new ())((((CtkListBox*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_list_box_new ())), ((ctk_list_box_get_type ()))))))
;
313 g_object_ref_sink (list)((__typeof__ (list)) (g_object_ref_sink) (list));
314 ctk_widget_show (CTK_WIDGET (list)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((list)), ((ctk_widget_get_type ()))))))
);
315
316 g_assert_cmpint (ctk_list_box_get_selection_mode (list), ==, CTK_SELECTION_SINGLE)do { gint64 __n1 = (ctk_list_box_get_selection_mode (list)), __n2
= (CTK_SELECTION_SINGLE); if (__n1 == __n2) ; else g_assertion_message_cmpint
(((gchar*) 0), "listbox.c", 316, ((const char*) (__func__)),
"ctk_list_box_get_selection_mode (list)" " " "==" " " "CTK_SELECTION_SINGLE"
, (guint64)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
317 g_assert (ctk_list_box_get_selected_row (list) == NULL)do { if (ctk_list_box_get_selected_row (list) == ((void*)0)) ;
else g_assertion_message_expr (((gchar*) 0), "listbox.c", 317
, ((const char*) (__func__)), "ctk_list_box_get_selected_row (list) == NULL"
); } while (0)
;
318
319 for (i = 0; i < 100; i++)
320 {
321 s = g_strdup_printf ("%d", i);
322 label = ctk_label_new (s);
323 g_object_set_data (G_OBJECT (label)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((label)), (((GType) ((20) << (2))))))))
, "data", GINT_TO_POINTER (i)((gpointer) (glong) (i)));
324 g_free (s);
325 ctk_container_add (CTK_CONTAINER (list)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((list)), ((ctk_container_get_type ()))))))
, label);
326 }
327
328 count = 0;
329 ctk_list_box_set_filter_func (list, filter_func, &count, NULL((void*)0));
330 g_assert_cmpint (count, >, 0)do { gint64 __n1 = (count), __n2 = (0); if (__n1 > __n2) ;
else g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 330
, ((const char*) (__func__)), "count" " " ">" " " "0", (guint64
)__n1, ">", (guint64)__n2, 'i'); } while (0)
;
331
332 check_filtered (list);
333
334 count = 0;
335 ctk_list_box_invalidate_filter (list);
336 g_assert_cmpint (count, >, 0)do { gint64 __n1 = (count), __n2 = (0); if (__n1 > __n2) ;
else g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 336
, ((const char*) (__func__)), "count" " " ">" " " "0", (guint64
)__n1, ">", (guint64)__n2, 'i'); } while (0)
;
337
338 count = 0;
339 row = ctk_list_box_get_row_at_index (list, 0);
340 ctk_list_box_row_changed (row);
341 g_assert_cmpint (count, >, 0)do { gint64 __n1 = (count), __n2 = (0); if (__n1 > __n2) ;
else g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 341
, ((const char*) (__func__)), "count" " " ">" " " "0", (guint64
)__n1, ">", (guint64)__n2, 'i'); } while (0)
;
342
343 g_object_unref (list);
344}
345
346static void
347header_func (CtkListBoxRow *row,
348 CtkListBoxRow *before,
349 gpointer data)
350{
351 CtkWidget *child;
352 gint i;
353 gint *count = data;
354 CtkWidget *header;
355 gchar *s;
356
357 (*count)++;
358
359 child = ctk_bin_get_child (CTK_BIN (row)((((CtkBin*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((row)), ((ctk_bin_get_type ()))))))
);
360 i = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (child), "data"))((gint) (glong) (g_object_get_data (((((GObject*) (void *) g_type_check_instance_cast
((GTypeInstance*) ((child)), (((GType) ((20) << (2))))
)))), "data")))
;
361
362 if (i % 2 == 0)
363 {
364 s = g_strdup_printf ("Header %d", i);
365 header = ctk_label_new (s);
366 g_free (s);
367 }
368 else
369 header = NULL((void*)0);
370
371 ctk_list_box_row_set_header (row, header);
372}
373
374static void
375check_headers (CtkListBox *list)
376{
377 GList *children, *l;
378 gint count;
379 CtkListBoxRow *row;
380
381 count = 0;
382 children = ctk_container_get_children (CTK_CONTAINER (list)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((list)), ((ctk_container_get_type ()))))))
);
383 for (l = children; l; l = l->next)
384 {
385 row = l->data;
386 if (ctk_list_box_row_get_header (row) != NULL((void*)0))
387 count++;
388 }
389 g_list_free (children);
390 g_assert_cmpint (count, ==, 50)do { gint64 __n1 = (count), __n2 = (50); if (__n1 == __n2) ; else
g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 390, (
(const char*) (__func__)), "count" " " "==" " " "50", (guint64
)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
391}
392
393static void
394test_header (void)
395{
396 CtkListBox *list;
397 CtkListBoxRow *row;
398 gint i;
399 gchar *s;
400 CtkWidget *label;
401 gint count;
402
403 list = CTK_LIST_BOX (ctk_list_box_new ())((((CtkListBox*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((ctk_list_box_new ())), ((ctk_list_box_get_type ()))))))
;
404 g_object_ref_sink (list)((__typeof__ (list)) (g_object_ref_sink) (list));
405 ctk_widget_show (CTK_WIDGET (list)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((list)), ((ctk_widget_get_type ()))))))
);
406
407 g_assert_cmpint (ctk_list_box_get_selection_mode (list), ==, CTK_SELECTION_SINGLE)do { gint64 __n1 = (ctk_list_box_get_selection_mode (list)), __n2
= (CTK_SELECTION_SINGLE); if (__n1 == __n2) ; else g_assertion_message_cmpint
(((gchar*) 0), "listbox.c", 407, ((const char*) (__func__)),
"ctk_list_box_get_selection_mode (list)" " " "==" " " "CTK_SELECTION_SINGLE"
, (guint64)__n1, "==", (guint64)__n2, 'i'); } while (0)
;
408 g_assert (ctk_list_box_get_selected_row (list) == NULL)do { if (ctk_list_box_get_selected_row (list) == ((void*)0)) ;
else g_assertion_message_expr (((gchar*) 0), "listbox.c", 408
, ((const char*) (__func__)), "ctk_list_box_get_selected_row (list) == NULL"
); } while (0)
;
409
410 for (i = 0; i < 100; i++)
411 {
412 s = g_strdup_printf ("%d", i);
413 label = ctk_label_new (s);
414 g_object_set_data (G_OBJECT (label)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((label)), (((GType) ((20) << (2))))))))
, "data", GINT_TO_POINTER (i)((gpointer) (glong) (i)));
415 g_free (s);
416 ctk_container_add (CTK_CONTAINER (list)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance
*) ((list)), ((ctk_container_get_type ()))))))
, label);
417 }
418
419 count = 0;
420 ctk_list_box_set_header_func (list, header_func, &count, NULL((void*)0));
421 g_assert_cmpint (count, >, 0)do { gint64 __n1 = (count), __n2 = (0); if (__n1 > __n2) ;
else g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 421
, ((const char*) (__func__)), "count" " " ">" " " "0", (guint64
)__n1, ">", (guint64)__n2, 'i'); } while (0)
;
422
423 check_headers (list);
424
425 count = 0;
426 ctk_list_box_invalidate_headers (list);
427 g_assert_cmpint (count, >, 0)do { gint64 __n1 = (count), __n2 = (0); if (__n1 > __n2) ;
else g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 427
, ((const char*) (__func__)), "count" " " ">" " " "0", (guint64
)__n1, ">", (guint64)__n2, 'i'); } while (0)
;
428
429 count = 0;
430 row = ctk_list_box_get_row_at_index (list, 0);
431 ctk_list_box_row_changed (row);
432 g_assert_cmpint (count, >, 0)do { gint64 __n1 = (count), __n2 = (0); if (__n1 > __n2) ;
else g_assertion_message_cmpint (((gchar*) 0), "listbox.c", 432
, ((const char*) (__func__)), "count" " " ">" " " "0", (guint64
)__n1, ">", (guint64)__n2, 'i'); } while (0)
;
433
434 g_object_unref (list);
435}
436
437int
438main (int argc, char *argv[])
439{
440 ctk_test_init (&argc, &argv);
441
442 g_test_add_func ("/listbox/sort", test_sort);
443 g_test_add_func ("/listbox/selection", test_selection);
444 g_test_add_func ("/listbox/multi-selection", test_multi_selection);
445 g_test_add_func ("/listbox/filter", test_filter);
446 g_test_add_func ("/listbox/header", test_header);
447
448 return g_test_run ();
449}