summaryrefslogtreecommitdiffstats
path: root/unit/test-sms.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2009-07-02 19:00:40 -0500
committerDenis Kenzior <denkenz@gmail.com>2009-07-02 19:03:05 -0500
commitc722e8077c6bdf7217b7b07c6cdf981f1b6f0e3a (patch)
treefa66e75be4c3df0e24aa0e7071bfa2ef4944f083 /unit/test-sms.c
parenta9f776123ead64166e8338fb3fca59fb4a6d93ab (diff)
downloadofono-c722e8077c6bdf7217b7b07c6cdf981f1b6f0e3a.tar.bz2
Add Unit test for CBS assembly utilities
Diffstat (limited to 'unit/test-sms.c')
-rw-r--r--unit/test-sms.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/unit/test-sms.c b/unit/test-sms.c
index a559954f..78287c95 100644
--- a/unit/test-sms.c
+++ b/unit/test-sms.c
@@ -845,6 +845,10 @@ static const char *cbs1 = "011000320111C2327BFC76BBCBEE46A3D168341A8D46A3D1683"
"41A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168"
"341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D100";
+static const char *cbs2 = "0110003201114679785E96371A8D46A3D168341A8D46A3D1683"
+ "41A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168"
+ "341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D100";
+
static void test_cbs_encode_decode()
{
unsigned char *decoded_pdu;
@@ -910,6 +914,94 @@ static void test_cbs_encode_decode()
g_free(encoded_pdu);
}
+static void test_cbs_assembly()
+{
+ unsigned char *decoded_pdu;
+ long pdu_len;
+ struct cbs dec1;
+ struct cbs dec2;
+ struct cbs_assembly *assembly;
+ char iso639_lang[3];
+ GSList *l;
+ char *utf8;
+
+ assembly = cbs_assembly_new();
+
+ g_assert(assembly);
+
+ decoded_pdu = decode_hex(cbs1, -1, &pdu_len, 0);
+ cbs_decode(decoded_pdu, pdu_len, &dec1);
+ g_free(decoded_pdu);
+
+ decoded_pdu = decode_hex(cbs2, -1, &pdu_len, 0);
+ cbs_decode(decoded_pdu, pdu_len, &dec2);
+ g_free(decoded_pdu);
+
+ /* Add an initial page to the assembly */
+ l = cbs_assembly_add_page(assembly, &dec1);
+ g_assert(l);
+ g_assert(g_slist_length(assembly->recv_cell) == 1);
+ g_slist_foreach(l, (GFunc)g_free, NULL);
+ g_slist_free(l);
+
+ /* Can we receive new updates ? */
+ dec1.update_number = 8;
+ l = cbs_assembly_add_page(assembly, &dec1);
+ g_assert(l);
+ g_assert(g_slist_length(assembly->recv_cell) == 1);
+ g_slist_foreach(l, (GFunc)g_free, NULL);
+ g_slist_free(l);
+
+ /* Do we ignore old pages ? */
+ l = cbs_assembly_add_page(assembly, &dec1);
+ g_assert(l == NULL);
+
+ /* Do we ignore older pages ? */
+ dec1.update_number = 5;
+ l = cbs_assembly_add_page(assembly, &dec1);
+ g_assert(l == NULL);
+
+ cbs_assembly_location_changed(assembly, TRUE, TRUE);
+ g_assert(assembly->recv_cell == NULL);
+
+ dec1.update_number = 9;
+ dec1.page = 3;
+ dec1.max_pages = 3;
+
+ dec2.update_number = 9;
+ dec2.page = 2;
+ dec2.max_pages = 3;
+
+ l = cbs_assembly_add_page(assembly, &dec2);
+ g_assert(l == NULL);
+ l = cbs_assembly_add_page(assembly, &dec1);
+ g_assert(l == NULL);
+
+ dec1.page = 1;
+ l = cbs_assembly_add_page(assembly, &dec1);
+ g_assert(l);
+
+ utf8 = cbs_decode_text(l, iso639_lang);
+
+ g_assert(utf8);
+
+ if (g_test_verbose()) {
+ g_printf("%s\n", utf8);
+ if (iso639_lang[0] == '\0')
+ g_printf("Lang: Unspecified\n");
+ else
+ g_printf("Lang: %s\n", iso639_lang);
+ }
+
+ g_assert(strcmp(utf8, "BelconnenFraserBelconnen") == 0);
+
+ g_free(utf8);
+ g_slist_foreach(l, (GFunc)g_free, NULL);
+ g_slist_free(l);
+
+ cbs_assembly_free(assembly);
+}
+
int main(int argc, char **argv)
{
g_test_init(&argc, &argv, NULL);
@@ -926,6 +1018,7 @@ int main(int argc, char **argv)
g_test_add_func("/testsms/Test CBS Encode / Decode",
test_cbs_encode_decode);
+ g_test_add_func("/testsms/Test CBS Assembly", test_cbs_assembly);
return g_test_run();
}