@@ -133,6 +133,7 @@ func TestAPI(t *testing.T) {
133
133
t .Run ("ChannelClientInfo" , testChannelClientInfo (v ))
134
134
t .Run ("UI" , testUI (v ))
135
135
t .Run ("Proc" , testProc (v ))
136
+ t .Run ("Mark" , testMark (v ))
136
137
}
137
138
138
139
func testBufAttach (v * Nvim ) func (* testing.T ) {
@@ -4897,3 +4898,168 @@ func testProc(v *Nvim) func(*testing.T) {
4897
4898
})
4898
4899
}
4899
4900
}
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