@@ -133,6 +133,7 @@ func TestAPI(t *testing.T) {
133133 t .Run ("ChannelClientInfo" , testChannelClientInfo (v ))
134134 t .Run ("UI" , testUI (v ))
135135 t .Run ("Proc" , testProc (v ))
136+ t .Run ("Mark" , testMark (v ))
136137}
137138
138139func testBufAttach (v * Nvim ) func (* testing.T ) {
@@ -4897,3 +4898,168 @@ func testProc(v *Nvim) func(*testing.T) {
48974898 })
48984899 }
48994900}
4901+
4902+ func testMark (v * Nvim ) func (* testing.T ) {
4903+ return func (t * testing.T ) {
4904+ t .Run ("Nvim" , func (t * testing.T ) {
4905+ // set dummy lines
4906+ lines := [][]byte {
4907+ []byte ("a" ),
4908+ []byte ("bit of" ),
4909+ []byte ("text" ),
4910+ }
4911+ if err := v .SetBufferLines (Buffer (0 ), 0 , - 1 , true , lines ); err != nil {
4912+ t .Fatal (err )
4913+ }
4914+ t .Cleanup (func () {
4915+ clearBuffer (t , v , Buffer (0 ))
4916+ })
4917+
4918+ // set cursor position
4919+ if err := v .SetWindowCursor (Window (0 ), [2 ]int {3 , 0 }); err != nil {
4920+ t .Fatal (err )
4921+ }
4922+
4923+ // set buffer name
4924+ cwd , err := os .Getwd () // buffer name is full path
4925+ if err != nil {
4926+ t .Fatal (err )
4927+ }
4928+ // shrink home path
4929+ cwd = strings .ReplaceAll (cwd , os .Getenv ("HOME" ), "~" )
4930+ bufName := filepath .Join (cwd , "test_mark_buffer" )
4931+ if err := v .SetBufferName (Buffer (0 ), bufName ); err != nil {
4932+ t .Fatal (err )
4933+ }
4934+
4935+ // set mark
4936+ const mark = "X"
4937+ if err := v .Command (fmt .Sprintf ("mark %s" , mark )); err != nil {
4938+ t .Fatal (err )
4939+ }
4940+
4941+ gotMark , err := v .Mark (mark , make (map [string ]interface {}))
4942+ if err != nil {
4943+ t .Fatal (err )
4944+ }
4945+ wantMark := & Mark {
4946+ Row : 3 ,
4947+ Col : 0 ,
4948+ Buffer : 0 ,
4949+ BufferName : bufName ,
4950+ }
4951+
4952+ if ! reflect .DeepEqual (gotMark , wantMark ) {
4953+ t .Fatalf ("got %#v mark but want %#v" , gotMark , wantMark )
4954+ }
4955+
4956+ deleted , err := v .DeleteMark (mark )
4957+ if err != nil {
4958+ t .Fatal (err )
4959+ }
4960+ if ! deleted {
4961+ t .Fatalf ("could not delete %s mark" , mark )
4962+ }
4963+
4964+ gotMark2 , err := v .Mark (mark , make (map [string ]interface {}))
4965+ if err != nil {
4966+ t .Fatal (err )
4967+ }
4968+ wantMark2 := & Mark {
4969+ Row : 0 ,
4970+ Col : 0 ,
4971+ Buffer : 0 ,
4972+ BufferName : "" ,
4973+ }
4974+
4975+ if ! reflect .DeepEqual (gotMark2 , wantMark2 ) {
4976+ t .Fatalf ("got %#v mark but want %#v" , gotMark2 , wantMark2 )
4977+ }
4978+ })
4979+
4980+ t .Run ("Batch" , func (t * testing.T ) {
4981+ b := v .NewBatch ()
4982+
4983+ // set dummy lines
4984+ lines := [][]byte {
4985+ []byte ("a" ),
4986+ []byte ("bit of" ),
4987+ []byte ("text" ),
4988+ }
4989+ b .SetBufferLines (Buffer (0 ), 0 , - 1 , true , lines )
4990+ if err := b .Execute (); err != nil {
4991+ t .Fatal (err )
4992+ }
4993+ t .Cleanup (func () {
4994+ clearBuffer (t , v , Buffer (0 ))
4995+ })
4996+
4997+ // set cursor position
4998+ b .SetWindowCursor (Window (0 ), [2 ]int {3 , 0 })
4999+ if err := b .Execute (); err != nil {
5000+ t .Fatal (err )
5001+ }
5002+
5003+ // set buffer name
5004+ cwd , err := os .Getwd () // buffer name is full path
5005+ if err != nil {
5006+ t .Fatal (err )
5007+ }
5008+ // shrink home path
5009+ cwd = strings .ReplaceAll (cwd , os .Getenv ("HOME" ), "~" )
5010+ bufName := filepath .Join (cwd , "test_mark_buffer" )
5011+ b .SetBufferName (Buffer (0 ), bufName )
5012+ if err := b .Execute (); err != nil {
5013+ t .Fatal (err )
5014+ }
5015+
5016+ // set mark
5017+ const mark = "X"
5018+ b .Command (fmt .Sprintf ("mark %s" , mark ))
5019+ if err := b .Execute (); err != nil {
5020+ t .Fatal (err )
5021+ }
5022+
5023+ gotMark := new (Mark )
5024+ b .Mark (mark , make (map [string ]interface {}), gotMark )
5025+ if err := b .Execute (); err != nil {
5026+ t .Fatal (err )
5027+ }
5028+ wantMark := & Mark {
5029+ Row : 3 ,
5030+ Col : 0 ,
5031+ Buffer : 0 ,
5032+ BufferName : bufName ,
5033+ }
5034+
5035+ if ! reflect .DeepEqual (gotMark , wantMark ) {
5036+ t .Fatalf ("got %#v mark but want %#v" , gotMark , wantMark )
5037+ }
5038+
5039+ var deleted bool
5040+ b .DeleteMark (mark , & deleted )
5041+ if err := b .Execute (); err != nil {
5042+ t .Fatal (err )
5043+ }
5044+ if ! deleted {
5045+ t .Fatalf ("could not delete %s mark" , mark )
5046+ }
5047+
5048+ gotMark2 := new (Mark )
5049+ b .Mark (mark , make (map [string ]interface {}), gotMark2 )
5050+ if err := b .Execute (); err != nil {
5051+ t .Fatal (err )
5052+ }
5053+ wantMark2 := & Mark {
5054+ Row : 0 ,
5055+ Col : 0 ,
5056+ Buffer : 0 ,
5057+ BufferName : "" ,
5058+ }
5059+
5060+ if ! reflect .DeepEqual (gotMark2 , wantMark2 ) {
5061+ t .Fatalf ("got %#v mark but want %#v" , gotMark2 , wantMark2 )
5062+ }
5063+ })
5064+ }
5065+ }
0 commit comments