Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Side by Side Diff: client/deps/ibusclient/src/ibusclient.cc

Issue 2829023: Add test to check for unused config values in ibus (Closed) Base URL: ssh://gitrw.chromium.org/autotest.git
Patch Set: Pre-submit Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | client/site_tests/desktopui_IBusTest/desktopui_IBusTest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <assert.h> 5 #include <assert.h>
6 #include <glib.h> 6 #include <glib.h>
7 #include <ibus.h> 7 #include <ibus.h>
8 #include <stdio.h> 8 #include <stdio.h>
9 #include <stdlib.h> 9 #include <stdlib.h>
10 #include <string> 10 #include <string>
11 11
12 namespace { 12 namespace {
13 13
14 const gchar kDummySection[] = "aaa/bbb"; 14 const gchar kDummySection[] = "aaa/bbb";
15 const gchar kDummyConfigName[] = "ccc"; 15 const gchar kDummyConfigName[] = "ccc";
16 16
17 const gboolean kDummyValueBoolean = TRUE; 17 const gboolean kDummyValueBoolean = TRUE;
18 const gint kDummyValueInt = 12345; 18 const gint kDummyValueInt = 12345;
19 const gdouble kDummyValueDouble = 2345.5432; 19 const gdouble kDummyValueDouble = 2345.5432;
20 const gchar kDummyValueString[] = "dummy value"; 20 const gchar kDummyValueString[] = "dummy value";
21 21
22 const size_t kArraySize = 3; 22 const size_t kArraySize = 3;
23 const gboolean kDummyValueBooleanArray[kArraySize] = { FALSE, TRUE, FALSE }; 23 const gboolean kDummyValueBooleanArray[kArraySize] = { FALSE, TRUE, FALSE };
24 const gint kDummyValueIntArray[kArraySize] = { 123, 234, 345 }; 24 const gint kDummyValueIntArray[kArraySize] = { 123, 234, 345 };
25 const gdouble kDummyValueDoubleArray[kArraySize] = { 111.22, 333.44, 555.66 }; 25 const gdouble kDummyValueDoubleArray[kArraySize] = { 111.22, 333.44, 555.66 };
26 const gchar* kDummyValueStringArray[kArraySize] = { 26 const gchar* kDummyValueStringArray[kArraySize] = {
27 "DUMMY_VALUE 1", "DUMMY_VALUE 2", "DUMMY_VALUE 3", 27 "DUMMY_VALUE 1", "DUMMY_VALUE 2", "DUMMY_VALUE 3",
28 }; 28 };
29 29
30 const char kGeneralSectionName[] = "general";
31 const char kPreloadEnginesConfigName[] = "preload_engines";
32
30 // Converts |list_type_string| into its element type (e.g. "int_list" to "int"). 33 // Converts |list_type_string| into its element type (e.g. "int_list" to "int").
31 std::string GetElementType(const std::string& list_type_string) { 34 std::string GetElementType(const std::string& list_type_string) {
32 const std::string suffix = "_list"; 35 const std::string suffix = "_list";
33 if (list_type_string.length() > suffix.length()) { 36 if (list_type_string.length() > suffix.length()) {
34 return list_type_string.substr( 37 return list_type_string.substr(
35 0, list_type_string.length() - suffix.length()); 38 0, list_type_string.length() - suffix.length());
36 } 39 }
37 return list_type_string; 40 return list_type_string;
38 } 41 }
39 42
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 g_value_set_int(&tmp, kDummyValueIntArray[i]); 100 g_value_set_int(&tmp, kDummyValueIntArray[i]);
98 } else if (element_gtype == G_TYPE_DOUBLE) { 101 } else if (element_gtype == G_TYPE_DOUBLE) {
99 g_value_set_double(&tmp, kDummyValueDoubleArray[i]); 102 g_value_set_double(&tmp, kDummyValueDoubleArray[i]);
100 } else if (element_gtype == G_TYPE_STRING) { 103 } else if (element_gtype == G_TYPE_STRING) {
101 g_value_set_string(&tmp, kDummyValueStringArray[i]); 104 g_value_set_string(&tmp, kDummyValueStringArray[i]);
102 } 105 }
103 g_value_array_append(array, &tmp); 106 g_value_array_append(array, &tmp);
104 } 107 }
105 108
106 g_value_take_boxed(&gvalue, array); 109 g_value_take_boxed(&gvalue, array);
107 } 110 }
108 111
109 if (ibus_config_set_value( 112 if (ibus_config_set_value(
110 ibus_config, kDummySection, kDummyConfigName, &gvalue)) { 113 ibus_config, kDummySection, kDummyConfigName, &gvalue)) {
111 printf("OK\n"); 114 printf("OK\n");
112 } else { 115 } else {
113 printf("FAIL\n"); 116 printf("FAIL\n");
114 } 117 }
115 } 118 }
116 119
117 // Gets a dummy value from ibus config service. This function checks if the 120 // Gets a dummy value from ibus config service. This function checks if the
118 // dummy value is |type_string| type. 121 // dummy value is |type_string| type.
119 void GetConfigAndPrintResult( 122 void GetConfigAndPrintResult(
120 IBusConfig* ibus_config, const std::string& type_string) { 123 IBusConfig* ibus_config, const std::string& type_string) {
121 GValue gvalue = {0}; 124 GValue gvalue = {0};
122 if (!ibus_config_get_value( 125 if (!ibus_config_get_value(
123 ibus_config, kDummySection, kDummyConfigName, &gvalue)) { 126 ibus_config, kDummySection, kDummyConfigName, &gvalue)) {
124 printf("FAIL (not found)\n"); 127 printf("FAIL (not found)\n");
125 return; 128 return;
126 } 129 }
127 130
128 const GType gtype = GetGValueTypeFromStringOrDie(type_string); 131 const GType gtype = GetGValueTypeFromStringOrDie(type_string);
129 if (G_VALUE_TYPE(&gvalue) != gtype) { 132 if (G_VALUE_TYPE(&gvalue) != gtype) {
130 printf("FAIL (type mismatch)\n"); 133 printf("FAIL (type mismatch)\n");
131 return; 134 return;
132 } 135 }
133 136
134 if (gtype== G_TYPE_BOOLEAN) { 137 if (gtype== G_TYPE_BOOLEAN) {
135 if (g_value_get_boolean(&gvalue) != kDummyValueBoolean) { 138 if (g_value_get_boolean(&gvalue) != kDummyValueBoolean) {
136 printf("FAIL (value mismatch)\n"); 139 printf("FAIL (value mismatch)\n");
137 return; 140 return;
138 } 141 }
139 } else if (gtype == G_TYPE_INT) { 142 } else if (gtype == G_TYPE_INT) {
140 if (g_value_get_int(&gvalue) != kDummyValueInt) { 143 if (g_value_get_int(&gvalue) != kDummyValueInt) {
141 printf("FAIL (value mismatch)\n"); 144 printf("FAIL (value mismatch)\n");
142 return; 145 return;
143 } 146 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 if (!match) { 196 if (!match) {
194 printf("FAIL (value mismatch)\n"); 197 printf("FAIL (value mismatch)\n");
195 return; 198 return;
196 } 199 }
197 } 200 }
198 } 201 }
199 202
200 printf("OK\n"); 203 printf("OK\n");
201 } 204 }
202 205
206 // Prints out the array held in gvalue. It is assumed that the array contains
207 // G_TYPE_STRING values.
208 // On success, returns true
209 // On failure, prints out "FAIL (error message)" and returns false
210 bool PrintArray(GValue* gvalue) {
211 GValueArray* array =
212 reinterpret_cast<GValueArray*>(g_value_get_boxed(gvalue));
213 for (guint i = 0; array && (i < array->n_values); ++i) {
214 const GType element_type = G_VALUE_TYPE(&(array->values[i]));
215 if (element_type != G_TYPE_STRING) {
216 printf("FAIL (Array element type is not STRING)\n");
217 return false;
218 }
219 const char* value = g_value_get_string(&(array->values[i]));
220 if (!value) {
221 printf("FAIL (Array element type is NULL)\n");
222 return false;
223 }
224 printf("%s\n", value);
225 }
226 return true;
227 }
228
229 // Print out the list of unused config variables from ibus.
230 // On failure, prints out "FAIL (error message)" instead.
231 void PrintUnused(IBusConfig* ibus_config) {
232 GValue unread = {0};
233 GValue unwritten = {0};
234 if (!ibus_config_get_unused(ibus_config, &unread, &unwritten)) {
235 printf("FAIL (get_unused failed)\n");
236 return;
237 }
238
239 if (G_VALUE_TYPE(&unread) != G_TYPE_VALUE_ARRAY) {
240 printf("FAIL (unread is not an array)\n");
241 return;
242 }
243
244 if (G_VALUE_TYPE(&unwritten) != G_TYPE_VALUE_ARRAY) {
245 printf("FAIL (unwritten is not an array)\n");
246 return;
247 }
248
249 printf("Unread:\n");
250 if (!PrintArray(&unread)) {
251 g_value_unset(&unread);
252 g_value_unset(&unwritten);
253 return;
254 }
255
256 printf("Unwritten:\n");
257 if (!PrintArray(&unwritten)) {
258 g_value_unset(&unread);
259 g_value_unset(&unwritten);
260 return;
261 }
262
263 g_value_unset(&unread);
264 g_value_unset(&unwritten);
265 return;
266 }
267
268 // Set the preload engines to those named in the array |engines| of size
269 // |num_engines| and prints the result.
270 //
271 // Note that this only fails if it can't set the config value; it does not check
272 // that the names of the engines are valid.
273 void PreloadEnginesAndPrintResult(IBusConfig* ibus_config, int num_engines,
274 char** engines) {
275 GValue gvalue = {0};
276 g_value_init(&gvalue, G_TYPE_VALUE_ARRAY);
277 GValueArray* array = g_value_array_new(num_engines);
278 for (int i = 0; i < num_engines; ++i) {
279 GValue array_element = {0};
280 g_value_init(&array_element, G_TYPE_STRING);
281 g_value_set_string(&array_element, engines[i]);
282 g_value_array_append(array, &array_element);
283 }
284 g_value_take_boxed(&gvalue, array);
285
286 if (ibus_config_set_value(ibus_config, kGeneralSectionName,
287 kPreloadEnginesConfigName, &gvalue)) {
288 printf("OK\n");
289 } else {
290 printf("FAIL\n");
291 }
292
293 g_value_unset(&gvalue);
294 }
295
296 // Sets |engine_name| as the active IME engine.
297 void ActivateEngineAndPrintResult(IBusBus* ibus, const char* engine_name) {
298 if (!ibus_bus_set_global_engine(ibus, engine_name)) {
299 printf("FAIL (could not start engine)\n");
300 } else {
301 printf("OK\n");
302 }
303 }
304
203 // Prints the names of the given engines. Takes the ownership of |engines|. 305 // Prints the names of the given engines. Takes the ownership of |engines|.
204 void PrintEngineNames(GList* engines) { 306 void PrintEngineNames(GList* engines) {
205 for (GList* cursor = engines; cursor; cursor = g_list_next(cursor)) { 307 for (GList* cursor = engines; cursor; cursor = g_list_next(cursor)) {
206 IBusEngineDesc* engine_desc = IBUS_ENGINE_DESC(cursor->data); 308 IBusEngineDesc* engine_desc = IBUS_ENGINE_DESC(cursor->data);
207 assert(engine_desc); 309 assert(engine_desc);
208 printf("%s\n", engine_desc->name); 310 printf("%s\n", engine_desc->name);
209 g_object_unref(IBUS_ENGINE_DESC(cursor->data)); 311 g_object_unref(IBUS_ENGINE_DESC(cursor->data));
210 } 312 }
211 g_list_free(engines); 313 g_list_free(engines);
212 } 314 }
213 315
214 void PrintUsage(const char* argv0) { 316 void PrintUsage(const char* argv0) {
215 printf("Usage: %s COMMAND\n", argv0); 317 printf("Usage: %s COMMAND\n", argv0);
216 printf("check_reachable Check if ibus-daemon is reachable\n"); 318 printf("check_reachable Check if ibus-daemon is reachable\n");
217 printf("list_engines List engine names (all engines)\n"); 319 printf("list_engines List engine names (all engines)\n");
218 printf("list_active_engines List active engine names\n"); 320 printf("list_active_engines List active engine names\n");
219 // TODO(yusukes): Add 2 parameters, config_key and config_value, to 321 // TODO(yusukes): Add 2 parameters, config_key and config_value, to
220 // set_config and get_config commands. 322 // set_config and get_config commands.
221 printf("set_config (boolean|int|double|string|\n" 323 printf("set_config (boolean|int|double|string|\n"
222 " boolean_list|int_list|double_list|string_list)\n" 324 " boolean_list|int_list|double_list|string_list)\n"
223 " Set a dummy value to ibus config service\n"); 325 " Set a dummy value to ibus config service\n");
224 printf("get_config (boolean|int|double|string\n" 326 printf("get_config (boolean|int|double|string\n"
225 " boolean_list|int_list|double_list|string_list)\n" 327 " boolean_list|int_list|double_list|string_list)\n"
226 " Get a dummy value from ibus config service\n"); 328 " Get a dummy value from ibus config service\n");
227 // TODO(yusukes): Add config_key parameter to unset_config. 329 // TODO(yusukes): Add config_key parameter to unset_config.
228 printf("unset_config Unset a dummy value from ibus config service\n"); 330 printf("unset_config Unset a dummy value from ibus config service\n");
331 printf("get_unused List all keys that never were used.\n");
332 printf("preload_engines Preload the listed engines.\n");
333 printf("activate_engine Activate the specified engine.\n");
229 } 334 }
230 335
231 } // namespace 336 } // namespace
232 337
233 int main(int argc, char **argv) { 338 int main(int argc, char **argv) {
234 if (argc == 1) { 339 if (argc == 1) {
235 PrintUsage(argv[0]); 340 PrintUsage(argv[0]);
236 return 1; 341 return 1;
237 } 342 }
238 343
(...skipping 29 matching lines...) Expand all
268 } 373 }
269 SetConfigAndPrintResult(ibus_config, argv[2]); 374 SetConfigAndPrintResult(ibus_config, argv[2]);
270 } else if (command == "get_config") { 375 } else if (command == "get_config") {
271 if (argc != 3) { 376 if (argc != 3) {
272 PrintUsage(argv[0]); 377 PrintUsage(argv[0]);
273 return 1; 378 return 1;
274 } 379 }
275 GetConfigAndPrintResult(ibus_config, argv[2]); 380 GetConfigAndPrintResult(ibus_config, argv[2]);
276 } else if (command == "unset_config") { 381 } else if (command == "unset_config") {
277 UnsetConfigAndPrintResult(ibus_config); 382 UnsetConfigAndPrintResult(ibus_config);
383 } else if (command == "get_unused") {
384 PrintUnused(ibus_config);
385 } else if (command == "preload_engines") {
386 if (argc < 3) {
387 PrintUsage(argv[0]);
388 return 1;
389 }
390 PreloadEnginesAndPrintResult(ibus_config, argc-2, &(argv[2]));
391 } else if (command == "activate_engine") {
392 if (argc != 3) {
393 PrintUsage(argv[0]);
394 return 1;
395 }
396 ActivateEngineAndPrintResult(ibus, argv[2]);
397 } else {
398 PrintUsage(argv[0]);
399 return 1;
278 } 400 }
279 401
280 return 0; 402 return 0;
281 } 403 }
OLDNEW
« no previous file with comments | « no previous file | client/site_tests/desktopui_IBusTest/desktopui_IBusTest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698