summaryrefslogtreecommitdiffstats
path: root/unit/test-util.c
diff options
context:
space:
mode:
authorAki Niemi <aki.niemi@nokia.com>2009-09-04 17:35:43 +0300
committerAki Niemi <aki.niemi@nokia.com>2009-09-08 14:16:23 +0300
commita8fb6bf356b29524b3eae35b07145c0f40200720 (patch)
tree1aede117fa7bf5309fe5f0cb449c07c3afe33b3d /unit/test-util.c
parent462b0b8249b519b02cf773e6a1bc2f6c1d38c111 (diff)
downloadofono-a8fb6bf356b29524b3eae35b07145c0f40200720.tar.bz2
Add unit test for Turkish variant
Also fixes an error in the default table unit test.
Diffstat (limited to 'unit/test-util.c')
-rw-r--r--unit/test-util.c217
1 files changed, 216 insertions, 1 deletions
diff --git a/unit/test-util.c b/unit/test-util.c
index 42372de8..69a7b957 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);