1 /*
2 * Copyright (C) 2011 Red Hat, Inc.
3 * Author: Matthias Clasen
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 #include <gtk/gtk.h>
20 #include <gdk/gdkkeysyms.h>
21 #include <stdlib.h>
22 #include <string.h>
23 #include <math.h>
24
25 /* tests related to handling of the cell-area property in
26 * GtkCellLayout implementations
27 */
28
29 /* test that we have a cell area after new() */
30 static void
test_iconview_new(void)31 test_iconview_new (void)
32 {
33 GtkWidget *view;
34 GtkCellArea *area;
35
36 view = gtk_icon_view_new ();
37
38 area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
39 g_assert_true (GTK_IS_CELL_AREA_BOX (area));
40 g_assert_true (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == gtk_icon_view_get_item_orientation (GTK_ICON_VIEW (view)));
41
42 g_object_ref_sink (view);
43 g_object_unref (view);
44 }
45
46 /* test that new_with_area() keeps the provided area */
47 static void
test_iconview_new_with_area(void)48 test_iconview_new_with_area (void)
49 {
50 GtkWidget *view;
51 GtkCellArea *area;
52
53 area = gtk_cell_area_box_new ();
54 view = gtk_icon_view_new_with_area (area);
55 g_assert_true (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)) == area);
56
57 g_object_ref_sink (view);
58 g_object_unref (view);
59 }
60
61 /* test that g_object_new keeps the provided area */
62 static void
test_iconview_object_new(void)63 test_iconview_object_new (void)
64 {
65 GtkWidget *view;
66 GtkCellArea *area;
67
68 area = gtk_cell_area_box_new ();
69 gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_HORIZONTAL);
70 view = g_object_new (GTK_TYPE_ICON_VIEW, "cell-area", area, NULL);
71 g_assert_true (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)) == area);
72 g_assert_true (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)) == gtk_icon_view_get_item_orientation (GTK_ICON_VIEW (view)));
73
74 g_object_ref_sink (view);
75 g_object_unref (view);
76 }
77
78 /* test that we have a cell area after new() */
79 static void
test_combobox_new(void)80 test_combobox_new (void)
81 {
82 GtkWidget *view;
83 GtkCellArea *area;
84
85 view = gtk_combo_box_new ();
86
87 area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
88 g_assert_true (GTK_IS_CELL_AREA_BOX (area));
89
90 g_object_ref_sink (view);
91 g_object_unref (view);
92 }
93
94 static int subclass_init;
95
96 typedef GtkComboBox MyComboBox;
97 typedef GtkComboBoxClass MyComboBoxClass;
98
99 GType my_combo_box_get_type (void);
100
G_DEFINE_TYPE(MyComboBox,my_combo_box,GTK_TYPE_COMBO_BOX)101 G_DEFINE_TYPE (MyComboBox, my_combo_box, GTK_TYPE_COMBO_BOX)
102
103 static void
104 my_combo_box_class_init (MyComboBoxClass *klass)
105 {
106 }
107
108 static void
my_combo_box_init(MyComboBox * view)109 my_combo_box_init (MyComboBox *view)
110 {
111 GtkCellArea *area;
112
113 if (subclass_init == 0)
114 {
115 /* do nothing to area */
116 }
117 else if (subclass_init == 1)
118 {
119 area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
120 g_assert_true (GTK_IS_CELL_AREA_BOX (area));
121 g_assert_cmpint (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)), ==, GTK_ORIENTATION_HORIZONTAL);
122 gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_VERTICAL);
123 }
124 }
125
126 /* test that a combobox subclass has an area */
127 static void
test_combobox_subclass0(void)128 test_combobox_subclass0 (void)
129 {
130 GtkWidget *view;
131 GtkCellArea *area;
132
133 subclass_init = 0;
134
135 view = g_object_new (my_combo_box_get_type (), NULL);
136 area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
137 g_assert_true (GTK_IS_CELL_AREA_BOX (area));
138 g_assert_cmpint (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)), ==, GTK_ORIENTATION_HORIZONTAL);
139
140 g_object_ref_sink (view);
141 g_object_unref (view);
142 }
143
144 /* test we can access the area in subclass init */
145 static void
test_combobox_subclass2(void)146 test_combobox_subclass2 (void)
147 {
148 GtkWidget *view;
149 GtkCellArea *area;
150
151 subclass_init = 1;
152
153 view = g_object_new (my_combo_box_get_type (), NULL);
154 area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
155 g_assert_true (GTK_IS_CELL_AREA_BOX (area));
156 g_assert_cmpint (gtk_orientable_get_orientation (GTK_ORIENTABLE (area)), ==, GTK_ORIENTATION_VERTICAL);
157
158 g_object_ref_sink (view);
159 g_object_unref (view);
160 }
161
162 /* test that we have a cell area after new() */
163 static void
test_cellview_new(void)164 test_cellview_new (void)
165 {
166 GtkWidget *view;
167 GtkCellArea *area;
168
169 view = gtk_cell_view_new ();
170
171 area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view));
172 g_assert_true (GTK_IS_CELL_AREA_BOX (area));
173
174 g_object_ref_sink (view);
175 g_object_unref (view);
176 }
177
178 /* test that new_with_context() keeps the provided area */
179 static void
test_cellview_new_with_context(void)180 test_cellview_new_with_context (void)
181 {
182 GtkWidget *view;
183 GtkCellArea *area;
184 GtkCellAreaContext *context;
185
186 area = gtk_cell_area_box_new ();
187 context = gtk_cell_area_create_context (area);
188 view = gtk_cell_view_new_with_context (area, context);
189 g_assert_true (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)) == area);
190
191 g_object_ref_sink (view);
192 g_object_unref (view);
193 }
194
195 /* test that g_object_new keeps the provided area */
196 static void
test_cellview_object_new(void)197 test_cellview_object_new (void)
198 {
199 GtkWidget *view;
200 GtkCellArea *area;
201
202 area = gtk_cell_area_box_new ();
203 gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_HORIZONTAL);
204 view = g_object_new (GTK_TYPE_CELL_VIEW, "cell-area", area, NULL);
205 g_assert_true (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (view)) == area);
206
207 g_object_ref_sink (view);
208 g_object_unref (view);
209 }
210
211 /* test that we have a cell area after new() */
212 static void
test_column_new(void)213 test_column_new (void)
214 {
215 GtkTreeViewColumn *col;
216 GtkCellArea *area;
217
218 col = gtk_tree_view_column_new ();
219
220 area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col));
221 g_assert_true (GTK_IS_CELL_AREA_BOX (area));
222
223 g_object_ref_sink (col);
224 g_object_unref (col);
225 }
226
227 /* test that new_with_area() keeps the provided area */
228 static void
test_column_new_with_area(void)229 test_column_new_with_area (void)
230 {
231 GtkTreeViewColumn *col;
232 GtkCellArea *area;
233
234 area = gtk_cell_area_box_new ();
235 col = gtk_tree_view_column_new_with_area (area);
236 g_assert_true (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col)) == area);
237
238 g_object_ref_sink (col);
239 g_object_unref (col);
240 }
241
242 /* test that g_object_new keeps the provided area */
243 static void
test_column_object_new(void)244 test_column_object_new (void)
245 {
246 GtkTreeViewColumn *col;
247 GtkCellArea *area;
248
249 area = gtk_cell_area_box_new ();
250 gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_HORIZONTAL);
251 col = g_object_new (GTK_TYPE_TREE_VIEW_COLUMN, "cell-area", area, NULL);
252 g_assert_true (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col)) == area);
253
254 g_object_ref_sink (col);
255 g_object_unref (col);
256 }
257
258 /* test that we have a cell area after new() */
259 static void
test_completion_new(void)260 test_completion_new (void)
261 {
262 GtkEntryCompletion *c;
263 GtkCellArea *area;
264
265 c = gtk_entry_completion_new ();
266
267 area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c));
268 g_assert_true (GTK_IS_CELL_AREA_BOX (area));
269
270 g_object_ref_sink (c);
271 g_object_unref (c);
272 }
273
274 /* test that new_with_area() keeps the provided area */
275 static void
test_completion_new_with_area(void)276 test_completion_new_with_area (void)
277 {
278 GtkEntryCompletion *c;
279 GtkCellArea *area;
280
281 area = gtk_cell_area_box_new ();
282 c = gtk_entry_completion_new_with_area (area);
283 g_assert_true (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c)) == area);
284
285 g_object_ref_sink (c);
286 g_object_unref (c);
287 }
288
289 /* test that g_object_new keeps the provided area */
290 static void
test_completion_object_new(void)291 test_completion_object_new (void)
292 {
293 GtkEntryCompletion *c;
294 GtkCellArea *area;
295
296 area = gtk_cell_area_box_new ();
297 gtk_orientable_set_orientation (GTK_ORIENTABLE (area), GTK_ORIENTATION_HORIZONTAL);
298 c = g_object_new (GTK_TYPE_ENTRY_COMPLETION, "cell-area", area, NULL);
299 g_assert_true (gtk_cell_layout_get_area (GTK_CELL_LAYOUT (c)) == area);
300
301 g_object_ref_sink (c);
302 g_object_unref (c);
303 }
304
305 int
main(int argc,char * argv[])306 main (int argc, char *argv[])
307 {
308 gtk_test_init (&argc, &argv);
309 gtk_test_register_all_types();
310
311 g_test_add_func ("/tests/iconview-new", test_iconview_new);
312 g_test_add_func ("/tests/iconview-new-with-area", test_iconview_new_with_area);
313 g_test_add_func ("/tests/iconview-object-new", test_iconview_object_new);
314
315 g_test_add_func ("/tests/combobox-new", test_combobox_new);
316 g_test_add_func ("/tests/combobox-subclass0", test_combobox_subclass0);
317 g_test_add_func ("/tests/combobox-subclass2", test_combobox_subclass2);
318
319 g_test_add_func ("/tests/cellview-new", test_cellview_new);
320 g_test_add_func ("/tests/cellview-new-with-context", test_cellview_new_with_context);
321 g_test_add_func ("/tests/cellview-object-new", test_cellview_object_new);
322
323 g_test_add_func ("/tests/column-new", test_column_new);
324 g_test_add_func ("/tests/column-new-with-area", test_column_new_with_area);
325 g_test_add_func ("/tests/column-object-new", test_column_object_new);
326
327 g_test_add_func ("/tests/completion-new", test_completion_new);
328 g_test_add_func ("/tests/completion-new-with-area", test_completion_new_with_area);
329 g_test_add_func ("/tests/completion-object-new", test_completion_object_new);
330
331 return g_test_run();
332 }
333