@@ -19,6 +19,7 @@ import {
1919 reservedMarkerSimpleTypeKey ,
2020 reservedTileLabelsKey ,
2121 revertMergeTreeDeltaRevertibles ,
22+ type ISegmentInternal ,
2223} from "@fluidframework/merge-tree/internal" ;
2324import {
2425 MockContainerRuntimeFactory ,
@@ -187,6 +188,35 @@ describe("SharedString", () => {
187188 }
188189 } ) ;
189190
191+ it ( "can annotate single multi-character segment in a local SharedString" , ( ) => {
192+ sharedString . insertText ( 0 , "Blocker" ) ;
193+ sharedString . annotateRange ( 0 , 7 , { bold : true } ) ;
194+ let segmentCount = 0 ;
195+ const segmentLengths : number [ ] = [ ] ;
196+ sharedString . walkSegments (
197+ ( segment : ISegmentInternal ) => {
198+ segmentCount ++ ;
199+ segmentLengths . push ( segment . cachedLength ) ;
200+ return true ;
201+ } ,
202+ 0 ,
203+ sharedString . getLength ( ) ,
204+ undefined ,
205+ true ,
206+ ) ;
207+ assert . equal ( segmentCount , 1 , `Expected one segment, saw ${ segmentCount } segments` ) ;
208+ assert . equal (
209+ segmentLengths . length ,
210+ 1 ,
211+ `Expected one segment length, saw ${ segmentLengths . length } lengths` ,
212+ ) ;
213+ assert . equal (
214+ segmentLengths [ 0 ] ,
215+ 7 ,
216+ `Expected segment length 7, saw ${ segmentLengths [ 0 ] } ` ,
217+ ) ;
218+ } ) ;
219+
190220 it ( "can insert marker" , ( ) => {
191221 sharedString . insertText ( 0 , "hello world" ) ;
192222 // Insert a simple marker.
@@ -575,6 +605,62 @@ describe("SharedString", () => {
575605 }
576606 } ) ;
577607
608+ it ( "can annotate single multi-character segment with a remote SharedString" , ( ) => {
609+ sharedString . insertText ( 0 , "Blocker" ) ;
610+ sharedString . annotateRange ( 0 , 7 , { bold : true } ) ;
611+ containerRuntimeFactory . processAllMessages ( ) ;
612+
613+ let segmentCount = 0 ;
614+ const segmentLengths : number [ ] = [ ] ;
615+ sharedString . walkSegments (
616+ ( segment : ISegmentInternal ) => {
617+ segmentCount ++ ;
618+ segmentLengths . push ( segment . cachedLength ) ;
619+ return true ;
620+ } ,
621+ 0 ,
622+ sharedString . getLength ( ) ,
623+ undefined ,
624+ true ,
625+ ) ;
626+ assert . equal ( segmentCount , 1 , `Expected one segment, saw ${ segmentCount } segments` ) ;
627+ assert . equal (
628+ segmentLengths . length ,
629+ 1 ,
630+ `Expected one segment length, saw ${ segmentLengths . length } lengths` ,
631+ ) ;
632+ assert . equal (
633+ segmentLengths [ 0 ] ,
634+ 7 ,
635+ `Expected segment length 7, saw ${ segmentLengths [ 0 ] } ` ,
636+ ) ;
637+
638+ segmentCount = 0 ;
639+ const segmentLengths2 : number [ ] = [ ] ;
640+ sharedString2 . walkSegments (
641+ ( segment : ISegmentInternal ) => {
642+ segmentCount ++ ;
643+ segmentLengths2 . push ( segment . cachedLength ) ;
644+ return true ;
645+ } ,
646+ 0 ,
647+ sharedString . getLength ( ) ,
648+ undefined ,
649+ true ,
650+ ) ;
651+ assert . equal ( segmentCount , 1 , `Expected one segment, saw ${ segmentCount } segments` ) ;
652+ assert . equal (
653+ segmentLengths2 . length ,
654+ 1 ,
655+ `Expected one segment length, saw ${ segmentLengths2 . length } lengths` ,
656+ ) ;
657+ assert . equal (
658+ segmentLengths2 [ 0 ] ,
659+ 7 ,
660+ `Expected segment length 7, saw ${ segmentLengths2 [ 0 ] } ` ,
661+ ) ;
662+ } ) ;
663+
578664 it ( "can insert marker" , ( ) => {
579665 const label = "tileLabel" ;
580666 const id = "tileMarkerId" ;
0 commit comments