On 21 June 2010 15:06, Kristen Carlson Accardi <kristen(a)linux.intel.com> wrote:
diff --git a/unit/test-stkutil.c b/unit/test-stkutil.c
index c586a7b..21fd02d 100644
--- a/unit/test-stkutil.c
+++ b/unit/test-stkutil.c
@@ -28,6 +28,9 @@
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
+#include <fcntl.h>
+
+#include <sys/stat.h>
#include <glib.h>
#include <glib/gprintf.h>
@@ -508,6 +511,7 @@ struct display_text_test {
struct stk_duration duration;
struct stk_text_attribute text_attr;
struct stk_frame_id frame_id;
+ const char *test_name;
};
unsigned char display_text_111[] = { 0xD0, 0x1A, 0x81, 0x03, 0x01, 0x21, 0x80,
@@ -603,6 +607,69 @@ unsigned char display_text_711[] = { 0xD0, 0x19, 0x81, 0x03, 0x01,
0x21, 0x80,
0x63, 0x6F, 0x6E, 0x64, 0x84, 0x02,
0x01, 0x0A };
+unsigned char display_text_811[] = { 0xD0, 0x22, 0x81, 0x03, 0x01, 0x21, 0x80,
+ 0x82, 0x02, 0x81, 0x02, 0x8D, 0x11,
+ 0x04, 0x54, 0x65, 0x78, 0x74, 0x20,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x31, 0xD0,
+ 0x04, 0x00, 0x10, 0x00, 0xB4 };
+
+unsigned char display_text_821[] = { 0xD0, 0x22, 0x81, 0x03, 0x01, 0x21, 0x80,
+ 0x82, 0x02, 0x81, 0x02, 0x8D, 0x11,
+ 0x04, 0x54, 0x65, 0x78, 0x74, 0x20,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x31, 0xD0,
+ 0x04, 0x00, 0x10, 0x01, 0xB4 };
+
+unsigned char display_text_831[] = { 0xD0, 0x22, 0x81, 0x03, 0x01, 0x21, 0x80,
+ 0x82, 0x02, 0x81, 0x02, 0x8D, 0x11,
+ 0x04, 0x54, 0x65, 0x78, 0x74, 0x20,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x31, 0xD0,
+ 0x04, 0x00, 0x10, 0x02, 0xB4 };
+
+unsigned char display_text_841[] = { 0xD0, 0x22, 0x81, 0x03, 0x01, 0x21, 0x80,
+ 0x82, 0x02, 0x81, 0x02, 0x8D, 0x11,
+ 0x04, 0x54, 0x65, 0x78, 0x74, 0x20,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x31, 0xD0,
+ 0x04, 0x00, 0x10, 0x04, 0xB4 };
+
+unsigned char display_text_851[] = { 0xD0, 0x22, 0x81, 0x03, 0x01, 0x21, 0x80,
+ 0x82, 0x02, 0x81, 0x02, 0x8D, 0x11,
+ 0x04, 0x54, 0x65, 0x78, 0x74, 0x20,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x31, 0xD0,
+ 0x04, 0x00, 0x10, 0x08, 0xB4 };
+
+unsigned char display_text_861[] = { 0xD0, 0x22, 0x81, 0x03, 0x01, 0x21, 0x80,
+ 0x82, 0x02, 0x81, 0x02, 0x8D, 0x11,
+ 0x04, 0x54, 0x65, 0x78, 0x74, 0x20,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x31, 0xD0,
+ 0x04, 0x00, 0x10, 0x10, 0xB4 };
+
+unsigned char display_text_871[] = { 0xD0, 0x22, 0x81, 0x03, 0x01, 0x21, 0x80,
+ 0x82, 0x02, 0x81, 0x02, 0x8D, 0x11,
+ 0x04, 0x54, 0x65, 0x78, 0x74, 0x20,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x31, 0xD0,
+ 0x04, 0x00, 0x10, 0x20, 0xB4 };
+
+unsigned char display_text_881[] = { 0xD0, 0x22, 0x81, 0x03, 0x01, 0x21, 0x80,
+ 0x82, 0x02, 0x81, 0x02, 0x8D, 0x11,
+ 0x04, 0x54, 0x65, 0x78, 0x74, 0x20,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x31, 0xD0,
+ 0x04, 0x00, 0x10, 0x40, 0xB4 };
+
+unsigned char display_text_891[] = { 0xD0, 0x22, 0x81, 0x03, 0x01, 0x21, 0x80,
+ 0x82, 0x02, 0x81, 0x02, 0x8D, 0x11,
+ 0x04, 0x54, 0x65, 0x78, 0x74, 0x20,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x20, 0x31, 0xD0,
+ 0x04, 0x00, 0x10, 0x80, 0xB4 };
+
unsigned char display_text_911[] = { 0xD0, 0x10, 0x81, 0x03, 0x01, 0x21, 0x80,
0x82, 0x02, 0x81, 0x02, 0x8D, 0x05,
0x08, 0x4F, 0x60, 0x59, 0x7D };
@@ -708,6 +775,114 @@ static struct display_text_test display_text_data_711 = {
}
};
+static struct display_text_test display_text_data_811 = {
+ .pdu = display_text_811,
+ .pdu_len = sizeof(display_text_811),
+ .qualifier = 0x80,
+ .text = "Text Attribute 1",
+ .text_attr = {
+ .len = 4,
+ .attributes = { 0x00, 0x10, 0x00, 0xB4 },
+ },
+ .test_name = "811.html",
+};
+
+static struct display_text_test display_text_data_821 = {
+ .pdu = display_text_821,
+ .pdu_len = sizeof(display_text_821),
+ .qualifier = 0x80,
+ .text = "Text Attribute 1",
+ .text_attr = {
+ .len = 4,
+ .attributes = { 0x00, 0x10, 0x01, 0xB4 },
+ },
+ .test_name = "821.html",
+};
+
+static struct display_text_test display_text_data_831 = {
+ .pdu = display_text_831,
+ .pdu_len = sizeof(display_text_831),
+ .qualifier = 0x80,
+ .text = "Text Attribute 1",
+ .text_attr = {
+ .len = 4,
+ .attributes = { 0x00, 0x10, 0x02, 0xB4 },
+ },
+ .test_name = "831.html",
+};
+
+static struct display_text_test display_text_data_841 = {
+ .pdu = display_text_841,
+ .pdu_len = sizeof(display_text_841),
+ .qualifier = 0x80,
+ .text = "Text Attribute 1",
+ .text_attr = {
+ .len = 4,
+ .attributes = { 0x00, 0x10, 0x04, 0xB4 },
+ },
+ .test_name = "841.html",
+};
+
+static struct display_text_test display_text_data_851 = {
+ .pdu = display_text_851,
+ .pdu_len = sizeof(display_text_851),
+ .qualifier = 0x80,
+ .text = "Text Attribute 1",
+ .text_attr = {
+ .len = 4,
+ .attributes = { 0x00, 0x10, 0x08, 0xB4 },
+ },
+ .test_name = "851.html",
+};
+
+static struct display_text_test display_text_data_861 = {
+ .pdu = display_text_861,
+ .pdu_len = sizeof(display_text_861),
+ .qualifier = 0x80,
+ .text = "Text Attribute 1",
+ .text_attr = {
+ .len = 4,
+ .attributes = { 0x00, 0x10, 0x10, 0xB4 },
+ },
+ .test_name = "861.html",
+};
+
+static struct display_text_test display_text_data_871 = {
+ .pdu = display_text_871,
+ .pdu_len = sizeof(display_text_871),
+ .qualifier = 0x80,
+ .text = "Text Attribute 1",
+ .text_attr = {
+ .len = 4,
+ .attributes = { 0x00, 0x10, 0x20, 0xB4 },
+ },
+ .test_name = "871.html",
+};
+
+static struct display_text_test display_text_data_881 = {
+ .pdu = display_text_881,
+ .pdu_len = sizeof(display_text_881),
+ .qualifier = 0x80,
+ .text = "Text Attribute 1",
+ .text_attr = {
+ .len = 4,
+ .attributes = { 0x00, 0x10, 0x40, 0xB4 },
+ },
+ .test_name = "881.html",
+};
+
+static struct display_text_test display_text_data_891 = {
+ .pdu = display_text_891,
+ .pdu_len = sizeof(display_text_891),
+ .qualifier = 0x80,
+ .text = "Text Attribute 1",
+ .text_attr = {
+ .len = 4,
+ .attributes = { 0x00, 0x10, 0x80, 0xB4 },
+ },
+ .test_name = "891.html",
+};
+
static struct display_text_test display_text_data_911 = {
.pdu = display_text_911,
.pdu_len = sizeof(display_text_911),
@@ -722,6 +897,58 @@ static struct display_text_test display_text_data_1011 = {
.text = "80ル"
};
+static void do_html_test(char *text, int text_len, const unsigned char *attrs,
+ int attrs_len, const char *filename)
+{
+ int fd;
+ char html_header[] = "<html><body>";
+ char html_close[] = "</body></html>";
+ char *html;
+ ssize_t bytes_written;
+
+ if (filename == NULL)
+ return;
+
+ /* open output file */
+ fd = open(filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR |
+ S_IRGRP | S_IROTH);
+ if (fd < 0) {
+ g_print("unable to open %s\n", filename);
+ return;
+ }
+
+ bytes_written = write(fd, html_header, strlen(html_header));
+ html = stk_text_to_html(text, text_len, attrs, attrs_len);
+ bytes_written = write(fd, html, strlen(html));
+ bytes_written = write(fd, html_close, strlen(html_close));
+ close(fd);
+ g_free(html);
+}
+
+static void test_html1(gconstpointer data)
+{
+ char html_test[] = "EMS messages can contain italic, bold,"
+ " large, small and colored text";
+ const unsigned char attrs[] = { 0x19, 0x06, 0x20, 0x00,
+ 0x21, 0x04, 0x10, 0x00,
+ 0x27, 0x05, 0x04, 0x00,
+ 0x2E, 0x05, 0x08, 0x00,
+ 0x38, 0x07, 0x00, 0x2B };
+ const char filename[] = "html1.html";
+
+ do_html_test(html_test, strlen(html_test), attrs, 20, filename);
+}
+
+static void test_html2(gconstpointer data)
+{
+ char html_test[] = "Blue green green green";
+ const unsigned char attrs[] = { 0x00, 0x00, 0x00, 0x94,
+ 0x00, 0x04, 0x00, 0x96 };
+ const char filename[] = "html2.html";
+
+ do_html_test(html_test, strlen(html_test), attrs, 8, filename);
+}
+
/* Defined in TS 102.384 Section 27.22.4.1 */
static void test_display_text(gconstpointer data)
{
@@ -747,6 +974,14 @@ static void test_display_text(gconstpointer data)
check_duration(&command->display_text.duration, &test->duration);
check_text_attr(&command->display_text.text_attr,
&test->text_attr);
+
+ if (command->display_text.text_attr.len > 0)
+ do_html_test(command->display_text.text,
+ strlen(command->display_text.text),
+ command->display_text.text_attr.attributes,
+ command->display_text.text_attr.len,
+ test->test_name);
+
check_frame_id(&command->display_text.frame_id, &test->frame_id);
stk_command_free(command);
@@ -21913,6 +22148,28 @@ int main(int argc, char **argv)
&display_text_data_611, test_display_text);
g_test_add_data_func("/teststk/Display Text 7.1.1",
&display_text_data_711, test_display_text);
+ g_test_add_data_func("/teststk/HTML test 1",
+ NULL, test_html1);
+ g_test_add_data_func("/teststk/HTML test 2",
+ NULL, test_html2);
+ g_test_add_data_func("/teststk/Display Text 8.1.1",
+ &display_text_data_811, test_display_text);
+ g_test_add_data_func("/teststk/Display Text 8.2.1",
+ &display_text_data_821, test_display_text);
+ g_test_add_data_func("/teststk/Display Text 8.3.1",
+ &display_text_data_831, test_display_text);
+ g_test_add_data_func("/teststk/Display Text 8.4.1",
+ &display_text_data_841, test_display_text);
+ g_test_add_data_func("/teststk/Display Text 8.5.1",
+ &display_text_data_851, test_display_text);
+ g_test_add_data_func("/teststk/Display Text 8.6.1",
+ &display_text_data_861, test_display_text);
+ g_test_add_data_func("/teststk/Display Text 8.7.1",
+ &display_text_data_871, test_display_text);
+ g_test_add_data_func("/teststk/Display Text 8.8.1",
+ &display_text_data_881, test_display_text);
+ g_test_add_data_func("/teststk/Display Text 8.9.1",
+ &display_text_data_891, test_display_text);
The unit tests can probably do whatever they want, but in my opinion
they should fail if anything is wrong with the tested function, while
this code never calls g_assert. You should probably include the
expected html with each test and do strcmp (I agree this is not ideal
because there are many valid results, but it'll at least force someone
who sends a patch to run and update the tests).
Regards