Add unit test for Turkish variant

Also fixes an error in the default table unit test.
This commit is contained in:
Aki Niemi 2009-09-04 17:35:43 +03:00
parent 462b0b8249
commit a8fb6bf356
1 changed files with 216 additions and 1 deletions

View File

@ -49,7 +49,7 @@ unsigned short gsm_to_unicode_map[] =
0x06, 0x00F9,
0x07, 0x00EC,
0x08, 0x00F2,
0x09, 0x00E7,
0x09, 0x00C7,
0x0A, 0x000A,
0x0B, 0x00D8,
0x0C, 0x00F8,
@ -180,6 +180,159 @@ unsigned short gsm_to_unicode_map[] =
0x7F, 0x00E0,
};
unsigned short gsm_turkish_to_unicode_map[] =
{
0x00, 0x0040,
0x01, 0x00A3,
0x02, 0x0024,
0x03, 0x00A5,
0x04, 0x20AC,
0x05, 0x00E9,
0x06, 0x00F9,
0x07, 0x0131,
0x08, 0x00F2,
0x09, 0x00C7,
0x0A, 0x000A,
0x0B, 0x011E,
0x0C, 0x011F,
0x0D, 0x000D,
0x0E, 0x00C5,
0x0F, 0x00E5,
0x10, 0x0394,
0x11, 0x005F,
0x12, 0x03A6,
0x13, 0x0393,
0x14, 0x039B,
0x15, 0x03A9,
0x16, 0x03A0,
0x17, 0x03A8,
0x18, 0x03A3,
0x19, 0x0398,
0x1A, 0x039E,
/* We're not including some of the single shift codes to this map,
* because the turkish variant isn't symmetric, i.e., the same
* character is present in both the locking shift table as well as the
* single shift table */
0x1B0A, 0x000C,
0x1B14, 0x005E,
0x1B28, 0x007B,
0x1B29, 0x007D,
0x1B2F, 0x005C,
0x1B3C, 0x005B,
0x1B3D, 0x007E,
0x1B3E, 0x005D,
0x1B40, 0x007C,
/*0x1B47, 0x011E,*/
/*0x1B49, 0x0130,*/
/*0x1B53, 0x015E,*/
/*0x1B63, 0x00E7,*/
/*0x1B65, 0x20AC,*/
/*0x1B67, 0x011F,*/
/*0x1B69, 0x0131,*/
/*0x1B73, 0x015F,*/
0x1C, 0x015E,
0x1D, 0x015F,
0x1E, 0x00DF,
0x1F, 0x00C9,
0x20, 0x0020,
0x21, 0x0021,
0x22, 0x0022,
0x23, 0x0023,
0x24, 0x00A4,
0x25, 0x0025,
0x26, 0x0026,
0x27, 0x0027,
0x28, 0x0028,
0x29, 0x0029,
0x2A, 0x002A,
0x2B, 0x002B,
0x2C, 0x002C,
0x2D, 0x002D,
0x2E, 0x002E,
0x2F, 0x002F,
0x30, 0x0030,
0x31, 0x0031,
0x32, 0x0032,
0x33, 0x0033,
0x34, 0x0034,
0x35, 0x0035,
0x36, 0x0036,
0x37, 0x0037,
0x38, 0x0038,
0x39, 0x0039,
0x40, 0x0130,
0x3A, 0x003A,
0x3B, 0x003B,
0x3C, 0x003C,
0x3D, 0x003D,
0x3E, 0x003E,
0x3F, 0x003F,
0x40, 0x0130,
0x41, 0x0041,
0x42, 0x0042,
0x43, 0x0043,
0x44, 0x0044,
0x45, 0x0045,
0x46, 0x0046,
0x47, 0x0047,
0x48, 0x0048,
0x49, 0x0049,
0x4A, 0x004A,
0x4B, 0x004B,
0x4C, 0x004C,
0x4D, 0x004D,
0x4E, 0x004E,
0x4F, 0x004F,
0x50, 0x0050,
0x51, 0x0051,
0x52, 0x0052,
0x53, 0x0053,
0x54, 0x0054,
0x55, 0x0055,
0x56, 0x0056,
0x57, 0x0057,
0x58, 0x0058,
0x59, 0x0059,
0x5A, 0x005A,
0x5B, 0x00C4,
0x5C, 0x00D6,
0x5D, 0x00D1,
0x5E, 0x00DC,
0x5F, 0x00A7,
0x60, 0x00E7,
0x61, 0x0061,
0x62, 0x0062,
0x63, 0x0063,
0x64, 0x0064,
0x65, 0x0065,
0x66, 0x0066,
0x67, 0x0067,
0x68, 0x0068,
0x69, 0x0069,
0x6A, 0x006A,
0x6B, 0x006B,
0x6C, 0x006C,
0x6D, 0x006D,
0x6E, 0x006E,
0x6F, 0x006F,
0x70, 0x0070,
0x71, 0x0071,
0x72, 0x0072,
0x73, 0x0073,
0x74, 0x0074,
0x75, 0x0075,
0x76, 0x0076,
0x77, 0x0077,
0x78, 0x0078,
0x79, 0x0079,
0x7A, 0x007A,
0x7B, 0x00E4,
0x7C, 0x00F6,
0x7D, 0x00F1,
0x7E, 0x00FC,
0x7F, 0x00E0
};
#define UTF8_LENGTH(c) \
((c) < 0x80 ? 1 : \
((c) < 0x800 ? 2 : 3))
@ -272,6 +425,67 @@ static void test_valid()
}
}
static void test_valid_turkish()
{
long nwritten;
long nread;
char *res;
int i;
long size;
gunichar *verify;
unsigned char *back;
unsigned char buf[2];
static int map_size =
sizeof(gsm_turkish_to_unicode_map) / sizeof(unsigned short) / 2;
for (i = 0; i < map_size; i++) {
unsigned short c = gsm_turkish_to_unicode_map[i*2];
if (c & 0x1b00) {
buf[0] = 0x1b;
buf[1] = c & 0x7f;
size = 2;
} else {
size = 1;
buf[0] = c & 0x7f;
}
res = convert_gsm_to_utf8_with_lang(buf, size, &nread, &nwritten, 0, 1, 1);
g_assert(res);
if (g_test_verbose())
g_print("size: %ld, nread:%ld, nwritten:%ld, %s\n",
size, nread, nwritten, res);
g_assert(nread == size);
verify = g_utf8_to_ucs4(res, -1, NULL, NULL, NULL);
g_assert(verify[0] == gsm_turkish_to_unicode_map[i*2+1]);
g_assert(verify[1] == 0);
g_assert(nwritten == UTF8_LENGTH(verify[0]));
back = convert_utf8_to_gsm_with_lang(res, -1, &nread, &nwritten, 0, 1, 1);
g_assert(back);
g_assert(nwritten == size);
if (c & 0x1b00) {
g_assert(back[0] == 0x1b);
g_assert(back[1] == (c & 0x7f));
} else {
g_assert(back[0] == (c & 0x7f));
}
g_free(back);
g_free(verify);
g_free(res);
}
}
static const char hex_packed[] = "493A283D0795C3F33C88FE06C9CB6132885EC6D34"
"1EDF27C1E3E97E7207B3A0C0A5241E377BB1D"
"7693E72E";
@ -697,6 +911,7 @@ int main(int argc, char **argv)
g_test_add_func("/testutil/Invalid Conversions", test_invalid);
g_test_add_func("/testutil/Valid Conversions", test_valid);
g_test_add_func("/testutil/Valid Turkish National Variant Conversions", test_valid_turkish);
g_test_add_func("/testutil/Decode Encode", test_decode_encode);
g_test_add_func("/testutil/Pack Size", test_pack_size);
g_test_add_func("/testutil/CBS CR Handling", test_cr_handling);