[test/buffer] Add initial utf-8 tests
This commit is contained in:
parent
aafe395ab5
commit
dfec67f958
|
@ -140,7 +140,30 @@ hb_test_add_func_flavor (const char *test_path,
|
||||||
hb_test_add_func (path, test_func);
|
hb_test_add_func (path, test_func);
|
||||||
g_free (path);
|
g_free (path);
|
||||||
}
|
}
|
||||||
#define hb_test_add_flavor(Func, Flavor) hb_test_add_func (#Func, Flavor, Func)
|
#define hb_test_add_flavor(Flavor, Func) hb_test_add_func (#Func, Flavor, Func)
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
hb_test_add_data_func (const char *test_path,
|
||||||
|
gconstpointer test_data,
|
||||||
|
GTestDataFunc test_func)
|
||||||
|
{
|
||||||
|
char *normal_path = hb_test_normalize_path (test_path);
|
||||||
|
g_test_add_data_func (normal_path, test_data, test_func);
|
||||||
|
g_free (normal_path);
|
||||||
|
}
|
||||||
|
#define hb_test_add_data(Func, UserData) hb_test_add_data_func (#Func, UserData, Func)
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
hb_test_add_data_func_flavor (const char *test_path,
|
||||||
|
const char *flavor,
|
||||||
|
gconstpointer test_data,
|
||||||
|
GTestDataFunc test_func)
|
||||||
|
{
|
||||||
|
char *path = g_strdup_printf ("%s/%s", test_path, flavor);
|
||||||
|
hb_test_add_data_func (path, test_data, test_func);
|
||||||
|
g_free (path);
|
||||||
|
}
|
||||||
|
#define hb_test_add_data_flavor(UserData, Flavor, Func) hb_test_add_data_func_flavor (#Func, Flavor, UserData, Func)
|
||||||
|
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
|
|
@ -33,6 +33,21 @@ static const char utf8[10] = "ab\360\240\200\200defg";
|
||||||
static const uint16_t utf16[8] = {'a', 'b', 0xD840, 0xDC00, 'd', 'e', 'f', 'g'};
|
static const uint16_t utf16[8] = {'a', 'b', 0xD840, 0xDC00, 'd', 'e', 'f', 'g'};
|
||||||
static const uint32_t utf32[7] = {'a', 'b', 0x20000, 'd', 'e', 'f', 'g'};
|
static const uint32_t utf32[7] = {'a', 'b', 0x20000, 'd', 'e', 'f', 'g'};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
const char utf8[8];
|
||||||
|
const uint32_t codepoints[8];
|
||||||
|
} utf8_test_t;
|
||||||
|
|
||||||
|
|
||||||
|
/* note: we skip the first and last byte when adding to buffer */
|
||||||
|
static const utf8_test_t utf8_tests[] = {
|
||||||
|
{"a\303\207", {-1}},
|
||||||
|
{"a\303\207b", {0xC7}},
|
||||||
|
{"ab\303cd", {'b', -1, 'c'}}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BUFFER_EMPTY,
|
BUFFER_EMPTY,
|
||||||
BUFFER_ONE_BY_ONE,
|
BUFFER_ONE_BY_ONE,
|
||||||
|
@ -315,11 +330,34 @@ test_buffer_allocation (fixture_t *fixture, gconstpointer user_data)
|
||||||
g_assert (hb_buffer_allocation_successful (fixture->b));
|
g_assert (hb_buffer_allocation_successful (fixture->b));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_buffer_utf8 (gconstpointer user_data)
|
||||||
|
{
|
||||||
|
const utf8_test_t *test = user_data;
|
||||||
|
hb_buffer_t *b;
|
||||||
|
hb_glyph_info_t *glyphs;
|
||||||
|
unsigned int bytes, chars, i, len;
|
||||||
|
|
||||||
|
bytes = strlen (test->utf8);
|
||||||
|
for (chars = 0; test->codepoints[chars]; chars++)
|
||||||
|
;
|
||||||
|
|
||||||
|
b = hb_buffer_create (0);
|
||||||
|
hb_buffer_add_utf8 (b, test->utf8, bytes, 1, bytes - 2);
|
||||||
|
|
||||||
|
glyphs = hb_buffer_get_glyph_infos (b, &len);
|
||||||
|
g_assert_cmpint (len, ==, chars);
|
||||||
|
for (i = 0; i < chars; i++)
|
||||||
|
g_assert_cmphex (glyphs[i].codepoint, ==, test->codepoints[i]);
|
||||||
|
|
||||||
|
hb_buffer_destroy (b);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
int i;
|
unsigned int i;
|
||||||
|
|
||||||
hb_test_init (&argc, &argv);
|
hb_test_init (&argc, &argv);
|
||||||
|
|
||||||
|
@ -335,6 +373,12 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
hb_test_add_fixture (fixture, GINT_TO_POINTER (BUFFER_EMPTY), test_buffer_allocation);
|
hb_test_add_fixture (fixture, GINT_TO_POINTER (BUFFER_EMPTY), test_buffer_allocation);
|
||||||
|
|
||||||
|
for (i = 0; i < G_N_ELEMENTS (utf8_tests); i++)
|
||||||
|
{
|
||||||
|
char *flavor = g_strdup_printf ("%d", i);
|
||||||
|
hb_test_add_data_flavor (&utf8_tests[i], flavor, test_buffer_utf8);
|
||||||
|
g_free (flavor);
|
||||||
|
}
|
||||||
/* XXX test invalid UTF-8 / UTF-16 text input (also overlong sequences) */
|
/* XXX test invalid UTF-8 / UTF-16 text input (also overlong sequences) */
|
||||||
|
|
||||||
return hb_test_run();
|
return hb_test_run();
|
||||||
|
|
Loading…
Reference in New Issue