From: Aki Niemi Date: Fri, 4 Sep 2009 14:35:43 +0000 (+0300) Subject: Add unit test for Turkish variant X-Git-Tag: 0.5~132 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a8fb6bf356b29524b3eae35b07145c0f40200720;p=platform%2Fupstream%2Fofono.git Add unit test for Turkish variant Also fixes an error in the default table unit test. --- diff --git a/unit/test-util.c b/unit/test-util.c index 42372de..69a7b95 100644 --- a/unit/test-util.c +++ b/unit/test-util.c @@ -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);