aboutsummaryrefslogtreecommitdiff
path: root/src/tests/test-charsets.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2012-09-11 16:36:16 -0500
committerDan Williams <dcbw@redhat.com>2012-09-12 23:03:58 -0500
commitc524734d9fd897add850391e7db0a1060e2f6c37 (patch)
tree26bb44bdfbabe22abefc098376220a1870358d5c /src/tests/test-charsets.c
parent73ced242da75abf63a1b5be47ad95123a9e53a3f (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.c39
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;