Adding the test suite.
[hildon] / tests / check-hildon-volumebar-range.c
1 /*
2  * Copyright (C) 2006 Nokia Corporation.
3  *
4  * Contact: Luc Pionchon <luc.pionchon@nokia.com>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public License
8  * as published by the Free Software Foundation; either version 2.1 of
9  * the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19  * 02110-1301 USA
20  *
21  */
22
23 #include <stdlib.h>
24 #include <check.h>
25 #include <gtk/gtkmain.h>
26 #include <gtk/gtkcontainer.h>
27 #include "test_suites.h"
28 #include "check_utils.h"
29
30 #include "hildon-volumebar-range.h"
31
32 /* Copied from hildon-volumebar-range.h because
33    there is no way to retrieve this values */
34 #define VOLUMEBAR_RANGE_INITIAL_VALUE 50.0
35 #define VOLUMEBAR_RANGE_MINIMUM_VALUE 0.0
36 #define VOLUMEBAR_RANGE_MAXIMUM_VALUE 100.0
37 #define CHANGE_THRESHOLD 0.001
38
39 /* -------------------- Fixtures -------------------- */
40
41 static GtkWidget *showed_window = NULL;
42 static HildonVolumebarRange *volumebar_range = NULL;
43
44 static void
45 fx_setup_default_volumebar_range ()
46 {
47   int argc = 0;
48
49   gtk_init(&argc, NULL);
50
51   volumebar_range = HILDON_VOLUMEBAR_RANGE(hildon_volumebar_range_new(GTK_ORIENTATION_VERTICAL));
52
53   showed_window =  create_test_window ();
54
55   /* This packs the widget into the window (a gtk container). */
56   gtk_container_add (GTK_CONTAINER (showed_window), GTK_WIDGET (volumebar_range));
57
58   /* Displays the widget and the window */
59   show_all_test_window (showed_window);
60
61   /* Check volumebar range object has been created properly */
62   fail_if(!HILDON_VOLUMEBAR_RANGE(volumebar_range),
63           "hildon-volumebar-range: Creation failed.");
64 }
65
66 static void
67 fx_teardown_default_volumebar_range ()
68 {
69
70   /* Destroy the window */
71   gtk_widget_destroy (showed_window);
72 }
73
74
75 /* -------------------- Test cases -------------------- */
76
77 /* ----- Test case for set/get_level -----*/
78
79 /**
80  * Purpose: Check level usage
81  * Cases considered:
82  *    - Set level over the threshold limit 
83  *    - Set level under the threshold limit.
84  */
85 START_TEST (test_set_get_level_regular)
86 {
87   gdouble old_level, level, ret_level;
88
89   /* Test1: set level so change is over the threshold limit */
90   level = VOLUMEBAR_RANGE_INITIAL_VALUE + 1.0 + CHANGE_THRESHOLD;
91   hildon_volumebar_range_set_level(volumebar_range, level);
92   ret_level = hildon_volumebar_range_get_level(volumebar_range);
93   fail_if(ret_level != level,
94           "hildon-volumebar-range: Set level to %.5f, but get level returned %.5f",
95           level, ret_level);
96
97   /* Test2: set level so change is under the threshold limit */
98   old_level = ret_level;
99   level += (gdouble) (CHANGE_THRESHOLD/2.0);
100   hildon_volumebar_range_set_level(volumebar_range, level);
101   ret_level = hildon_volumebar_range_get_level(volumebar_range);
102   fail_if(ret_level == level,
103           "hildon-volumebar-range: Set level to %.5f when current level is %.5f, but get level returned %.5f",
104           level, old_level, ret_level);
105 }
106 END_TEST
107
108 /**
109  * Purpose: Test handling of limit values
110  * Cases considered:
111  *    - Set level to VOLUMEBAR_RANGE_MINIMUM_VALUE
112  *    - Set level to VOLUMEBAR_RANGE_MAXIMUM_VALUE
113  */
114 START_TEST (test_set_get_level_limits)
115 {
116   gdouble level, ret_level;
117
118   /* Test1: Set level to minimum allowed  (first set it the a different value) */
119   level = (VOLUMEBAR_RANGE_MINIMUM_VALUE - VOLUMEBAR_RANGE_MINIMUM_VALUE) / 2.0;
120   hildon_volumebar_range_set_level(volumebar_range, level);
121   level = VOLUMEBAR_RANGE_MINIMUM_VALUE;
122   hildon_volumebar_range_set_level(volumebar_range, level);
123   ret_level = hildon_volumebar_range_get_level(volumebar_range);
124   fail_if(ret_level != level,
125           "hildon-volumebar-range: Set level to %.5f, but get level returned %.5f",
126           level, ret_level);  
127
128   /* Test2: Set level to maximum allowed */
129   level = VOLUMEBAR_RANGE_MAXIMUM_VALUE;
130   hildon_volumebar_range_set_level(volumebar_range, level);
131   ret_level = hildon_volumebar_range_get_level(volumebar_range);
132   fail_if(ret_level != level,
133           "hildon-volumebar-range: Set level to %.5f, but get level returned %.5f",
134           level, ret_level); 
135 }
136 END_TEST
137
138 /**
139  * Purpose: Test handling of invalid values 
140  * Cases considered:
141  *    - Set level under the minimum value
142  *    - Set level over the maximum value
143  *    - Set level with NULL object
144  *    - Get level with NULL object
145  */
146 START_TEST (test_set_get_level_invalid)
147 {
148   gdouble level, ret_level;
149
150   /* Test1: Set level under minimum value */
151   level = VOLUMEBAR_RANGE_MINIMUM_VALUE - 1.0 - CHANGE_THRESHOLD;
152   hildon_volumebar_range_set_level(volumebar_range, level);
153   ret_level = hildon_volumebar_range_get_level(volumebar_range);
154   fail_if(ret_level != VOLUMEBAR_RANGE_MINIMUM_VALUE,
155           "hildon-volumebar-range: Set level to %.5f (under the minimum allowed), and get level returned %.5f",
156           level, ret_level);
157
158   /* Test2: Set level over maximum value */
159   level = VOLUMEBAR_RANGE_MAXIMUM_VALUE + 1.0 + CHANGE_THRESHOLD;
160   hildon_volumebar_range_set_level(volumebar_range, level);
161   ret_level = hildon_volumebar_range_get_level(volumebar_range);
162   fail_if(ret_level != VOLUMEBAR_RANGE_MAXIMUM_VALUE,
163           "hildon-volumebar-range: Set level to %.5f (greater than maximum allowed), and get level returned %.5f",
164           level, ret_level);
165
166   /* Test3: Set level with NULL object */
167   hildon_volumebar_range_set_level(NULL, level);
168
169   /* Test4: Get level with NULL object */
170   hildon_volumebar_range_get_level(NULL);
171 }
172 END_TEST
173
174 /* ---------- Suite creation ---------- */
175
176 Suite *create_hildon_volumebar_range_suite()
177 {
178   /* Create the suite */
179   Suite *s = suite_create("HildonVolumebarRange");
180
181   /* Create test cases */
182   TCase *tc1 = tcase_create("set_get_level");
183
184   /* Create test case for set/get_mute and add it to the suite */
185   tcase_add_checked_fixture(tc1, fx_setup_default_volumebar_range, fx_teardown_default_volumebar_range);
186   tcase_add_test(tc1, test_set_get_level_regular);
187   tcase_add_test(tc1, test_set_get_level_limits);
188   tcase_add_test(tc1, test_set_get_level_invalid);
189   suite_add_tcase (s, tc1);
190
191   /* Return created suite */
192   return s;
193 }
194
195