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