diff options
author | Dan Williams <dcbw@redhat.com> | 2012-09-11 16:36:16 -0500 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2012-09-12 23:03:58 -0500 |
commit | c524734d9fd897add850391e7db0a1060e2f6c37 (patch) | |
tree | 26bb44bdfbabe22abefc098376220a1870358d5c /src/tests/test-charsets.c | |
parent | 73ced242da75abf63a1b5be47ad95123a9e53a3f (diff) |
core: better handling of non-UCS2 conversions that should be UCS2 (bgo #683817)
Some modems return the +COPS operator name in hex-encoded current
character set (as set with +CSCS). Others return the operator name
in ASCII when set to UCS2, while yet others return the ASCII name
with trash at the end (*cough* Huawei *cough*). Handle that better
by not crashing.
Diffstat (limited to 'src/tests/test-charsets.c')
-rw-r--r-- | src/tests/test-charsets.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/tests/test-charsets.c b/src/tests/test-charsets.c index f954d93e..ced38a66 100644 --- a/src/tests/test-charsets.c +++ b/src/tests/test-charsets.c @@ -326,6 +326,41 @@ test_pack_gsm7_7_chars_offset (void *f, gpointer d) g_free (packed); } +static void +test_take_convert_ucs2_hex_utf8 (void *f, gpointer d) +{ + gchar *src, *converted; + + /* Ensure hex-encoded UCS-2 works */ + src = g_strdup ("0054002d004d006f00620069006c0065"); + converted = mm_charset_take_and_convert_to_utf8 (src, MM_MODEM_CHARSET_UCS2); + g_assert_cmpstr (converted, ==, "T-Mobile"); + g_free (converted); +} + +static void +test_take_convert_ucs2_bad_ascii (void *f, gpointer d) +{ + gchar *src, *converted; + + /* Test that something mostly ASCII returns most of the original string */ + src = g_strdup ("Orange\241"); + converted = mm_charset_take_and_convert_to_utf8 (src, MM_MODEM_CHARSET_UCS2); + g_assert_cmpstr (converted, ==, "Orange"); + g_free (converted); +} + +static void +test_take_convert_ucs2_bad_ascii2 (void *f, gpointer d) +{ + gchar *src, *converted; + + /* Ensure something completely screwed up doesn't crash */ + src = g_strdup ("\241\255\254\250\244\234"); + converted = mm_charset_take_and_convert_to_utf8 (src, MM_MODEM_CHARSET_UCS2); + g_assert (converted == NULL); +} + #if GLIB_CHECK_VERSION(2,25,12) typedef GTestFixtureFunc TCFunc; @@ -360,6 +395,10 @@ int main (int argc, char **argv) g_test_suite_add (suite, TESTCASE (test_pack_gsm7_7_chars_offset, NULL)); + g_test_suite_add (suite, TESTCASE (test_take_convert_ucs2_hex_utf8, NULL)); + g_test_suite_add (suite, TESTCASE (test_take_convert_ucs2_bad_ascii, NULL)); + g_test_suite_add (suite, TESTCASE (test_take_convert_ucs2_bad_ascii2, NULL)); + result = g_test_run (); return result; |