diff --git a/tests/util/guac_unicode.c b/tests/util/guac_unicode.c index 2d2d7891..162813e9 100644 --- a/tests/util/guac_unicode.c +++ b/tests/util/guac_unicode.c @@ -42,6 +42,9 @@ void test_guac_unicode() { + int codepoint; + char buffer[16]; + /* Test character length */ CU_ASSERT_EQUAL(1, guac_utf8_charsize(UTF8_1b[0])); CU_ASSERT_EQUAL(2, guac_utf8_charsize(UTF8_2b[0])); @@ -60,8 +63,35 @@ void test_guac_unicode() { CU_ASSERT_EQUAL(5, guac_utf8_strlen("hello")); CU_ASSERT_EQUAL(9, guac_utf8_strlen("guacamole")); - /*int guac_utf8_write(int codepoint, char* utf8, int length); - int guac_utf8_read(const char* utf8, int length, int* codepoint);*/ + /* Test writes */ + CU_ASSERT_EQUAL(1, guac_utf8_write(0x00065, &(buffer[0]), 10)); + CU_ASSERT_EQUAL(2, guac_utf8_write(0x00654, &(buffer[1]), 9)); + CU_ASSERT_EQUAL(3, guac_utf8_write(0x00876, &(buffer[3]), 7)); + CU_ASSERT_EQUAL(4, guac_utf8_write(0x12345, &(buffer[6]), 4)); + CU_ASSERT_EQUAL(0, guac_utf8_write(0x00066, &(buffer[10]), 0)); + + /* Test result of write */ + CU_ASSERT(memcmp("\x65", &(buffer[0]), 1) == 0); /* U+0065 */ + CU_ASSERT(memcmp("\xD9\x94", &(buffer[1]), 2) == 0); /* U+0654 */ + CU_ASSERT(memcmp("\xE0\xA1\xB6", &(buffer[3]), 3) == 0); /* U+0876 */ + CU_ASSERT(memcmp("\xF0\x92\x8D\x85", &(buffer[6]), 4) == 0); /* U+12345 */ + + /* Test reads */ + + CU_ASSERT_EQUAL(1, guac_utf8_read(&(buffer[0]), 10, &codepoint)); + CU_ASSERT_EQUAL(0x0065, codepoint); + + CU_ASSERT_EQUAL(2, guac_utf8_read(&(buffer[1]), 9, &codepoint)); + CU_ASSERT_EQUAL(0x0654, codepoint); + + CU_ASSERT_EQUAL(3, guac_utf8_read(&(buffer[3]), 7, &codepoint)); + CU_ASSERT_EQUAL(0x0876, codepoint); + + CU_ASSERT_EQUAL(4, guac_utf8_read(&(buffer[6]), 4, &codepoint)); + CU_ASSERT_EQUAL(0x12345, codepoint); + + CU_ASSERT_EQUAL(0, guac_utf8_read(&(buffer[10]), 0, &codepoint)); + CU_ASSERT_EQUAL(0x12345, codepoint); }