os/ossrv/glib/tsrc/BC/tests/unicode-caseconv.c
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
/* Portion Copyright © 2008-09 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.*/
sl@0
     2
#undef G_DISABLE_ASSERT
sl@0
     3
#undef G_LOG_DOMAIN
sl@0
     4
sl@0
     5
#include <locale.h>
sl@0
     6
#include <stdlib.h>
sl@0
     7
#include <stdio.h>
sl@0
     8
#include <glib.h>
sl@0
     9
#include <string.h>
sl@0
    10
sl@0
    11
#ifdef SYMBIAN
sl@0
    12
#include "mrt2_glib2_test.h"
sl@0
    13
#endif /*SYMBIAN*/
sl@0
    14
sl@0
    15
sl@0
    16
int main (int argc, char **argv)
sl@0
    17
{
sl@0
    18
  FILE *infile;
sl@0
    19
  char buffer[1024];
sl@0
    20
  char **strings;
sl@0
    21
  char *srcdir = getenv ("srcdir");
sl@0
    22
  char *filename;
sl@0
    23
  const char *locale;
sl@0
    24
  const char *test;
sl@0
    25
  char *convert;
sl@0
    26
#define true 1
sl@0
    27
#define false 0  
sl@0
    28
 char passed = true;
sl@0
    29
 int lines = 0;
sl@0
    30
   
sl@0
    31
  
sl@0
    32
  
sl@0
    33
  char *current_locale = setlocale (LC_CTYPE, NULL);
sl@0
    34
  gint result = 0;
sl@0
    35
sl@0
    36
	#ifdef SYMBIAN
sl@0
    37
sl@0
    38
  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);
sl@0
    39
  g_set_print_handler(mrtPrintHandler);
sl@0
    40
  #endif /*SYMBIAN*/
sl@0
    41
	  
sl@0
    42
sl@0
    43
  if (!srcdir)
sl@0
    44
    srcdir = "c:";
sl@0
    45
  filename = g_strconcat (srcdir, G_DIR_SEPARATOR_S, "casemap.bin", NULL);
sl@0
    46
  
sl@0
    47
  infile = fopen (filename, "r");
sl@0
    48
  if (!infile)
sl@0
    49
    {
sl@0
    50
      g_print("Failed to open %s\n", filename );
sl@0
    51
      g_assert(FALSE && "unicode-caseconv failed");
sl@0
    52
      
sl@0
    53
      #ifdef SYMBIAN
sl@0
    54
  	  testResultXml("unicode-caseconv");
sl@0
    55
  	  #endif /* EMULATOR */
sl@0
    56
      
sl@0
    57
      exit (1);
sl@0
    58
    }
sl@0
    59
  
sl@0
    60
   while (fgets (buffer, sizeof(buffer), infile))
