glib/tsrc/BC/tests/unicode-collate.c
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/glib/tsrc/BC/tests/unicode-collate.c	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,150 @@
+/* Portion Copyright © 2008-09 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.*/
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef SYMBIAN
+#include "mrt2_glib2_test.h"
+#endif /*SYMBIAN*/
+
+typedef struct {
+  const char *key;
+  const char *str;
+} Line;
+  
+
+int 
+compare_collate (const void *a, const void *b)
+{
+  const Line *line_a = a;
+  const Line *line_b = b;
+
+  return g_utf8_collate (line_a->str, line_b->str);
+}
+
+int 
+compare_key (const void *a, const void *b)
+{
+  const Line *line_a = a;
+  const Line *line_b = b;
+
+  return strcmp (line_a->key, line_b->key);
+}
+
+gchar* sorted_res_arr[15] =
+{
+  "ABC",
+  "Bart",
+  "BART",
+  "Bartlett",
+  "CA",
+  "can",
+  "Canada",
+  "CBS",
+  "NBC",
+  "next",
+  "NeXT",
+  "west",
+  "West",
+  "western",
+   NULL
+};
+
+int main (int argc, char **argv)
+{
+  GIOChannel *in;
+  GError *error = NULL;
+  gchar *srcdir = getenv ("srcdir");
+  gchar *testfile;
+  GArray *line_array;
+  guint i;
+  
+  #ifdef SYMBIAN
+  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);
+  g_set_print_handler(mrtPrintHandler);
+  #endif /*SYMBIAN*/
+  
+  line_array = g_array_new (FALSE, FALSE, sizeof(Line));
+
+  if (!srcdir)
+	srcdir = "c:";
+
+  testfile = g_strconcat (srcdir, G_DIR_SEPARATOR_S "casecollate.txt", NULL);
+
+  in = g_io_channel_new_file (testfile, "r", &error);
+  if (!in)
+  {
+  	g_print("Cannot open %s: %s\n", testfile, error->message);
+  	
+  	g_assert(FALSE && "unicode-collate failed");
+  	
+  	#ifdef SYMBIAN
+  	testResultXml("unicode-collate");
+  	#endif /* EMULATOR */	
+	
+	return 1;
+  }
+
+  while (TRUE)
+    {
+      gsize term_pos;
+      gchar *str;
+      Line line;
+		gint keylen;
+		gint strlen;
+
+      if (g_io_channel_read_line (in, &str, NULL, &term_pos, &error) != G_IO_STATUS_NORMAL)
+	break;
+
+      str[term_pos] = '\0';
+
+      line.key = g_utf8_collate_key (str, -1);
+      line.str = str;
+
+      g_array_append_val (line_array, line);
+    }
+
+  if (error)
+    {
+      g_print("Error reading test file, %s\n", error->message);
+      
+      g_assert(FALSE && "unicode-collate failed");
+      
+      #ifdef SYMBIAN
+  	  testResultXml("unicode-collate");
+  	  #endif /* EMULATOR */
+  	  
+      return 1;
+    }
+
+	qsort (line_array->data, line_array->len, sizeof (Line), compare_collate);
+	for (i = 0; i < line_array->len; i++)
+	{
+		if(strcmp(sorted_res_arr[i], g_array_index (line_array, Line, i).str))
+		{
+			g_assert(FALSE && "compare_collate failed\n");
+			
+		}
+	}
+
+  qsort (line_array->data, line_array->len, sizeof (Line), compare_key);
+	for (i = 0; i < line_array->len; i++)
+	{
+		if(strcmp(sorted_res_arr[i], g_array_index (line_array, Line, i).str))
+		{
+			g_assert(FALSE && "compare_key failed\n");
+		}
+	}
+
+  g_io_channel_unref (in);
+  
+  #ifdef SYMBIAN
+  testResultXml("unicode-collate");
+  #endif /* EMULATOR */
+
+  return 0;
+}