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