diff options
author | Denis Kenzior <denkenz@gmail.com> | 2009-12-03 00:26:20 -0600 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2009-12-03 00:26:20 -0600 |
commit | 44848d5a9bb298219cc1bbeb54d83e342545adb4 (patch) | |
tree | 299a8978dfcf31f67cb7289647dc1877387bd3f0 /unit/test-sms.c | |
parent | 0500fadc63340371775e7c5b91dd1f12331c4add (diff) | |
download | ofono-44848d5a9bb298219cc1bbeb54d83e342545adb4.tar.bz2 |
Add unit test for max message size encoding
Diffstat (limited to 'unit/test-sms.c')
-rw-r--r-- | unit/test-sms.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/unit/test-sms.c b/unit/test-sms.c index 9c1528c5..5815cf44 100644 --- a/unit/test-sms.c +++ b/unit/test-sms.c @@ -846,6 +846,66 @@ static void test_prepare_concat() sms_assembly_free(assembly); } +static void test_limit(gunichar uni, int target_size, gboolean use_16bit) +{ + char *utf8; + char *decoded; + GSList *l; + unsigned int i; + char utf8_char[6]; + unsigned int stride; + + stride = g_unichar_to_utf8(uni, utf8_char); + + utf8 = g_new0(char, (target_size + 2) * stride); + + for (i = 0; i < target_size * stride; i += stride) + memcpy(utf8 + i, utf8_char, stride); + + utf8[i] = '\0'; + + l = sms_text_prepare(utf8, 0, use_16bit, NULL); + + g_assert(l); + g_assert(g_slist_length(l) == 255); + + decoded = sms_decode_text(l); + g_assert(g_utf8_strlen(decoded, -1) == target_size); + + g_free(decoded); + + memcpy(utf8 + i, utf8_char, stride); + utf8[i+stride] = '\0'; + + l = sms_text_prepare(utf8, 0, use_16bit, NULL); + + g_assert(l == NULL); + g_free(utf8); +} + +static void test_prepare_limits() +{ + gunichar ascii = 0x41; + gunichar ucs2 = 0x416; + unsigned int target_size; + + /* The limit for 16 bit headers is 255 * 152 for GSM7 */ + target_size = 255 * 152; + test_limit(ascii, target_size, TRUE); + + /* The limit for 8 bit headers is 255 * 153 for GSM7 */ + target_size = 255 * 153; + test_limit(ascii, target_size, FALSE); + + /* The limit for 16 bit headers is 255 * 66 for UCS2 */ + target_size = 255 * 66; + test_limit(ucs2, target_size, TRUE); + + /* The limit for 8 bit headers is 255 * 67 for UCS2 */ + target_size = 255 * 67; + test_limit(ucs2, target_size, FALSE); +} + static const char *cbs1 = "011000320111C2327BFC76BBCBEE46A3D168341A8D46A3D1683" "41A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168" "341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D100"; @@ -1111,6 +1171,7 @@ int main(int argc, char **argv) g_test_add_func("/testsms/Test Assembly", test_assembly); g_test_add_func("/testsms/Test Prepare 7Bit", test_prepare_7bit); g_test_add_func("/testsms/Test Prepare Concat", test_prepare_concat); + g_test_add_func("/testsms/Test Prepare Limits", test_prepare_limits); g_test_add_func("/testsms/Test CBS Encode / Decode", test_cbs_encode_decode); |