tests: add a test for the previous commit
[platform/upstream/glib.git] / glib / tests / environment.c
1 #include <glib.h>
2
3 static void
4 test_listenv (void)
5 {
6   GHashTable *table;
7   gchar **list;
8   gint i;
9
10   table = g_hash_table_new_full (g_str_hash, g_str_equal,
11                                  g_free, g_free);
12
13   list = g_get_environ ();
14   for (i = 0; list[i]; i++)
15     {
16       gchar **parts;
17
18       parts = g_strsplit (list[i], "=", 2);
19       g_assert (g_hash_table_lookup (table, parts[0]) == NULL);
20       g_hash_table_insert (table, parts[0], parts[1]);
21       g_free (parts);
22     }
23   g_strfreev (list);
24
25   g_assert_cmpint (g_hash_table_size (table), >, 0);
26
27   list = g_listenv ();
28   for (i = 0; list[i]; i++)
29     {
30       const gchar *expected;
31       const gchar *value;
32
33       expected = g_hash_table_lookup (table, list[i]);
34       value = g_getenv (list[i]);
35       g_assert_cmpstr (value, ==, expected);
36       g_hash_table_remove (table, list[i]);
37     }
38   g_assert_cmpint (g_hash_table_size (table), ==, 0);
39   g_hash_table_unref (table);
40   g_strfreev (list);
41 }
42
43 static void
44 test_setenv (void)
45 {
46   const gchar *var, *value;
47
48   var = "NOSUCHENVVAR";
49   value = "value1";
50
51   g_assert (g_getenv (var) == NULL);
52   g_setenv (var, value, FALSE);
53   g_assert_cmpstr (g_getenv (var), ==, value);
54   g_assert (g_setenv (var, "value2", FALSE));
55   g_assert_cmpstr (g_getenv (var), ==, value);
56   g_assert (g_setenv (var, "value2", TRUE));
57   g_assert_cmpstr (g_getenv (var), ==, "value2");
58   g_unsetenv (var);
59   g_assert (g_getenv (var) == NULL);
60 }
61
62 static void
63 test_environ_array (void)
64 {
65   gchar **env;
66   const gchar *value;
67
68   env = g_new (gchar *, 1);
69   env[0] = NULL;
70
71   value = g_environ_getenv (env, "foo");
72   g_assert (value == NULL);
73
74   env = g_environ_setenv (env, "foo", "bar", TRUE);
75   value = g_environ_getenv (env, "foo");
76   g_assert_cmpstr (value, ==, "bar");
77
78   env = g_environ_setenv (env, "foo2", "bar2", FALSE);
79   value = g_environ_getenv (env, "foo");
80   g_assert_cmpstr (value, ==, "bar");
81   value = g_environ_getenv (env, "foo2");
82   g_assert_cmpstr (value, ==, "bar2");
83
84   env = g_environ_setenv (env, "foo", "x", FALSE);
85   value = g_environ_getenv (env, "foo");
86   g_assert_cmpstr (value, ==, "bar");
87
88   env = g_environ_setenv (env, "foo", "x", TRUE);
89   value = g_environ_getenv (env, "foo");
90   g_assert_cmpstr (value, ==, "x");
91
92   env = g_environ_unsetenv (env, "foo2");
93   value = g_environ_getenv (env, "foo2");
94   g_assert (value == NULL);
95
96   g_strfreev (env);
97 }
98
99 static void
100 test_environ_null (void)
101 {
102   gchar **env;
103   const gchar *value;
104
105   env = NULL;
106
107   value = g_environ_getenv (env, "foo");
108   g_assert (value == NULL);
109
110   env = g_environ_setenv (NULL, "foo", "bar", TRUE);
111   g_assert (env != NULL);
112   g_strfreev (env);
113
114   env = g_environ_unsetenv (NULL, "foo");
115   g_assert (env == NULL);
116 }
117
118 int
119 main (int argc, char **argv)
120 {
121   g_test_init (&argc, &argv, NULL);
122
123   g_test_add_func ("/environ/listenv", test_listenv);
124   g_test_add_func ("/environ/setenv", test_setenv);
125   g_test_add_func ("/environ/array", test_environ_array);
126   g_test_add_func ("/environ/null", test_environ_null);
127
128   return g_test_run ();
129 }