@ -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 ( ) ;