X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=test%2Fapi%2Ftest-buffer.c;h=4b48d5c7838caceaa6e1919886e95c3506fbd39b;hb=8b9bac85deb2ace750acafa5e0da676f633aadeb;hp=228f0f3270e4ae0abb05ce194355b17e0f56e311;hpb=fe65a6a32ba3654c532639ba656bd66b041d7dc6;p=platform%2Fupstream%2Fharfbuzz.git diff --git a/test/api/test-buffer.c b/test/api/test-buffer.c index 228f0f3..4b48d5c 100644 --- a/test/api/test-buffer.c +++ b/test/api/test-buffer.c @@ -71,7 +71,7 @@ fixture_init (fixture_t *fixture, gconstpointer user_data) case BUFFER_ONE_BY_ONE: for (i = 1; i < G_N_ELEMENTS (utf32) - 1; i++) - hb_buffer_add (b, utf32[i], i); + hb_buffer_add (b, utf32[i], i); break; case BUFFER_UTF32: @@ -856,6 +856,74 @@ test_buffer_empty (void) g_assert (!hb_buffer_allocation_successful (b)); } +typedef struct { + const char *contents; + hb_buffer_serialize_format_t format; + unsigned int num_items; + hb_bool_t success; +} serialization_test_t; + +static const serialization_test_t serialization_tests[] = { + { "", HB_BUFFER_SERIALIZE_FORMAT_TEXT, 2, 1 }, + { "[{\"u\":1600,\"cl\":0},{\"u\":1589,\"cl\":1}]", HB_BUFFER_SERIALIZE_FORMAT_JSON, 2, 1 }, + + /* Mixed glyphs/Unicodes -> parse fail */ + { "[{\"u\":1600,\"cl\":0},{\"g\":1589,\"cl\":1}]", HB_BUFFER_SERIALIZE_FORMAT_JSON, 0, 0 }, + { "", HB_BUFFER_SERIALIZE_FORMAT_TEXT, 0, 0 }, +}; + +static void +test_buffer_serialize_deserialize (void) +{ + hb_buffer_t *b; + unsigned int i; + + for (i = 0; i < G_N_ELEMENTS (serialization_tests); i++) + { + unsigned int consumed; + char round_trip[1024]; + + b = hb_buffer_create (); + hb_buffer_set_replacement_codepoint (b, (hb_codepoint_t) -1); + + const serialization_test_t *test = &serialization_tests[i]; + g_test_message ("serialize test #%d", i); + + (void) hb_buffer_deserialize_unicode (b, test->contents, -1, NULL, test->format); + + // Expected parse failure, got one, don't round-trip + if (test->success != 0) + { + unsigned int num_glyphs = hb_buffer_get_length (b); + g_assert_cmpint (num_glyphs, ==, test->num_items); + + hb_buffer_serialize_unicode (b, 0, num_glyphs, round_trip, + sizeof(round_trip), &consumed, test->format, + HB_BUFFER_SERIALIZE_FLAG_DEFAULT); + g_assert_cmpstr (round_trip, ==, test->contents); + } + + hb_buffer_destroy (b); + + } + + char test[1024]; + unsigned int consumed; + hb_buffer_t *indeterminate = hb_buffer_get_empty (); + hb_buffer_serialize (indeterminate, 0, (unsigned) -1, + test, sizeof(test), &consumed, NULL, + HB_BUFFER_SERIALIZE_FORMAT_JSON, + HB_BUFFER_SERIALIZE_FLAG_DEFAULT); + g_assert_cmpstr ( test, ==, "[]"); + + hb_buffer_serialize (indeterminate, 0, (unsigned) - 1, + test, sizeof(test), &consumed, NULL, + HB_BUFFER_SERIALIZE_FORMAT_TEXT, + HB_BUFFER_SERIALIZE_FLAG_DEFAULT); + g_assert_cmpstr ( test, ==, "!!"); + +} + int main (int argc, char **argv) { @@ -880,6 +948,7 @@ main (int argc, char **argv) hb_test_add (test_buffer_utf16_conversion); hb_test_add (test_buffer_utf32_conversion); hb_test_add (test_buffer_empty); + hb_test_add (test_buffer_serialize_deserialize); return hb_test_run(); }