Ensure HildonAppMenu size is correct after rotation
[hildon] / tests / check-hildon-number-editor.c
1 /*
2  * This file is a part of hildon tests
3  *
4  * Copyright (C) 2006, 2007 Nokia Corporation, all rights reserved.
5  *
6  * Contact: Michael Dominic Kostrzewa <michael.kostrzewa@nokia.com>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public License
10  * as published by the Free Software Foundation; version 2.1 of
11  * the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21  * 02110-1301 USA
22  *
23  */
24
25 #include <stdlib.h>
26 #include <check.h>
27 #include <gtk/gtkmain.h>
28 #include <glib/gprintf.h>
29 #include "test_suites.h"
30 #include "check_utils.h"
31
32 #include <hildon/hildon-number-editor.h>
33
34 /* -------------------- Fixtures -------------------- */
35
36 static HildonNumberEditor *number_editor = NULL;
37 static GtkWidget *showed_window = NULL;
38
39 static void 
40 fx_setup_default_number_editor ()
41 {
42   int argc = 0;
43   gtk_init(&argc, NULL);
44
45   number_editor = HILDON_NUMBER_EDITOR(hildon_number_editor_new(0, 100));
46   /* Check number_editor object has been created properly */
47   fail_if(!HILDON_IS_NUMBER_EDITOR(number_editor), 
48           "hildon-number-editor: Creation failed.");
49
50   showed_window =  create_test_window ();
51   
52   /* This packs the widget into the window (a gtk container). */
53   gtk_container_add (GTK_CONTAINER (showed_window), GTK_WIDGET (number_editor));
54   
55   /* Displays the widget and the window */
56   show_all_test_window (showed_window);
57 }
58
59 static void 
60 fx_teardown_default_number_editor ()
61 {
62   gtk_widget_destroy (GTK_WIDGET (number_editor));
63 }
64
65 /* -------------------- Test cases -------------------- */
66
67 /* ----- Test case for set_range -----*/
68
69 /**
70  * Purpose: Check that the ranges can be set safely
71  * Cases considered:
72  *    - Set a number limit of (0, 100) 
73  *    - Set a number limit of (1, 100) 
74  *    - Set a number limit of (-100, 100)
75  *    - Set a number limit of (-100, 0)
76  *    - Set a number limit of (-100, -1)
77  */
78 START_TEST (test_set_range_regular)
79 {
80   gint number;
81
82   /* Test 1: Set limits to (0, 100) */
83   hildon_number_editor_set_range(number_editor, 0, 100);
84
85   hildon_number_editor_set_value(number_editor, 0);
86
87   hildon_number_editor_set_value(number_editor, 101);
88   number = hildon_number_editor_get_value(number_editor);
89   fail_if (number != 0,
90            "hildon-number-editor: range_value failed, we set range: 0/100, we set 0 and then we set the value 101 but we get %d instead of 0", 
91            number);
92
93   /* Test 2: Set limits to (1, 100) */
94   hildon_number_editor_set_range(number_editor, 1, 100);
95
96   hildon_number_editor_set_value(number_editor, 1);
97
98   hildon_number_editor_set_value(number_editor, 0);
99   number = hildon_number_editor_get_value(number_editor);
100   fail_if (number != 1,
101            "hildon-number-editor: range_value failed, we set range: 0/100, we set 0 and then we set the value -1 but we get %d instead of 0",
102            number);
103
104   /* Test 3: Set limits to (-100, 100) */
105   hildon_number_editor_set_range(number_editor, -100, 100);
106
107   hildon_number_editor_set_value(number_editor, 0);
108
109   hildon_number_editor_set_value(number_editor, -101);
110   number = hildon_number_editor_get_value(number_editor);
111   fail_if (number != 0,
112            "hildon-number-editor: range_value failed, we set range: 0/100, we set 0 and then we set the value -101 but we get %d instead of 0",
113            number);
114
115   /* Test 4: Set limits to (-100, 0) */
116   hildon_number_editor_set_range(number_editor, -100, 0);
117
118   hildon_number_editor_set_value(number_editor, 0);
119
120   hildon_number_editor_set_value(number_editor, 1);
121   number = hildon_number_editor_get_value(number_editor);
122   fail_if (number != 0,
123            "hildon-number-editor: range_value failed, we set range: 0/100, we set 0 and then we set the value 1 but we get %d instead of 0", 
124            number);
125
126   /* Test 5: Set limits to (-100, -1) */
127   hildon_number_editor_set_range(number_editor, -100, -1);
128
129   hildon_number_editor_set_value(number_editor, -1);
130
131   hildon_number_editor_set_value(number_editor, 0);
132   number = hildon_number_editor_get_value(number_editor);
133   fail_if (number != -1,
134            "hildon-number-editor: range_value failed, we set range: 0/100, we set -1 and then we set the value 0 but we get %d instead of -1", 
135            number);
136 }
137 END_TEST
138
139 /**
140  * Purpose: Check that the ranges limits are controlled properly
141  * Cases considered:
142  *    - Set G_MAXINT and G_MININT
143  *    - Set a number limit of (0, 100), and test that 0 and 100 work properly
144  */
145 START_TEST (test_set_range_limits)
146 {
147   gint number;
148
149   /* Test 6: Set limits to (G_MININT, G_MAXINT) */
150   hildon_number_editor_set_range(number_editor, G_MININT, G_MAXINT);
151
152   /* Test 7: Set limits to (0,100) */
153   hildon_number_editor_set_value(number_editor, 0);
154
155   number = hildon_number_editor_get_value(number_editor);
156   fail_if (number != 0,
157            "hildon-number-editor: range_value failed, we set range: 0/100, we set 0 but we get %d instead of 0", 
158            number);
159
160   hildon_number_editor_set_value(number_editor, 100);
161
162   number = hildon_number_editor_get_value(number_editor);
163   fail_if (number != 100,
164            "hildon-number-editor: range_value failed, we set range: 0/100, we set 100 but we get %d instead of 100", 
165            number);
166 }
167 END_TEST
168
169 /**
170  * Purpose: Check that the invalid values are controlled properly we
171  * use set/get value to test if our first value is modified
172  *
173  * Cases considered:
174  *    - Change the order of the minimum and maximum and check if it does not change (200, -2)
175  *    - Set values where high value is less than low value (0, 100)
176  *    - Set a range to a NULL widget
177  */
178 START_TEST (test_set_range_invalid)
179 {
180   gint number;
181   
182   /* Test 8: Set limits to (200, -2) */
183   hildon_number_editor_set_range(number_editor, 200, -2);
184
185   hildon_number_editor_set_value(number_editor, 0);
186
187   /* we set 101 and it should not be set if method didn't reverse min and max, the value may continue being 0 */
188   hildon_number_editor_set_value(number_editor, 101);
189   number = hildon_number_editor_get_value(number_editor);
190   fail_if (number != 101,
191            "hildon-number-editor: range_value failed, we set range: 200/-2, and it should not be set so 0/100 should continue being the range, we set 0 and then we set the value 101 but we get %d instead of 0", 
192            number);
193
194   /* Test 9: Set limits to (100, 0) */
195   hildon_number_editor_set_range(number_editor, 0, 100);
196
197   hildon_number_editor_set_value(number_editor, 0);
198
199   /* we set -5  and it should not be set, the value may continue being 0 */
200   hildon_number_editor_set_value(number_editor, -5);
201   number = hildon_number_editor_get_value(number_editor);
202   fail_if (number != 0,
203            "hildon-number-editor: range_value failed, we set range: 0/100, we set 0 and then we set the value -5 but we get %d instead of 0", 
204            number);
205
206   /* we set 101  and it should not be set, the value may continue being 0 */
207   hildon_number_editor_set_value(number_editor, 101);
208   number = hildon_number_editor_get_value(number_editor);
209   fail_if (number != 0,
210            "hildon-number-editor: range_value failed, we set range: 0/100, we set 0 and then we set the value 101 but we get %d instead of 0", 
211            number);
212
213   /* Test 10: Set a range to a NULL widget */
214   hildon_number_editor_set_range(NULL, 0, 100);
215
216 }
217 END_TEST
218
219
220 /* ---------- Suite creation ---------- */
221
222 Suite *create_hildon_number_editor_suite()
223 {
224   /* Create the suite */
225   Suite *s = suite_create("HildonNumberEditor");
226
227   /* Create test cases */
228   TCase *tc1 = tcase_create("set_number");
229
230   /* Create test case for set_number and add it to the suite */
231   tcase_add_checked_fixture(tc1, fx_setup_default_number_editor, fx_teardown_default_number_editor);
232   tcase_add_test(tc1, test_set_range_regular);
233   tcase_add_test(tc1, test_set_range_limits);
234   tcase_add_test(tc1, test_set_range_invalid);
235   suite_add_tcase (s, tc1);
236
237   /* Return created suite */
238   return s;             
239 }
240
241