glib/tsrc/BC/src/keyfile_test.c
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
       
     3 *
       
     4 * This library is free software; you can redistribute it and/or
       
     5 * modify it under the terms of the GNU Lesser General Public
       
     6 * License as published by the Free Software Foundation; either
       
     7 * version 2 of the License, or (at your option) any later version.
       
     8 *
       
     9 * This library is distributed in the hope that it will be useful,
       
    10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    12 * Lesser General Public License for more details.
       
    13 *
       
    14 * You should have received a copy of the GNU Lesser General Public
       
    15 * License along with this library; if not, write to the
       
    16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
       
    17 * Boston, MA 02111-1307, USA.
       
    18 *
       
    19 * Description:
       
    20 *
       
    21 */
       
    22 
       
    23 
       
    24 
       
    25 #undef G_DISABLE_ASSERT
       
    26 #undef G_LOG_DOMAIN
       
    27 
       
    28 #include <stdio.h>
       
    29 #include <glib.h>
       
    30 #include <locale.h>
       
    31 #include <string.h>
       
    32 #include <stdlib.h>
       
    33 
       
    34 #ifdef SYMBIAN
       
    35 #include "mrt2_glib2_test.h"
       
    36 #endif /*SYMBIAN*/
       
    37 
       
    38 
       
    39 static GKeyFile *
       
    40 load_data (const gchar   *data, 
       
    41 	   GKeyFileFlags  flags)
       
    42 {
       
    43   GKeyFile *keyfile;
       
    44   GError *error = NULL;
       
    45 
       
    46   keyfile = g_key_file_new ();
       
    47   g_key_file_load_from_data (keyfile, data, -1, flags, &error);
       
    48   if (error)
       
    49     {
       
    50       g_print ("Could not load data: %s\n", error->message);
       
    51       
       
    52       g_assert(FALSE && "keyfile_test failed");
       
    53       
       
    54       #ifdef SYMBIAN
       
    55   	  testResultXml("keyfile_test");
       
    56   	  #endif /* EMULATOR */
       
    57       
       
    58       exit (1);
       
    59     }
       
    60   
       
    61   return keyfile;
       
    62 }
       
    63 
       
    64 static void
       
    65 check_error (GError **error,
       
    66 	     GQuark   domain,
       
    67 	     gint     code)
       
    68 {
       
    69   if (*error == NULL)
       
    70     {
       
    71       g_print ("Missing an error\n");
       
    72       exit (1);
       
    73     }
       
    74   
       
    75   if ((*error)->domain != domain)
       
    76     {
       
    77       g_print ("Wrong error domain: got %s, expected %s\n",
       
    78 	       g_quark_to_string ((*error)->domain),
       
    79 	       g_quark_to_string (domain));
       
    80 	  
       
    81 	  g_assert(FALSE && "keyfile_test failed");
       
    82       
       
    83       #ifdef SYMBIAN
       
    84   	  testResultXml("keyfile_test");
       
    85   	  #endif /* EMULATOR */
       
    86   	  
       
    87       exit (1);
       
    88     }
       
    89   
       
    90   if ((*error)->code != code)
       
    91     {
       
    92       g_print ("Wrong error code: got %d, expected %d\n",
       
    93 	       (*error)->code, code);
       
    94 	       
       
    95 	  g_assert(FALSE && "keyfile_test failed");
       
    96       
       
    97       #ifdef SYMBIAN
       
    98   	  testResultXml("keyfile_test");
       
    99   	  #endif /* EMULATOR */
       
   100       
       
   101       exit (1);
       
   102     }
       
   103 
       
   104   g_error_free (*error);
       
   105   *error = NULL;
       
   106 }
       
   107 
       
   108 static void 
       
   109 check_no_error (GError **error)
       
   110 {
       
   111   if (*error != NULL)
       
   112     {
       
   113       g_print ("Unexpected error: (%s, %d) %s\n",
       
   114 	       g_quark_to_string ((*error)->domain),
       
   115 	       (*error)->code, (*error)->message);
       
   116 	  g_assert(FALSE && "keyfile_test failed");
       
   117       
       
   118       #ifdef SYMBIAN
       
   119   	  testResultXml("keyfile_test");
       
   120   	  #endif /* EMULATOR */
       
   121       
       
   122       exit (1);
       
   123     }
       
   124 }
       
   125 
       
   126 static void
       
   127 check_string_value (GKeyFile    *keyfile,
       
   128 		    const gchar *group,
       
   129 		    const gchar *key,
       
   130 		    const gchar *expected) 
       
   131 {
       
   132   GError *error = NULL;
       
   133   gchar *value;
       
   134 
       
   135   value = g_key_file_get_string (keyfile, group, key, &error);
       
   136   check_no_error (&error);
       
   137   g_assert (value != NULL);
       
   138 
       
   139   if (strcmp (value, expected) != 0)
       
   140     {
       
   141       g_print ("Group %s key %s: "
       
   142 	       "expected string value '%s', actual value '%s'\n",
       
   143 	       group, key, expected, value);      
       
   144 	  
       
   145 	  g_assert(FALSE && "keyfile_test failed");
       
   146       
       
   147       #ifdef SYMBIAN
       
   148   	  testResultXml("keyfile_test");
       
   149   	  #endif /* EMULATOR */
       
   150       
       
   151       exit (1);
       
   152     }
       
   153 
       
   154   g_free (value);
       
   155 }
       
   156 
       
   157 static void
       
   158 check_locale_string_value (GKeyFile    *keyfile,
       
   159 			   const gchar *group,
       
   160 			   const gchar *key,
       
   161 			   const gchar *locale,
       
   162 			   const gchar *expected) 
       
   163 {
       
   164   GError *error = NULL;
       
   165   gchar *value;
       
   166 
       
   167   value = g_key_file_get_locale_string (keyfile, group, key, locale, &error);
       
   168   check_no_error (&error);
       
   169   g_assert (value != NULL);
       
   170 
       
   171   if (strcmp (value, expected) != 0)
       
   172     {
       
   173       g_print ("Group %s key %s locale %s: "
       
   174 	       "expected string value '%s', actual value '%s'\n",
       
   175 	       group, key, locale, expected, value);      
       
   176 	  
       
   177 	  g_assert(FALSE && "keyfile_test failed");
       
   178       
       
   179       #ifdef SYMBIAN
       
   180   	  testResultXml("keyfile_test");
       
   181   	  #endif /* EMULATOR */
       
   182   	  
       
   183       exit (1);
       
   184     }
       
   185 
       
   186   g_free (value);
       
   187 }
       
   188 
       
   189 static void
       
   190 check_boolean_value (GKeyFile    *keyfile,
       
   191 		     const gchar *group,
       
   192 		     const gchar *key,
       
   193 		     gboolean     expected) 
       
   194 {
       
   195   GError *error = NULL;
       
   196   gboolean value;
       
   197 
       
   198   value = g_key_file_get_boolean (keyfile, group, key, &error);
       
   199   check_no_error (&error);
       
   200 
       
   201   if (value != expected)
       
   202     {
       
   203       g_print ("Group %s key %s: "
       
   204 	       "expected boolean value '%s', actual value '%s'\n",
       
   205 	       group, key, 
       
   206 	       expected ? "true" : "false", 
       
   207 	       value ? "true" : "false");      
       
   208 	       
       
   209 	       
       
   210 	  g_assert(FALSE && "keyfile_test failed");
       
   211       
       
   212       #ifdef SYMBIAN
       
   213   	  testResultXml("keyfile_test");
       
   214   	  #endif /* EMULATOR */
       
   215   	  
       
   216       exit (1);
       
   217     }
       
   218 }
       
   219 
       
   220 static void
       
   221 check_integer_value (GKeyFile    *keyfile,
       
   222 		     const gchar *group,
       
   223 		     const gchar *key,
       
   224 		     gint         expected) 
       
   225 {
       
   226   GError *error = NULL;
       
   227   gint value;
       
   228 
       
   229   value = g_key_file_get_integer (keyfile, group, key, &error);
       
   230   check_no_error (&error);
       
   231 
       
   232   if (value != expected)
       
   233     {
       
   234       g_print ("Group %s key %s: "
       
   235 	       "expected integer value %d, actual value %d\n",
       
   236 	       group, key, expected, value);      
       
   237 	  
       
   238 	  g_assert(FALSE && "keyfile_test failed");
       
   239       
       
   240       #ifdef SYMBIAN
       
   241   	  testResultXml("keyfile_test");
       
   242   	  #endif /* EMULATOR */
       
   243   	  
       
   244       exit (1);
       
   245     }
       
   246 }
       
   247 
       
   248 int create_file(char *path)
       
   249 {
       
   250 	FILE *fp = fopen(path,"w");
       
   251 	if(fp)
       
   252 	{
       
   253 		fprintf(fp,"[group1]\n");
       
   254 		fprintf(fp,"key1=123\n");
       
   255 		fprintf(fp,"key2=456\n");
       
   256 		fclose(fp);
       
   257 		return TRUE;
       
   258 	}
       
   259 	return FALSE;
       
   260 }
       
   261 
       
   262 void test_loadfromfile()
       
   263 {
       
   264 	
       
   265 	GKeyFile *keyfile = g_key_file_new(),*keyfile1=g_key_file_new();
       
   266 	
       
   267 	gchar *full_path = NULL;	
       
   268 
       
   269 	int ret;
       
   270 	if(create_file("c:\\tempfile.txt"))
       
   271 	{
       
   272 		g_assert(g_key_file_load_from_file(keyfile,"c:\\tempfile.txt",0,NULL));
       
   273 		check_string_value (keyfile, "group1", "key1", "123");
       
   274 		check_string_value (keyfile, "group1", "key2", "456");
       
   275 	}
       
   276 	else
       
   277 		g_assert(FALSE);
       
   278 	
       
   279 	g_key_file_free(keyfile);
       
   280 	
       
   281 	if(create_file("tempfile.txt"))
       
   282 		g_assert(g_key_file_load_from_data_dirs(keyfile1,"tempfile.txt",&full_path,0,NULL));
       
   283 	
       
   284 	
       
   285 }
       
   286 
       
   287 void test_setstring()
       
   288 {
       
   289 	GKeyFile *keyfile;
       
   290 	gchar **value;
       
   291 	gsize n = 2;
       
   292 	
       
   293 	const gchar *list[2] = 
       
   294 	{
       
   295 		"test1","test2"	
       
   296 	};
       
   297 
       
   298   	const gchar *data = 
       
   299 	    "[1]\n"
       
   300 	    "key1=123\n"
       
   301 	    "[2]\n"
       
   302 	    "key2=456\n";
       
   303 
       
   304 	keyfile = load_data (data, 0);
       
   305 	
       
   306 	check_string_value (keyfile, "1", "key1", "123");
       
   307 	g_key_file_set_string(keyfile,"1","key1","789");
       
   308 	check_string_value (keyfile, "1", "key1", "789");
       
   309 	
       
   310 	g_key_file_set_string_list(keyfile,"1","key1",list,2);
       
   311 	
       
   312 	value = g_key_file_get_string_list(keyfile, "1", "key1",&n, NULL);
       
   313 	
       
   314 	g_assert(!strcmp(value[0],"test1"));
       
   315 	g_assert(!strcmp(value[1],"test2"));
       
   316 	g_strfreev(value);
       
   317 }
       
   318 
       
   319 void test_setboolean()
       
   320 {
       
   321 	GKeyFile *keyfile;
       
   322 	gboolean *value;
       
   323 	gsize n = 2;
       
   324 	
       
   325 	gboolean list[2] = {TRUE,FALSE};
       
   326 	
       
   327 	const gchar *data = 
       
   328 	    "[1]\n"
       
   329 	    "key1=true\n"
       
   330 	    "key2=false\n";
       
   331 
       
   332 	keyfile = load_data (data, 0);
       
   333 	
       
   334 	check_boolean_value (keyfile, "1", "key1", TRUE);
       
   335 	g_key_file_set_boolean(keyfile,"1","key1",FALSE);
       
   336 	check_boolean_value (keyfile, "1", "key1", FALSE);
       
   337 	
       
   338 	g_key_file_set_boolean_list(keyfile,"1","key1",list,2);
       
   339 	
       
   340 	value = g_key_file_get_boolean_list(keyfile, "1", "key1",&n, NULL);
       
   341 	
       
   342 	g_assert(value[0] == TRUE);
       
   343 	g_assert(value[1] == FALSE);
       
   344 	
       
   345 }
       
   346 
       
   347 void test_setinteger()
       
   348 {
       
   349 	GKeyFile *keyfile;
       
   350 	gint *value;
       
   351 	gsize n = 2;
       
   352 	
       
   353 	gint list[2] = {111,222};
       
   354 	
       
   355 	const gchar *data = 
       
   356 	    "[1]\n"
       
   357 	    "key1=123\n"
       
   358 	    "key2=456\n";
       
   359 
       
   360 	keyfile = load_data (data, 0);
       
   361 	
       
   362 	check_integer_value (keyfile, "1", "key1", 123);
       
   363 	g_key_file_set_integer(keyfile,"1","key1",789);
       
   364 	check_integer_value (keyfile, "1", "key1", 789);
       
   365 	
       
   366 	g_key_file_set_integer_list(keyfile,"1","key1",list,2);
       
   367 	
       
   368 	value = g_key_file_get_integer_list(keyfile, "1", "key1",&n, NULL);
       
   369 	
       
   370 	g_assert(value[0] == 111);
       
   371 	g_assert(value[1] == 222);
       
   372 	
       
   373 }
       
   374 
       
   375 void test_keyfiletodata()
       
   376 {
       
   377 	GKeyFile *keyfile;
       
   378 	
       
   379 	gchar *retVal = NULL;
       
   380 	gsize length = 0;
       
   381 	
       
   382 	const gchar *data = 
       
   383 	    "[1]\n"
       
   384 	    "key1=123\n"
       
   385 	    "key2=456\n";
       
   386 	
       
   387 	keyfile = load_data (data, 0);
       
   388 	
       
   389 	retVal = g_key_file_to_data(keyfile,&length,NULL);
       
   390 	
       
   391 	g_assert(retVal != NULL && length > 0);
       
   392 }
       
   393 
       
   394 void test_setcomment()
       
   395 {
       
   396 	GKeyFile *keyfile;
       
   397 	gchar *comment;
       
   398 
       
   399 	const gchar *data = 
       
   400 	    "[1]\n"
       
   401 	    "key1=123\n"
       
   402 	    "key2=456\n";
       
   403 	
       
   404 	keyfile = load_data (data, 0);
       
   405 	
       
   406 	g_key_file_set_comment(keyfile,"1","key1","comment1",NULL);
       
   407 	
       
   408 	comment = g_key_file_get_comment(keyfile,"1","key1",NULL);
       
   409 	
       
   410 	g_assert(!strcmp(comment,"comment1\n"));
       
   411 	
       
   412 	g_key_file_remove_comment(keyfile,"1","key1",NULL);
       
   413 	
       
   414 	g_free(comment);
       
   415 	
       
   416 	comment = g_key_file_get_comment(keyfile,"1","key1",NULL);
       
   417 	
       
   418 	g_assert(comment == NULL);
       
   419 	
       
   420 }
       
   421 
       
   422 void test_setlocale()
       
   423 {
       
   424 	GKeyFile *keyfile;
       
   425 	gchar *value;
       
   426 	gchar **list;
       
   427 	gchar *input_list[2] = {"test2","test3"};
       
   428 	gsize length = 2;
       
   429 	
       
   430 	const gchar *data = 
       
   431 	    "[1]\n"
       
   432 	    "key1=123\n"
       
   433 	    "key2=456\n";
       
   434 	
       
   435 	keyfile = load_data (data, 0);
       
   436 	
       
   437 	g_key_file_set_locale_string(keyfile,"1","key3","C","test");
       
   438 	
       
   439 	value = g_key_file_get_locale_string(keyfile,"1","key3","C",NULL);
       
   440 	
       
   441 	g_assert(!strcmp(value,"test"));
       
   442 	
       
   443 	g_free(value);
       
   444 	
       
   445 	value = g_key_file_get_locale_string(keyfile,"1","key3","de",NULL);
       
   446 	
       
   447 	g_assert(value == NULL);
       
   448 	
       
   449 	g_key_file_set_locale_string_list(keyfile,"1","key4","C",input_list,2);
       
   450 	
       
   451 	list = g_key_file_get_locale_string_list(keyfile,"1","key4","C",&length,NULL);
       
   452 	
       
   453 	g_assert(!strcmp(list[0],"test2"));
       
   454 	g_assert(!strcmp(list[1],"test3"));
       
   455 	
       
   456 }
       
   457 
       
   458 int
       
   459 main (int argc, char *argv[])
       
   460 {
       
   461   	#ifdef SYMBIAN
       
   462 	
       
   463 	g_log_set_handler (NULL,  G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG, &mrtLogHandler, NULL);
       
   464 	#endif /*SYMBIAN*/
       
   465   
       
   466   test_loadfromfile();
       
   467   test_setstring();
       
   468   test_setboolean();
       
   469   test_setinteger();
       
   470   test_keyfiletodata();
       
   471   test_setcomment();
       
   472   test_setlocale();
       
   473   
       
   474   #ifdef SYMBIAN
       
   475   testResultXml("keyfile_test");
       
   476   #endif /* EMULATOR */
       
   477    
       
   478   #ifdef SYMBIAN
       
   479   testResultXml("keyfile_test");
       
   480   #endif /* EMULATOR */
       
   481   
       
   482   return 0;
       
   483 }