1 /* vi: set et sw=4 ts=8 cino=t0,(0: */
2 /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 8 -*- */
3 /*
4 * Regression test for value_is_same()
5 *
6 * Copyright (C) 2009 Nokia Corporation
7 * Copyright (C) 2009 Collabora Ltd.
8 *
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * This library is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
22 * 02110-1301 USA
23 *
24 */
25
26 /* Yes, this is a hack */
27 #include "mcd-account.c"
28
29 static inline void
assert_and_unset(GValue * value,GValue * same,GValue * different)30 assert_and_unset (GValue *value, GValue *same, GValue *different)
31 {
32 g_assert (value_is_same (value, same));
33 g_assert (value_is_same (same, value));
34 g_assert (value_is_same (value, value));
35 g_assert (!value_is_same (value, different));
36 g_assert (!value_is_same (different, value));
37
38 g_value_unset (value);
39 g_value_unset (same);
40 g_value_unset (different);
41 }
42
43 static inline void
assert_and_reset(GValue * value,GValue * same,GValue * different)44 assert_and_reset (GValue *value, GValue *same, GValue *different)
45 {
46 g_assert (value_is_same (value, same));
47 g_assert (value_is_same (same, value));
48 g_assert (value_is_same (value, value));
49 g_assert (!value_is_same (value, different));
50 g_assert (!value_is_same (different, value));
51
52 g_value_reset (value);
53 g_value_reset (same);
54 g_value_reset (different);
55 }
56
57 static void
test_numeric(void)58 test_numeric (void)
59 {
60 GValue value = G_VALUE_INIT;
61 GValue same = G_VALUE_INIT;
62 GValue different = G_VALUE_INIT;
63
64 g_value_set_int (g_value_init (&value, G_TYPE_INT), -42);
65 g_value_set_int (g_value_init (&same, G_TYPE_INT), -42);
66 g_value_set_int (g_value_init (&different, G_TYPE_INT), -23);
67 assert_and_unset (&value, &same, &different);
68
69 g_value_set_uint (g_value_init (&value, G_TYPE_UINT), 42);
70 g_value_set_uint (g_value_init (&same, G_TYPE_UINT), 42);
71 g_value_set_uint (g_value_init (&different, G_TYPE_UINT), 23);
72 assert_and_unset (&value, &same, &different);
73
74 g_value_set_int64 (g_value_init (&value, G_TYPE_INT64), -42);
75 g_value_set_int64 (g_value_init (&same, G_TYPE_INT64), -42);
76 g_value_set_int64 (g_value_init (&different, G_TYPE_INT64), -23);
77 assert_and_unset (&value, &same, &different);
78
79 g_value_set_uint64 (g_value_init (&value, G_TYPE_UINT64), -42);
80 g_value_set_uint64 (g_value_init (&same, G_TYPE_UINT64), -42);
81 g_value_set_uint64 (g_value_init (&different, G_TYPE_UINT64), -23);
82 assert_and_unset (&value, &same, &different);
83
84 g_value_set_uchar (g_value_init (&value, G_TYPE_UCHAR), 42);
85 g_value_set_uchar (g_value_init (&same, G_TYPE_UCHAR), 42);
86 g_value_set_uchar (g_value_init (&different, G_TYPE_UCHAR), 23);
87 assert_and_unset (&value, &same, &different);
88
89 g_value_set_double (g_value_init (&value, G_TYPE_DOUBLE), 4.5);
90 g_value_set_double (g_value_init (&same, G_TYPE_DOUBLE), 4.5);
91 g_value_set_double (g_value_init (&different, G_TYPE_DOUBLE), -1.25);
92 assert_and_unset (&value, &same, &different);
93
94 g_value_set_boolean (g_value_init (&value, G_TYPE_BOOLEAN), TRUE);
95 g_value_set_boolean (g_value_init (&same, G_TYPE_BOOLEAN), TRUE);
96 g_value_set_boolean (g_value_init (&different, G_TYPE_BOOLEAN), FALSE);
97 assert_and_unset (&value, &same, &different);
98
99 g_value_set_boolean (g_value_init (&value, G_TYPE_BOOLEAN), FALSE);
100 g_value_set_boolean (g_value_init (&same, G_TYPE_BOOLEAN), FALSE);
101 g_value_set_boolean (g_value_init (&different, G_TYPE_BOOLEAN), TRUE);
102 assert_and_unset (&value, &same, &different);
103 }
104
105 static void
test_string(void)106 test_string (void)
107 {
108 GValue value = G_VALUE_INIT;
109 GValue same = G_VALUE_INIT;
110 GValue different = G_VALUE_INIT;
111
112 g_value_init (&value, G_TYPE_STRING);
113 g_value_init (&same, G_TYPE_STRING);
114 g_value_init (&different, G_TYPE_STRING);
115
116 g_value_set_static_string (&value, NULL);
117 g_value_set_static_string (&same, NULL);
118 g_value_set_static_string (&different, "");
119 assert_and_reset (&value, &same, &different);
120
121 g_value_set_static_string (&value, "");
122 g_value_set_static_string (&same, "");
123 g_value_set_static_string (&different, NULL);
124 assert_and_reset (&value, &same, &different);
125
126 g_value_set_static_string (&value, "foo");
127 g_value_take_string (&same, g_strdup ("foo"));
128 g_value_set_static_string (&different, "bar");
129 assert_and_reset (&value, &same, &different);
130
131 g_value_unset (&value);
132 g_value_unset (&same);
133 g_value_unset (&different);
134 }
135
136 static void
test_object_path(void)137 test_object_path (void)
138 {
139 GValue value = G_VALUE_INIT;
140 GValue same = G_VALUE_INIT;
141 GValue different = G_VALUE_INIT;
142
143 g_value_init (&value, DBUS_TYPE_G_OBJECT_PATH);
144 g_value_init (&same, DBUS_TYPE_G_OBJECT_PATH);
145 g_value_init (&different, DBUS_TYPE_G_OBJECT_PATH);
146
147 g_value_set_static_boxed (&value, "/foo");
148 g_value_take_boxed (&same, g_strdup ("/foo"));
149 g_value_set_static_boxed (&different, "/bar");
150 assert_and_reset (&value, &same, &different);
151
152 g_value_unset (&value);
153 g_value_unset (&same);
154 g_value_unset (&different);
155 }
156
157 static void
test_strv(void)158 test_strv (void)
159 {
160 const gchar * const empty[] = { NULL };
161 const gchar * const small[] = { "foo", "bar", NULL };
162 const gchar * const large[] = { "foo", "bar", "baz", NULL };
163 GValue value = G_VALUE_INIT;
164 GValue same = G_VALUE_INIT;
165 GValue different = G_VALUE_INIT;
166
167 g_value_init (&value, G_TYPE_STRV);
168 g_value_init (&same, G_TYPE_STRV);
169 g_value_init (&different, G_TYPE_STRV);
170
171 g_value_set_static_boxed (&value, (GStrv) small);
172 g_value_take_boxed (&same, g_strdupv ((GStrv) small));
173 g_value_set_static_boxed (&different, (GStrv) large);
174 assert_and_reset (&value, &same, &different);
175
176 g_value_set_static_boxed (&value, (GStrv) large);
177 g_value_take_boxed (&same, g_strdupv ((GStrv) large));
178 g_value_set_static_boxed (&different, (GStrv) small);
179 assert_and_reset (&value, &same, &different);
180
181 g_value_set_static_boxed (&value, NULL);
182 g_value_set_static_boxed (&same, (GStrv) empty);
183 g_value_set_static_boxed (&different, (GStrv) small);
184 assert_and_reset (&value, &same, &different);
185
186 g_value_set_static_boxed (&value, (GStrv) empty);
187 g_value_set_static_boxed (&same, NULL);
188 g_value_set_static_boxed (&different, (GStrv) large);
189 assert_and_reset (&value, &same, &different);
190
191 g_value_unset (&value);
192 g_value_unset (&same);
193 g_value_unset (&different);
194 }
195
196 int
main(int argc,char ** argv)197 main (int argc,
198 char **argv)
199 {
200 g_test_init (&argc, &argv, NULL);
201 g_test_bug_base ("http://bugs.freedesktop.org/show_bug.cgi?id=");
202
203 g_type_init ();
204
205 g_test_add_func ("/value-is-same/numeric", test_numeric);
206 g_test_add_func ("/value-is-same/string", test_string);
207 g_test_add_func ("/value-is-same/object-path", test_object_path);
208 g_test_add_func ("/value-is-same/strv", test_strv);
209
210 return g_test_run ();
211 }
212