static void test_to_utf16(void) { uint16_t *res; uint32_t res_len; printf("to utf16: all ASCII\n"); { const char *in = "Hello, world!"; const uint16_t out[] = {0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x21 }; res_len = 7777; res = ppb_char_set_char_set_to_utf16(instance, in, strlen(in), "UTF-8", PP_CHARSET_CONVERSIONERROR_FAIL, &res_len); assert(res_len == sizeof(out) / sizeof(uint16_t)); assert(memcmp(res, out, sizeof(out)) == 0); free(res); } printf("to utf16: basic UTF-8\n"); { const char *in = "Привет, мир!"; const uint16_t out[] = {0x41f, 0x440, 0x438, 0x432, 0x435, 0x442, 0x2c, 0x20, 0x43c, 0x438, 0x440, 0x21 }; res_len = 7777; res = ppb_char_set_char_set_to_utf16(instance, in, strlen(in), "UTF-8", PP_CHARSET_CONVERSIONERROR_FAIL, &res_len); assert(res_len == sizeof(out) / sizeof(out[0])); assert(memcmp(res, out, sizeof(out)) == 0); free(res); } printf("to utf16: wrong UTF-8 with error\n"); { const char *in = "Hel\x80lo"; res_len = 7777; res = ppb_char_set_char_set_to_utf16(instance, in, strlen(in), "UTF-8", PP_CHARSET_CONVERSIONERROR_FAIL, &res_len); assert(res_len == 0); assert(res == NULL); free(res); } // testing PP_CHARSET_CONVERSIONERROR_SKIP or PP_CHARSET_CONVERSIONERROR_SUBSTITUTE // have no much sense since every unicode character can be represented in UTF-16 }
TRACE_WRAPPER uint16_t * trace_ppb_char_set_char_set_to_utf16(PP_Instance instance, const char *input, uint32_t input_len, const char *input_char_set, enum PP_CharSet_ConversionError on_error, uint32_t *output_length) { trace_info("[PPB] {full} %s instance=%d, input=%.*s, input_len=%u, input_char_set=%s, " "on_error=%s\n", __func__+6, instance, input_len, input, input_len, input_char_set, reverse_char_set_conversion_error(on_error)); return ppb_char_set_char_set_to_utf16(instance, input, input_len, input_char_set, on_error, output_length); }