1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/ossrv/glib/tsrc/BC/tests/unicode-collate.c Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,150 @@
1.4 +/* Portion Copyright © 2008-09 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.*/
1.5 +#undef G_DISABLE_ASSERT
1.6 +#undef G_LOG_DOMAIN
1.7 +
1.8 +#include <glib.h>
1.9 +#include <stdio.h>
1.10 +#include <stdlib.h>
1.11 +#include <string.h>
1.12 +
1.13 +#ifdef SYMBIAN
1.14 +#include "mrt2_glib2_test.h"
1.15 +#endif /*SYMBIAN*/
1.16 +
1.17 +typedef struct {
1.18 + const char *key;
1.19 + const char *str;
1.20 +} Line;
1.21 +
1.22 +
1.23 +int
1.24 +compare_collate (const void *a, const void *b)
1.25 +{
1.26 + const Line *line_a = a;
1.27 + const Line *line_b = b;
1.28 +
1.29 + return g_utf8_collate (line_a->str, line_b->str);
1.30 +}
1.31 +
1.32 +int
1.33 +compare_key (const void *a, const void *b)
1.34 +{
1.35 + const Line *line_a = a;
1.36 + const Line *line_b = b;
1.37 +
1.38 + return strcmp (line_a->key, line_b->key);
1.39 +}
1.40 +
1.41 +gchar* sorted_res_arr[15] =
1.42 +{
1.43 + "ABC",
1.44 + "Bart",
1.45 + "BART",
1.46 + "Bartlett",
1.47 + "CA",
1.48 + "can",
1.49 + "Canada",
1.50 + "CBS",
1.51 + "NBC",
1.52 + "next",
1.53 + "NeXT",
1.54 + "west",
1.55 + "West",
1.56 + "western",
1.57 + NULL
1.58 +};
1.59 +
1.60 +int main (int argc, char **argv)
1.61 +{
1.62 + GIOChannel *in;
1.63 + GError *error = NULL;
1.64 + gchar *srcdir = getenv ("srcdir");
1.65 + gchar *testfile;
1.66 + GArray *line_array;
1.67 + guint i;
1.68 +
1.69 + #ifdef SYMBIAN
1.70 + 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);
1.71 + g_set_print_handler(mrtPrintHandler);
1.72 + #endif /*SYMBIAN*/
1.73 +
1.74 + line_array = g_array_new (FALSE, FALSE, sizeof(Line));
1.75 +
1.76 + if (!srcdir)
1.77 + srcdir = "c:";
1.78 +
1.79 + testfile = g_strconcat (srcdir, G_DIR_SEPARATOR_S "casecollate.txt", NULL);
1.80 +
1.81 + in = g_io_channel_new_file (testfile, "r", &error);
1.82 + if (!in)
1.83 + {
1.84 + g_print("Cannot open %s: %s\n", testfile, error->message);
1.85 +
1.86 + g_assert(FALSE && "unicode-collate failed");
1.87 +
1.88 + #ifdef SYMBIAN
1.89 + testResultXml("unicode-collate");
1.90 + #endif /* EMULATOR */
1.91 +
1.92 + return 1;
1.93 + }
1.94 +
1.95 + while (TRUE)
1.96 + {
1.97 + gsize term_pos;
1.98 + gchar *str;
1.99 + Line line;
1.100 + gint keylen;
1.101 + gint strlen;
1.102 +
1.103 + if (g_io_channel_read_line (in, &str, NULL, &term_pos, &error) != G_IO_STATUS_NORMAL)
1.104 + break;
1.105 +
1.106 + str[term_pos] = '\0';
1.107 +
1.108 + line.key = g_utf8_collate_key (str, -1);
1.109 + line.str = str;
1.110 +
1.111 + g_array_append_val (line_array, line);
1.112 + }
1.113 +
1.114 + if (error)
1.115 + {
1.116 + g_print("Error reading test file, %s\n", error->message);
1.117 +
1.118 + g_assert(FALSE && "unicode-collate failed");
1.119 +
1.120 + #ifdef SYMBIAN
1.121 + testResultXml("unicode-collate");
1.122 + #endif /* EMULATOR */
1.123 +
1.124 + return 1;
1.125 + }
1.126 +
1.127 + qsort (line_array->data, line_array->len, sizeof (Line), compare_collate);
1.128 + for (i = 0; i < line_array->len; i++)
1.129 + {
1.130 + if(strcmp(sorted_res_arr[i], g_array_index (line_array, Line, i).str))
1.131 + {
1.132 + g_assert(FALSE && "compare_collate failed\n");
1.133 +
1.134 + }
1.135 + }
1.136 +
1.137 + qsort (line_array->data, line_array->len, sizeof (Line), compare_key);
1.138 + for (i = 0; i < line_array->len; i++)
1.139 + {
1.140 + if(strcmp(sorted_res_arr[i], g_array_index (line_array, Line, i).str))
1.141 + {
1.142 + g_assert(FALSE && "compare_key failed\n");
1.143 + }
1.144 + }
1.145 +
1.146 + g_io_channel_unref (in);
1.147 +
1.148 + #ifdef SYMBIAN
1.149 + testResultXml("unicode-collate");
1.150 + #endif /* EMULATOR */
1.151 +
1.152 + return 0;
1.153 +}