@startuml LineEditor

skinparam DefaultFontName Fira Code

!definelong obj(id, txt, i)
  object "~#1:LineEditor" as id
  id : text = txt
  id : insertionIndex = i
!enddefinelong

!define to(id1, id2, txt) id1 ..> id2 : txt
!define self(id, txt) id ..> id : "txt"


obj(A, '""', 0)
obj(B, "test", 0)
obj(C, "test", 1)
obj(D, "test", 0)
obj(E, "test", 2)
obj(F, "tet", 2)
obj(G, "tt", 1)
obj(H, "text", 3)

to(A, B, setText("test"))
self(B, 'getText() => "|test"')

to(B, C, "left()")
self(C, 'getText() => "t|est"')

to(C,D,"right()")
self(D, 'getText() => "|test"')

to(D,E,"setInsertionIndex(2)")
self(E, 'getText() => "te|st"')

to(E,F,"deleteRight()")
self(F, 'getText() => "te|t"')

to(F,G,"deleteLeft()")
self(G, 'getText() => "t|t"')

to(G,H,'insertString("ex")')
self(H, 'getText() => "tex|t"')

@enduml