sl@0
    61
    {
sl@0
    62
    lines++;
sl@0
    63
      if (buffer[0] == '#')
sl@0
    64
	continue;
sl@0
    65
sl@0
    66
      strings = g_strsplit (buffer, "\t", -1);
sl@0
    67
sl@0
    68
      locale = strings[0];
sl@0
    69
sl@0
    70
      if (!locale[0])
sl@0
    71
	locale = "C";
sl@0
    72
	
sl@0
    73
      if (strcmp (locale, current_locale) != 0)
sl@0
    74
	{
sl@0
    75
	  setlocale (LC_CTYPE, locale);
sl@0
    76
	  current_locale = setlocale (LC_CTYPE, NULL);
sl@0
    77
sl@0
    78
	  if (strncmp (current_locale, locale, 2) != 0)
sl@0
    79
	    {
sl@0
    80
	      g_print("Cannot set locale to %s, skipping\n", locale);
sl@0
    81
	      g_assert(FALSE && "unicode-caseconv failed");
sl@0
    82
	      goto next;
sl@0
    83
	    }
sl@0
    84
	}
sl@0
    85
      
sl@0
    86
      test = strings[1];
sl@0
    87
sl@0
    88
      convert = g_utf8_strup (test, -1);
sl@0
    89
      if (strcmp (convert, strings[4]) != 0)
sl@0
    90
	{
sl@0
    91
	  g_print("Failure: strup of line %d of casemap.bin toupper(%s) == %s, should have been %s\n",
sl@0
    92
		   lines,test, convert, strings[4]);
sl@0
    93
		   passed = false;
sl@0
    94
	  //g_assert(FALSE && "unicode-caseconv failed");
sl@0
    95
	  result = 1;
sl@0
    96
	}
sl@0
    97
      g_free (convert);
sl@0
    98
sl@0
    99
      convert = g_utf8_strdown (test, -1);
sl@0
   100
      if (strcmp (convert, strings[2]) != 0)
sl@0
   101
	{
sl@0
   102
	  g_print("Failure: strdown of line %d of casemap.bin tolower(%s) == %s, should have been %s\n",
sl@0
   103
		  lines,test, convert, strings[2]);
sl@0
   104
	  //g_assert(FALSE && "unicode-caseconv failed");
sl@0
   105
	  passed = false;
sl@0
   106
	  result = 1;
sl@0
   107
	}
sl@0
   108
      g_free (convert);
sl@0
   109
sl@0
   110
    next:
sl@0
   111
      g_strfreev (strings);
sl@0
   112
    }
sl@0
   113
sl@0
   114
  fclose (infile);
sl@0
   115
sl@0
   116
  g_free (filename);
sl@0
   117
  
sl@0
   118
  g_assert(passed && "unicode-caseconv failed");
sl@0
   119
  passed = true;
sl@0
   120
  filename = g_strconcat (srcdir, G_DIR_SEPARATOR_S, "casefold.bin", NULL);
sl@0
   121
  
sl@0
   122
  infile = fopen (filename, "r");
sl@0
   123
  if (!infile)
sl@0
   124
    {
sl@0
   125
      g_print("Failed to open %s\n", filename );
sl@0
   126
	  g_assert(FALSE && "unicode-caseconv failed");
sl@0
   127
	  
sl@0
   128
	  #ifdef SYMBIAN
sl@0
   129
  	  testResultXml("unicode-caseconv");
sl@0
   130
      #endif /* EMULATOR */
sl@0
   131
      
sl@0
   132
      exit (1);
sl@0
   133
    }
sl@0
   134
  
sl@0
   135
  lines = 0;
sl@0
   136
  while (fgets(buffer, sizeof(buffer), infile))
sl@0
   137
    {
sl@0
   138
     lines++;
sl@0
   139
      if (buffer[0] == '#')
sl@0
   140
	continue;
sl@0
   141
sl@0
   142
      buffer[strlen(buffer) - 1] = '\0';
sl@0
   143
      strings = g_strsplit (buffer, "\t", -1);
sl@0
   144
sl@0
   145
      test = strings[0];
sl@0
   146
sl@0
   147
      convert = g_utf8_casefold (test, -1);
sl@0
   148
      if (strcmp (convert, strings[1]) != 0)
sl@0
   149
	{
sl@0
   150
	  g_print("Failure: line %d casefold(%s) == '%s', should have been '%s'\n",
sl@0
   151
		   lines,test, convert, strings[1]);
sl@0
   152
	  //g_assert(FALSE && "unicode-caseconv failed");
sl@0
   153
	  passed = false;
sl@0
   154
	  result = 1;
sl@0
   155
	}
sl@0
   156
      g_free (convert);
sl@0
   157
sl@0
   158
      g_strfreev (strings);
sl@0
   159
    }
sl@0
   160
sl@0
   161
  fclose (infile);
sl@0
   162
  
sl@0
   163
  g_assert(passed && "unicode-caseconv failed");
sl@0
   164
  
sl@0
   165
  #ifdef SYMBIAN
sl@0
   166
  testResultXml("unicode-caseconv");
sl@0
   167
  #endif /* EMULATOR */
sl@0
   168
sl@0
   169
  return result;
sl@0
   170
}