|
@@ -175,16 +175,96 @@ TEST_SUITE("[TextServer]") {
|
|
|
|
|
|
RID font1 = ts->create_font();
|
|
|
ts->font_set_data_ptr(font1, _font_NotoSans_Regular, _font_NotoSans_Regular_size);
|
|
|
+ ts->font_set_allow_system_fallback(font1, false);
|
|
|
RID font2 = ts->create_font();
|
|
|
ts->font_set_data_ptr(font2, _font_NotoSansThaiUI_Regular, _font_NotoSansThaiUI_Regular_size);
|
|
|
+ ts->font_set_allow_system_fallback(font2, false);
|
|
|
RID font3 = ts->create_font();
|
|
|
ts->font_set_data_ptr(font3, _font_NotoNaskhArabicUI_Regular, _font_NotoNaskhArabicUI_Regular_size);
|
|
|
+ ts->font_set_allow_system_fallback(font3, false);
|
|
|
|
|
|
Array font;
|
|
|
font.push_back(font1);
|
|
|
font.push_back(font2);
|
|
|
font.push_back(font3);
|
|
|
|
|
|
+ {
|
|
|
+ RID ctx = ts->create_shaped_text();
|
|
|
+ CHECK_FALSE_MESSAGE(ctx == RID(), "Creating text buffer failed.");
|
|
|
+ ts->shaped_text_add_string(ctx, U"Xtest", font, 10);
|
|
|
+ ts->shaped_text_add_string(ctx, U"xs", font, 10);
|
|
|
+ RID sctx = ts->shaped_text_substr(ctx, 1, 5);
|
|
|
+ CHECK_FALSE_MESSAGE(sctx == RID(), "Creating substring text buffer failed.");
|
|
|
+ PackedInt32Array sbrk = ts->shaped_text_get_character_breaks(sctx);
|
|
|
+ CHECK_FALSE_MESSAGE(sbrk.size() != 5, "Invalid substring char breaks number.");
|
|
|
+ if (sbrk.size() == 5) {
|
|
|
+ CHECK_FALSE_MESSAGE(sbrk[0] != 2, "Invalid substring char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(sbrk[1] != 3, "Invalid substring char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(sbrk[2] != 4, "Invalid substring char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(sbrk[3] != 5, "Invalid substring char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(sbrk[4] != 6, "Invalid substring char break position.");
|
|
|
+ }
|
|
|
+ PackedInt32Array fbrk = ts->shaped_text_get_character_breaks(ctx);
|
|
|
+ CHECK_FALSE_MESSAGE(fbrk.size() != 7, "Invalid char breaks number.");
|
|
|
+ if (fbrk.size() == 7) {
|
|
|
+ CHECK_FALSE_MESSAGE(fbrk[0] != 1, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(fbrk[1] != 2, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(fbrk[2] != 3, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(fbrk[3] != 4, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(fbrk[4] != 5, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(fbrk[5] != 6, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(fbrk[6] != 7, "Invalid char break position.");
|
|
|
+ }
|
|
|
+ PackedInt32Array rbrk = ts->string_get_character_breaks(U"Xtestxs");
|
|
|
+ CHECK_FALSE_MESSAGE(rbrk.size() != 7, "Invalid char breaks number.");
|
|
|
+ if (rbrk.size() == 7) {
|
|
|
+ CHECK_FALSE_MESSAGE(rbrk[0] != 1, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(rbrk[1] != 2, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(rbrk[2] != 3, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(rbrk[3] != 4, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(rbrk[4] != 5, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(rbrk[5] != 6, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(rbrk[6] != 7, "Invalid char break position.");
|
|
|
+ }
|
|
|
+
|
|
|
+ ts->free_rid(sctx);
|
|
|
+ ts->free_rid(ctx);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ts->has_feature(TextServer::FEATURE_BREAK_ITERATORS)) {
|
|
|
+ RID ctx = ts->create_shaped_text();
|
|
|
+ CHECK_FALSE_MESSAGE(ctx == RID(), "Creating text buffer failed.");
|
|
|
+ ts->shaped_text_add_string(ctx, U"X❤️🔥", font, 10);
|
|
|
+ ts->shaped_text_add_string(ctx, U"xs", font, 10);
|
|
|
+ RID sctx = ts->shaped_text_substr(ctx, 1, 5);
|
|
|
+ CHECK_FALSE_MESSAGE(sctx == RID(), "Creating substring text buffer failed.");
|
|
|
+ PackedInt32Array sbrk = ts->shaped_text_get_character_breaks(sctx);
|
|
|
+ CHECK_FALSE_MESSAGE(sbrk.size() != 2, "Invalid substring char breaks number.");
|
|
|
+ if (sbrk.size() == 2) {
|
|
|
+ CHECK_FALSE_MESSAGE(sbrk[0] != 5, "Invalid substring char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(sbrk[1] != 6, "Invalid substring char break position.");
|
|
|
+ }
|
|
|
+ PackedInt32Array fbrk = ts->shaped_text_get_character_breaks(ctx);
|
|
|
+ CHECK_FALSE_MESSAGE(fbrk.size() != 4, "Invalid char breaks number.");
|
|
|
+ if (fbrk.size() == 4) {
|
|
|
+ CHECK_FALSE_MESSAGE(fbrk[0] != 1, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(fbrk[1] != 5, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(fbrk[2] != 6, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(fbrk[3] != 7, "Invalid char break position.");
|
|
|
+ }
|
|
|
+ PackedInt32Array rbrk = ts->string_get_character_breaks(U"X❤️🔥xs");
|
|
|
+ CHECK_FALSE_MESSAGE(rbrk.size() != 4, "Invalid char breaks number.");
|
|
|
+ if (rbrk.size() == 4) {
|
|
|
+ CHECK_FALSE_MESSAGE(rbrk[0] != 1, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(rbrk[1] != 5, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(rbrk[2] != 6, "Invalid char break position.");
|
|
|
+ CHECK_FALSE_MESSAGE(rbrk[3] != 7, "Invalid char break position.");
|
|
|
+ }
|
|
|
+
|
|
|
+ ts->free_rid(sctx);
|
|
|
+ ts->free_rid(ctx);
|
|
|
+ }
|
|
|
+
|
|
|
{
|
|
|
String test = U"Test test long text long text\n";
|
|
|
RID ctx = ts->create_shaped_text();
|