Blame tests/unicode-caseconv.c

Packit Service d3d246
#undef G_DISABLE_ASSERT
Packit Service d3d246
#undef G_LOG_DOMAIN
Packit Service d3d246
Packit Service d3d246
#include <locale.h>
Packit Service d3d246
#include <stdlib.h>
Packit Service d3d246
#include <stdio.h>
Packit Service d3d246
#include <glib.h>
Packit Service d3d246
#include <string.h>
Packit Service d3d246
Packit Service d3d246
int main (int argc, char **argv)
Packit Service d3d246
{
Packit Service d3d246
  FILE *infile;
Packit Service d3d246
  char buffer[1024];
Packit Service d3d246
  char **strings;
Packit Service d3d246
  char *filename;
Packit Service d3d246
  const char *locale;
Packit Service d3d246
  const char *test;
Packit Service d3d246
  const char *expected;
Packit Service d3d246
  char *convert;
Packit Service d3d246
  char *current_locale = setlocale (LC_CTYPE, NULL);
Packit Service d3d246
  gint result = 0;
Packit Service d3d246
Packit Service d3d246
  g_test_init (&argc, &argv, NULL);
Packit Service d3d246
Packit Service d3d246
  filename = g_test_build_filename (G_TEST_DIST, "casemap.txt", NULL);
Packit Service d3d246
Packit Service d3d246
  infile = fopen (filename, "r");
Packit Service d3d246
  if (!infile)
Packit Service d3d246
    {
Packit Service d3d246
      fprintf (stderr, "Failed to open %s\n", filename );
Packit Service d3d246
      exit (1);
Packit Service d3d246
    }
Packit Service d3d246
  
Packit Service d3d246
  while (fgets (buffer, sizeof(buffer), infile))
Packit Service d3d246
    {
Packit Service d3d246
      if (buffer[0] == '#')
Packit Service d3d246
	continue;
Packit Service d3d246
Packit Service d3d246
      strings = g_strsplit (buffer, "\t", -1);
Packit Service d3d246
Packit Service d3d246
      locale = strings[0];
Packit Service d3d246
Packit Service d3d246
      if (!locale[0])
Packit Service d3d246
	locale = "C";
Packit Service d3d246
	
Packit Service d3d246
      if (strcmp (locale, current_locale) != 0)
Packit Service d3d246
	{
Packit Service d3d246
	  setlocale (LC_CTYPE, locale);
Packit Service d3d246
	  current_locale = setlocale (LC_CTYPE, NULL);
Packit Service d3d246
Packit Service d3d246
	  if (strncmp (current_locale, locale, 2) != 0)
Packit Service d3d246
	    {
Packit Service d3d246
	      fprintf (stderr, "Cannot set locale to %s, skipping\n", locale);
Packit Service d3d246
	      goto next;
Packit Service d3d246
	    }
Packit Service d3d246
	}
Packit Service d3d246
      
Packit Service d3d246
      test = strings[1];
Packit Service d3d246
Packit Service d3d246
      /* gen-casemap-txt.pl uses an empty string when a single character
Packit Service d3d246
       * doesn't have an equivalent in a particular case; since that behavior
Packit Service d3d246
       * is nonsense for multicharacter strings, it would make more sense
Packit Service d3d246
       * to put the expected result .. the original character unchanged. But 
Packit Service d3d246
       * for now, we just work around it here and take the empty string to mean
Packit Service d3d246
       * "same as original"
Packit Service d3d246
       */
Packit Service d3d246
Packit Service d3d246
      convert = g_utf8_strup (test, -1);
Packit Service d3d246
      expected = strings[4][0] ? strings[4] : test;
Packit Service d3d246
      if (strcmp (convert, expected) != 0)
Packit Service d3d246
	{
Packit Service d3d246
	  fprintf (stderr, "Failure: toupper(%s) == %s, should have been %s\n",
Packit Service d3d246
		   test, convert, expected);
Packit Service d3d246
	  result = 1;
Packit Service d3d246
	}
Packit Service d3d246
      g_free (convert);
Packit Service d3d246
Packit Service d3d246
      convert = g_utf8_strdown (test, -1);
Packit Service d3d246
      expected = strings[2][0] ? strings[2] : test;
Packit Service d3d246
      if (strcmp (convert, expected) != 0)
Packit Service d3d246
	{
Packit Service d3d246
	  fprintf (stderr, "Failure: tolower(%s) == %s, should have been %s\n",
Packit Service d3d246
		   test, convert, expected);
Packit Service d3d246
	  result = 1;
Packit Service d3d246
	}
Packit Service d3d246
      g_free (convert);
Packit Service d3d246
Packit Service d3d246
    next:
Packit Service d3d246
      g_strfreev (strings);
Packit Service d3d246
    }
Packit Service d3d246
Packit Service d3d246
  fclose (infile);
Packit Service d3d246
Packit Service d3d246
  g_free (filename);
Packit Service d3d246
  filename = g_test_build_filename (G_TEST_DIST, "casefold.txt", NULL);
Packit Service d3d246
  
Packit Service d3d246
  infile = fopen (filename, "r");
Packit Service d3d246
  if (!infile)
Packit Service d3d246
    {
Packit Service d3d246
      fprintf (stderr, "Failed to open %s\n", filename );
Packit Service d3d246
      g_free (filename);
Packit Service d3d246
      exit (1);
Packit Service d3d246
    }
Packit Service d3d246
  
Packit Service d3d246
  while (fgets (buffer, sizeof(buffer), infile))
Packit Service d3d246
    {
Packit Service d3d246
      if (buffer[0] == '#')
Packit Service d3d246
	continue;
Packit Service d3d246
Packit Service d3d246
      buffer[strlen(buffer) - 1] = '\0';
Packit Service d3d246
      strings = g_strsplit (buffer, "\t", -1);
Packit Service d3d246
Packit Service d3d246
      test = strings[0];
Packit Service d3d246
Packit Service d3d246
      convert = g_utf8_casefold (test, -1);
Packit Service d3d246
      if (strcmp (convert, strings[1]) != 0)
Packit Service d3d246
	{
Packit Service d3d246
	  fprintf (stderr, "Failure: casefold(%s) == '%s', should have been '%s'\n",
Packit Service d3d246
		   test, convert, strings[1]);
Packit Service d3d246
	  result = 1;
Packit Service d3d246
	}
Packit Service d3d246
      g_free (convert);
Packit Service d3d246
Packit Service d3d246
      g_strfreev (strings);
Packit Service d3d246
    }
Packit Service d3d246
Packit Service d3d246
  fclose (infile);
Packit Service d3d246
  g_free (filename);
Packit Service d3d246
Packit Service d3d246
  return result;
Packit Service d3d246
}