1a4c906a4SBram Moolenaar" Tests for the Tcl interface. 2a4c906a4SBram Moolenaar 3b46fecd3SBram Moolenaarsource check.vim 4b46fecd3SBram MoolenaarCheckFeature tcl 5a4c906a4SBram Moolenaar 6fd34cebeSBram Moolenaar" Helper function as there is no builtin tcleval() function similar 71bc353b6SBram Moolenaar" to perleval, luaeval(), pyeval(), etc. 8fd34cebeSBram Moolenaarfunc TclEval(tcl_expr) 9fd34cebeSBram Moolenaar let s = split(execute('tcl ' . a:tcl_expr), "\n") 10fd34cebeSBram Moolenaar return (len(s) == 0) ? '' : s[-1] 11fd34cebeSBram Moolenaarendfunc 12fd34cebeSBram Moolenaar 13fd34cebeSBram Moolenaarfunc Test_tcldo() 14a4c906a4SBram Moolenaar " Check deleting lines does not trigger ml_get error. 15a4c906a4SBram Moolenaar new 16a4c906a4SBram Moolenaar call setline(1, ['one', 'two', 'three']) 17a4c906a4SBram Moolenaar tcldo ::vim::command %d_ 18a4c906a4SBram Moolenaar bwipe! 19a4c906a4SBram Moolenaar 20fd34cebeSBram Moolenaar " Check that switching to another buffer does not trigger ml_get error. 21a4c906a4SBram Moolenaar new 22a4c906a4SBram Moolenaar let wincount = winnr('$') 23a4c906a4SBram Moolenaar call setline(1, ['one', 'two', 'three']) 24a4c906a4SBram Moolenaar tcldo ::vim::command new 25a4c906a4SBram Moolenaar call assert_equal(wincount + 1, winnr('$')) 26e4358906SBram Moolenaar 27e4358906SBram Moolenaar " Try to run a command in a 'nomodifiable' buffer 28e4358906SBram Moolenaar call setline(1, ['one', 'two', 'three']) 29e4358906SBram Moolenaar set nomodifiable 30ecdd14a4SBram Moolenaar call assert_fails('tcldo set line "abc"', 31ecdd14a4SBram Moolenaar \ ['E21:', 'cannot save undo information']) 32e4358906SBram Moolenaar set modifiable 33e4358906SBram Moolenaar 34fd34cebeSBram Moolenaar %bwipe! 35fd34cebeSBram Moolenaarendfunc 36fd34cebeSBram Moolenaar 37fd34cebeSBram Moolenaar" Test :tcldo with a range 38fd34cebeSBram Moolenaarfunc Test_tcldo_range() 39fd34cebeSBram Moolenaar new 40fd34cebeSBram Moolenaar call setline(1, ['line1', 'line2', 'line3', 'line4']) 41fd34cebeSBram Moolenaar 2,3tcldo set line [string toupper $line] 42fd34cebeSBram Moolenaar call assert_equal(['line1', 'LINE2', 'LINE3', 'line4'], getline(1, '$')) 43a4c906a4SBram Moolenaar bwipe! 44a4c906a4SBram Moolenaarendfunc 45a4c906a4SBram Moolenaar 46fd34cebeSBram Moolenaar" Test ::vim::beep 47fd34cebeSBram Moolenaarfunc Test_vim_beep() 48fd34cebeSBram Moolenaar call assert_beeps('tcl ::vim::beep') 49fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::beep x', 'wrong # args: should be "::vim::beep"') 50fd34cebeSBram Moolenaarendfunc 51fd34cebeSBram Moolenaar 52fd34cebeSBram Moolenaar" Test ::vim::buffer 53fd34cebeSBram Moolenaarfunc Test_vim_buffer() 54fd34cebeSBram Moolenaar " Test ::vim::buffer {nr} 55fd34cebeSBram Moolenaar e Xfoo1 56fd34cebeSBram Moolenaar call setline(1, ['foobar']) 57fd34cebeSBram Moolenaar let bn1 = bufnr('%') 58fd34cebeSBram Moolenaar let b1 = TclEval('::vim::buffer ' . bn1) 59fd34cebeSBram Moolenaar call assert_equal(b1, TclEval('set ::vim::current(buffer)')) 60fd34cebeSBram Moolenaar 61fd34cebeSBram Moolenaar new Xfoo2 62fd34cebeSBram Moolenaar call setline(1, ['barfoo']) 63fd34cebeSBram Moolenaar let bn2 = bufnr('%') 64fd34cebeSBram Moolenaar let b2 = TclEval('::vim::buffer ' . bn2) 65fd34cebeSBram Moolenaar call assert_equal(b2, TclEval('set ::vim::current(buffer)')) 66fd34cebeSBram Moolenaar 67fd34cebeSBram Moolenaar call assert_match('Xfoo1$', TclEval(b1 . ' name')) 68fd34cebeSBram Moolenaar call assert_match('Xfoo2$', TclEval(b2 . ' name')) 69fd34cebeSBram Moolenaar 70fd34cebeSBram Moolenaar " Test ::vim::buffer exists {nr} 71fd34cebeSBram Moolenaar call assert_match('^[1-9]\d*$', TclEval('::vim::buffer exists ' . bn1)) 72fd34cebeSBram Moolenaar call assert_match('^[1-9]\d*$', TclEval('::vim::buffer exists ' . bn2)) 73fd34cebeSBram Moolenaar call assert_equal('0', TclEval('::vim::buffer exists 54321')) 74fd34cebeSBram Moolenaar 75fd34cebeSBram Moolenaar " Test ::vim::buffer list 76fd34cebeSBram Moolenaar call assert_equal('2', TclEval('llength [::vim::buffer list]')) 77fd34cebeSBram Moolenaar call assert_equal(b1.' '.b2, TclEval('::vim::buffer list')) 786c2b7b80SBram Moolenaar tcl << trim EOF 79fd34cebeSBram Moolenaar proc eachbuf { cmd } { 80fd34cebeSBram Moolenaar foreach b [::vim::buffer list] { $b command $cmd } 81fd34cebeSBram Moolenaar } 82fd34cebeSBram Moolenaar EOF 83fd34cebeSBram Moolenaar tcl eachbuf %s/foo/FOO/g 84fd34cebeSBram Moolenaar b! Xfoo1 85fd34cebeSBram Moolenaar call assert_equal(['FOObar'], getline(1, '$')) 86fd34cebeSBram Moolenaar b! Xfoo2 87fd34cebeSBram Moolenaar call assert_equal(['barFOO'], getline(1, '$')) 88fd34cebeSBram Moolenaar 89fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::buffer', 90fd34cebeSBram Moolenaar \ 'wrong # args: should be "::vim::buffer option"') 91fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::buffer ' . bn1 . ' x', 92fd34cebeSBram Moolenaar \ 'wrong # args: should be "::vim::buffer bufNumber"') 93fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::buffer 4321', 'invalid buffer number') 94fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::buffer x', 95fd34cebeSBram Moolenaar \ 'bad option "x": must be exists or list') 96fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::buffer exists', 97fd34cebeSBram Moolenaar \ 'wrong # args: should be "::vim::buffer exists bufNumber"') 98fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::buffer exists x', 99fd34cebeSBram Moolenaar \ 'expected integer but got "x"') 100fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::buffer list x', 101fd34cebeSBram Moolenaar \ 'wrong # args: should be "::vim::buffer list "') 102e4358906SBram Moolenaar " Invalid buffer command 103e4358906SBram Moolenaar call assert_fails('tcl $::vim::current(buffer) abcd', 104e4358906SBram Moolenaar \ 'bad option "abcd":') 105fd34cebeSBram Moolenaar 106fd34cebeSBram Moolenaar tcl rename eachbuf "" 107fd34cebeSBram Moolenaar %bwipe! 108fd34cebeSBram Moolenaarendfunc 109fd34cebeSBram Moolenaar 110fd34cebeSBram Moolenaar" Test ::vim::option 111fd34cebeSBram Moolenaarfunc Test_vim_option() 112fd34cebeSBram Moolenaar set cc=3,5 113fd34cebeSBram Moolenaar 114fd34cebeSBram Moolenaar " Test getting option 'cc' 115fd34cebeSBram Moolenaar call assert_equal('3,5', TclEval('::vim::option cc')) 116fd34cebeSBram Moolenaar call assert_equal('3,5', &cc) 117fd34cebeSBram Moolenaar 118fd34cebeSBram Moolenaar " Test setting option 'cc' (it returns the old option value) 119fd34cebeSBram Moolenaar call assert_equal('3,5', TclEval('::vim::option cc +4')) 120fd34cebeSBram Moolenaar call assert_equal('+4', &cc) 121fd34cebeSBram Moolenaar call assert_equal('+4', TclEval('::vim::option cc')) 122fd34cebeSBram Moolenaar 1232549acf7SBram Moolenaar " Test boolean option with 'toggle', 'on' and 'off' keywords. 1242549acf7SBram Moolenaar call assert_equal('0', TclEval('::vim::option nu toggle')) 1252549acf7SBram Moolenaar call assert_equal(1, &nu) 1262549acf7SBram Moolenaar call assert_equal('1', TclEval('::vim::option nu toggle')) 1272549acf7SBram Moolenaar call assert_equal(0, &nu) 1282549acf7SBram Moolenaar call assert_equal('0', TclEval('::vim::option nu on')) 1292549acf7SBram Moolenaar call assert_equal(1, &nu) 1302549acf7SBram Moolenaar call assert_equal('1', TclEval('::vim::option nu off')) 1312549acf7SBram Moolenaar call assert_equal(0, &nu) 1322549acf7SBram Moolenaar 1332549acf7SBram Moolenaar call assert_fails('tcl ::vim::option nu x', 'expected integer but got "x"') 134fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::option xxx', 'unknown vimOption') 135fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::option', 136fd34cebeSBram Moolenaar \ 'wrong # args: should be "::vim::option vimOption ?value?"') 137fd34cebeSBram Moolenaar 138fd34cebeSBram Moolenaar set cc& 139fd34cebeSBram Moolenaarendfunc 140fd34cebeSBram Moolenaar 141fd34cebeSBram Moolenaar" Test ::vim::expr 142fd34cebeSBram Moolenaarfunc Test_vim_expr() 143fd34cebeSBram Moolenaar call assert_equal(string(char2nr('X')), 144fd34cebeSBram Moolenaar \ TclEval('::vim::expr char2nr("X")')) 145fd34cebeSBram Moolenaar 146fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::expr x y', 147fd34cebeSBram Moolenaar \ 'wrong # args: should be "::vim::expr vimExpr"') 148*dcfc3111SBram Moolenaar call assert_fails('tcl ::vim::expr 1-', 'E15: Invalid expression: "1-"') 149fd34cebeSBram Moolenaarendfunc 150fd34cebeSBram Moolenaar 151fd34cebeSBram Moolenaar" Test ::vim::command 152fd34cebeSBram Moolenaarfunc Test_vim_command() 153fd34cebeSBram Moolenaar call assert_equal('hello world', 154fd34cebeSBram Moolenaar \ TclEval('::vim::command {echo "hello world"}')) 155fd34cebeSBram Moolenaar 1562549acf7SBram Moolenaar " Check that if ::vim::command created a new Tcl interpreter, it is removed. 1572549acf7SBram Moolenaar tcl set foo 123 1582549acf7SBram Moolenaar call assert_equal('321', TclEval('::vim::command "tcl set foo 321"')) 1592549acf7SBram Moolenaar call assert_equal('123', TclEval('set foo')) 1602549acf7SBram Moolenaar 161fd34cebeSBram Moolenaar " With the -quiet option, the error should silently be ignored. 162fd34cebeSBram Moolenaar call assert_equal('', TclEval('::vim::command -quiet xyz')) 163fd34cebeSBram Moolenaar 164fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::command', 165fd34cebeSBram Moolenaar \ 'wrong # args: should be "::vim::command ?-quiet? exCommand"') 166fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::command -foo xyz', 'unknown flag: -foo') 167fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::command xyz', 168fd34cebeSBram Moolenaar \ 'E492: Not an editor command: xyz') 169fd34cebeSBram Moolenaar 170fd34cebeSBram Moolenaar " With the -quiet option, the error should silently be ignored. 171fd34cebeSBram Moolenaar call assert_equal('', TclEval('::vim::command -quiet xyz')) 1722549acf7SBram Moolenaar 1732549acf7SBram Moolenaar tcl unset foo 174fd34cebeSBram Moolenaarendfunc 175fd34cebeSBram Moolenaar 176fd34cebeSBram Moolenaar" Test ::vim::window list 177fd34cebeSBram Moolenaarfunc Test_vim_window_list() 178fd34cebeSBram Moolenaar e Xfoo1 179fd34cebeSBram Moolenaar new Xfoo2 180fd34cebeSBram Moolenaar let w2 = TclEval('set ::vim::current(window)') 181fd34cebeSBram Moolenaar wincmd j 182fd34cebeSBram Moolenaar let w1 = TclEval('set ::vim::current(window)') 183fd34cebeSBram Moolenaar 184fd34cebeSBram Moolenaar call assert_equal('2', TclEval('llength [::vim::window list]')) 185fd34cebeSBram Moolenaar call assert_equal(w2.' '.w1, TclEval('::vim::window list')) 186fd34cebeSBram Moolenaar 187fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::window x', 'unknown option') 188fd34cebeSBram Moolenaar call assert_fails('tcl ::vim::window list x', 189fd34cebeSBram Moolenaar \ 'wrong # args: should be "::vim::window option"') 190e4358906SBram Moolenaar call assert_fails('tcl $::vim::current(window) abcd', 191e4358906SBram Moolenaar \ 'bad option "abcd":') 192fd34cebeSBram Moolenaar 193fd34cebeSBram Moolenaar %bwipe 194fd34cebeSBram Moolenaarendfunc 195fd34cebeSBram Moolenaar 196fd34cebeSBram Moolenaar" Test output messages 197fd34cebeSBram Moolenaarfunc Test_output() 1982549acf7SBram Moolenaar call assert_fails('tcl puts vimerr "error #1"', 'error #1') 1992549acf7SBram Moolenaar call assert_fails('tcl puts stderr "error #2"', 'error #2') 2002549acf7SBram Moolenaar tcl puts vimout "message #1" 2012549acf7SBram Moolenaar tcl puts stdout "message #2" 2022549acf7SBram Moolenaar tcl puts "message #3" 203fd34cebeSBram Moolenaar let messages = split(execute('message'), "\n") 2042549acf7SBram Moolenaar call assert_equal('message #3', messages[-1]) 2052549acf7SBram Moolenaar call assert_equal('message #2', messages[-2]) 2062549acf7SBram Moolenaar call assert_equal('message #1', messages[-3]) 207fd34cebeSBram Moolenaar 208fd34cebeSBram Moolenaar call assert_fails('tcl puts', 209fd34cebeSBram Moolenaar \ 'wrong # args: should be "puts ?-nonewline? ?channelId? string"') 210fd34cebeSBram Moolenaarendfunc 211fd34cebeSBram Moolenaar 212fd34cebeSBram Moolenaar" Test $win height (get and set window height) 213fd34cebeSBram Moolenaarfunc Test_window_height() 214fd34cebeSBram Moolenaar new 215fd34cebeSBram Moolenaar 216fd34cebeSBram Moolenaar " Test setting window height 217fd34cebeSBram Moolenaar tcl $::vim::current(window) height 2 218fd34cebeSBram Moolenaar call assert_equal(2, winheight(0)) 219fd34cebeSBram Moolenaar 220fd34cebeSBram Moolenaar " Test getting window height 221fd34cebeSBram Moolenaar call assert_equal('2', TclEval('$::vim::current(window) height')) 222fd34cebeSBram Moolenaar 223fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(window) height 2 2', 'wrong # args:') 224fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(window) height x', 225fd34cebeSBram Moolenaar \ 'expected integer but got "x"') 226fd34cebeSBram Moolenaar bwipe 227fd34cebeSBram Moolenaarendfunc 228fd34cebeSBram Moolenaar 229fd34cebeSBram Moolenaar" Test $win cursor (get and set cursor) 230fd34cebeSBram Moolenaarfunc Test_window_cursor() 231fd34cebeSBram Moolenaar new 232fd34cebeSBram Moolenaar call setline(1, ['line1', 'line2', 'line3', 'line5']) 233fd34cebeSBram Moolenaar tcl set win $::vim::current(window) 234fd34cebeSBram Moolenaar 235fd34cebeSBram Moolenaar tcl $win cursor 2 4 236fd34cebeSBram Moolenaar call assert_equal([0, 2, 4, 0], getpos('.')) 237fd34cebeSBram Moolenaar call assert_equal('row 2 column 4', TclEval('$win cursor')) 238fd34cebeSBram Moolenaar 239fd34cebeSBram Moolenaar " When setting ::vim::lbase to 0, line/col are counted from 0 240fd34cebeSBram Moolenaar " instead of 1. 241fd34cebeSBram Moolenaar tcl set ::vim::lbase 0 242fd34cebeSBram Moolenaar call assert_equal([0, 2, 4, 0], getpos('.')) 243fd34cebeSBram Moolenaar call assert_equal('row 1 column 3', TclEval('$win cursor')) 244fd34cebeSBram Moolenaar tcl $win cursor 2 4 245fd34cebeSBram Moolenaar call assert_equal([0, 3, 5, 0], getpos('.')) 246fd34cebeSBram Moolenaar call assert_equal('row 2 column 4', TclEval('$win cursor')) 247fd34cebeSBram Moolenaar tcl set ::vim::lbase 1 248fd34cebeSBram Moolenaar call assert_equal('row 3 column 5', TclEval('$win cursor')) 249fd34cebeSBram Moolenaar call assert_equal([0, 3, 5, 0], getpos('.')) 250fd34cebeSBram Moolenaar 251fd34cebeSBram Moolenaar " test $win cursor {$var} 252fd34cebeSBram Moolenaar call cursor(2, 3) 253fd34cebeSBram Moolenaar tcl array set here [$win cursor] 254fd34cebeSBram Moolenaar call assert_equal([0, 2, 3, 0], getpos('.')) 255fd34cebeSBram Moolenaar call cursor(3, 1) 256fd34cebeSBram Moolenaar call assert_equal([0, 3, 1, 0], getpos('.')) 257fd34cebeSBram Moolenaar tcl $win cursor here 258fd34cebeSBram Moolenaar call assert_equal([0, 2, 3, 0], getpos('.')) 259fd34cebeSBram Moolenaar call cursor(3, 1) 260fd34cebeSBram Moolenaar call assert_equal([0, 3, 1, 0], getpos('.')) 261fd34cebeSBram Moolenaar tcl $win cursor $here(row) $here(column) 262fd34cebeSBram Moolenaar call assert_equal([0, 2, 3, 0], getpos('.')) 263fd34cebeSBram Moolenaar 264e4358906SBram Moolenaar " Invalid values for the row and column 265e4358906SBram Moolenaar tcl array set pos {1 2} 266e4358906SBram Moolenaar call assert_fails('tcl $win cursor pos', "can't read \"pos(row)\":") 267e4358906SBram Moolenaar tcl array set pos {row '' abc 2} 268e4358906SBram Moolenaar call assert_fails('tcl $win cursor pos', "expected integer but got \"''\"") 269e4358906SBram Moolenaar tcl array set pos {row 1 abc 2} 270e4358906SBram Moolenaar call assert_fails('tcl $win cursor pos', "can't read \"pos(column)\":") 271e4358906SBram Moolenaar tcl array set pos {row 1 column ''} 272e4358906SBram Moolenaar call assert_fails('tcl $win cursor pos', "expected integer but got \"''\"") 273e4358906SBram Moolenaar 274e4358906SBram Moolenaar call assert_fails("tcl $win cursor '' 2", "expected integer but got \"''\"") 275e4358906SBram Moolenaar call assert_fails("tcl $win cursor 1 ''", "expected integer but got \"''\"") 276e4358906SBram Moolenaar 277fd34cebeSBram Moolenaar call assert_fails('tcl $win cursor 1 1 1', 'wrong # args:') 278fd34cebeSBram Moolenaar 279fd34cebeSBram Moolenaar tcl unset win here 280fd34cebeSBram Moolenaar bwipe! 281fd34cebeSBram Moolenaarendfunc 282fd34cebeSBram Moolenaar 283fd34cebeSBram Moolenaar" Test $win buffer 284fd34cebeSBram Moolenaarfunc Test_window_buffer() 285fd34cebeSBram Moolenaar new Xfoo1 286fd34cebeSBram Moolenaar new Xfoo2 287fd34cebeSBram Moolenaar tcl set b2 $::vim::current(buffer) 288fd34cebeSBram Moolenaar tcl set w2 $::vim::current(window) 289fd34cebeSBram Moolenaar wincmd j 290fd34cebeSBram Moolenaar tcl set b1 $::vim::current(buffer) 291fd34cebeSBram Moolenaar tcl set w1 $::vim::current(window) 292fd34cebeSBram Moolenaar 293fd34cebeSBram Moolenaar call assert_equal(TclEval('set b1'), TclEval('$w1 buffer')) 294fd34cebeSBram Moolenaar call assert_equal(TclEval('set b2'), TclEval('$w2 buffer')) 295fd34cebeSBram Moolenaar call assert_equal(string(bufnr('Xfoo1')), TclEval('[$w1 buffer] number')) 296fd34cebeSBram Moolenaar call assert_equal(string(bufnr('Xfoo2')), TclEval('[$w2 buffer] number')) 297fd34cebeSBram Moolenaar 298fd34cebeSBram Moolenaar call assert_fails('tcl $w1 buffer x', 'wrong # args:') 299fd34cebeSBram Moolenaar 300fd34cebeSBram Moolenaar tcl unset b1 b2 w1 w2 301fd34cebeSBram Moolenaar %bwipe 302fd34cebeSBram Moolenaarendfunc 303fd34cebeSBram Moolenaar 304fd34cebeSBram Moolenaar" Test $win command 305fd34cebeSBram Moolenaarfunc Test_window_command() 306fd34cebeSBram Moolenaar new Xfoo1 307fd34cebeSBram Moolenaar call setline(1, ['FOObar']) 308fd34cebeSBram Moolenaar new Xfoo2 309fd34cebeSBram Moolenaar call setline(1, ['fooBAR']) 310fd34cebeSBram Moolenaar tcl set w2 $::vim::current(window) 311fd34cebeSBram Moolenaar wincmd j 312fd34cebeSBram Moolenaar tcl set w1 $::vim::current(window) 313fd34cebeSBram Moolenaar 314fd34cebeSBram Moolenaar tcl $w1 command "norm VU" 315fd34cebeSBram Moolenaar tcl $w2 command "norm Vu" 316fd34cebeSBram Moolenaar b! Xfoo1 317fd34cebeSBram Moolenaar call assert_equal('FOOBAR', getline(1)) 318fd34cebeSBram Moolenaar b! Xfoo2 319fd34cebeSBram Moolenaar call assert_equal('foobar', getline(1)) 320fd34cebeSBram Moolenaar 321fd34cebeSBram Moolenaar call assert_fails('tcl $w1 command xyz', 322fd34cebeSBram Moolenaar \ 'E492: Not an editor command: xyz') 323fd34cebeSBram Moolenaar tcl $w1 command -quiet xyz 324fd34cebeSBram Moolenaar 325fd34cebeSBram Moolenaar tcl unset w1 w2 326fd34cebeSBram Moolenaar %bwipe! 327fd34cebeSBram Moolenaarendfunc 328fd34cebeSBram Moolenaar 329fd34cebeSBram Moolenaar" Test $win expr 330fd34cebeSBram Moolenaarfunc Test_window_expr() 331fd34cebeSBram Moolenaar new Xfoo1 332fd34cebeSBram Moolenaar new Xfoo2 333fd34cebeSBram Moolenaar tcl set w2 $::vim::current(window) 334fd34cebeSBram Moolenaar wincmd j 335fd34cebeSBram Moolenaar tcl set w1 $::vim::current(window) 336fd34cebeSBram Moolenaar 337fd34cebeSBram Moolenaar call assert_equal('Xfoo1', TclEval('$w1 expr bufname("%")')) 338fd34cebeSBram Moolenaar call assert_equal('Xfoo2', TclEval('$w2 expr bufname("%")')) 339fd34cebeSBram Moolenaar 340fd34cebeSBram Moolenaar call assert_fails('tcl $w1 expr', 'wrong # args:') 341fd34cebeSBram Moolenaar call assert_fails('tcl $w1 expr x x', 'wrong # args:') 342fd34cebeSBram Moolenaar 343fd34cebeSBram Moolenaar tcl unset w1 w2 344fd34cebeSBram Moolenaar %bwipe 345fd34cebeSBram Moolenaarendfunc 346fd34cebeSBram Moolenaar 347fd34cebeSBram Moolenaar" Test $win option 348fd34cebeSBram Moolenaarfunc Test_window_option() 349fd34cebeSBram Moolenaar new Xfoo1 350fd34cebeSBram Moolenaar new Xfoo2 351fd34cebeSBram Moolenaar tcl set w2 $::vim::current(window) 352fd34cebeSBram Moolenaar wincmd j 353fd34cebeSBram Moolenaar tcl set w1 $::vim::current(window) 354fd34cebeSBram Moolenaar 355fd34cebeSBram Moolenaar " Test setting window option 356fd34cebeSBram Moolenaar tcl $w1 option syntax java 357fd34cebeSBram Moolenaar tcl $w2 option syntax rust 358fd34cebeSBram Moolenaar 359fd34cebeSBram Moolenaar call assert_equal('java', &syntax) 360fd34cebeSBram Moolenaar wincmd k 361fd34cebeSBram Moolenaar call assert_equal('rust', &syntax) 362fd34cebeSBram Moolenaar 363fd34cebeSBram Moolenaar " Test getting window option 364fd34cebeSBram Moolenaar call assert_equal('java', TclEval('$w1 option syntax')) 365fd34cebeSBram Moolenaar call assert_equal('rust', TclEval('$w2 option syntax')) 366fd34cebeSBram Moolenaar 367fd34cebeSBram Moolenaar tcl unset w1 w2 368fd34cebeSBram Moolenaar %bwipe 369fd34cebeSBram Moolenaarendfunc 370fd34cebeSBram Moolenaar 371fd34cebeSBram Moolenaar" Test $win delcmd {cmd} 372fd34cebeSBram Moolenaarfunc Test_window_delcmd() 373fd34cebeSBram Moolenaar new 374fd34cebeSBram Moolenaar tcl $::vim::current(window) delcmd [list set msg "window deleted"] 375fd34cebeSBram Moolenaar call assert_fails('tcl set msg', "can't read \"msg\": no such variable") 376fd34cebeSBram Moolenaar q 377fd34cebeSBram Moolenaar call assert_equal('window deleted', TclEval('set msg')) 378fd34cebeSBram Moolenaar 379fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(window) delcmd', 'wrong # args') 380e4358906SBram Moolenaar call assert_fails('tcl $::vim::current(window) delcmd x x', 'wrong # args') 381fd34cebeSBram Moolenaar 382fd34cebeSBram Moolenaar tcl unset msg 383fd34cebeSBram Moolenaar bwipe 384fd34cebeSBram Moolenaarendfunc 385fd34cebeSBram Moolenaar 386fd34cebeSBram Moolenaar" Test $buf name 387fd34cebeSBram Moolenaarfunc Test_buffer_name() 388fd34cebeSBram Moolenaar " Test buffer name with a named buffer 389fd34cebeSBram Moolenaar new Xfoo 390fd34cebeSBram Moolenaar call assert_equal(expand('%:p'), TclEval('$::vim::current(buffer) name')) 391fd34cebeSBram Moolenaar bwipe 392fd34cebeSBram Moolenaar 393fd34cebeSBram Moolenaar " Test buffer name with an unnamed buffer 394fd34cebeSBram Moolenaar new 395fd34cebeSBram Moolenaar call assert_equal('', TclEval('$::vim::current(buffer) name')) 396fd34cebeSBram Moolenaar 397fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) name x', 'wrong # args:') 398fd34cebeSBram Moolenaar 399fd34cebeSBram Moolenaar bwipe 400fd34cebeSBram Moolenaarendfunc 401fd34cebeSBram Moolenaar 402fd34cebeSBram Moolenaar" Test $buf number 403fd34cebeSBram Moolenaarfunc Test_buffer_number() 404fd34cebeSBram Moolenaar new 405fd34cebeSBram Moolenaar call assert_equal(string(bufnr('%')), TclEval('$::vim::current(buffer) number')) 406fd34cebeSBram Moolenaar new 407fd34cebeSBram Moolenaar call assert_equal(string(bufnr('%')), TclEval('$::vim::current(buffer) number')) 408fd34cebeSBram Moolenaar 409fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) number x', 'wrong # args:') 410fd34cebeSBram Moolenaar 411fd34cebeSBram Moolenaar %bwipe 412fd34cebeSBram Moolenaarendfunc 413fd34cebeSBram Moolenaar 414fd34cebeSBram Moolenaar" Test $buf count and $buf last 415fd34cebeSBram Moolenaarfunc Test_buffer_count() 416fd34cebeSBram Moolenaar new 417fd34cebeSBram Moolenaar call setline(1, ['one', 'two', 'three']) 418fd34cebeSBram Moolenaar call assert_equal('3', TclEval('$::vim::current(buffer) count')) 419fd34cebeSBram Moolenaar call assert_equal('3', TclEval('$::vim::current(buffer) last')) 420fd34cebeSBram Moolenaar 421fd34cebeSBram Moolenaar " Check that $buf count and $buf last differ when ::vim::lbase is 0. 422fd34cebeSBram Moolenaar tcl set ::vim::lbase 0 423fd34cebeSBram Moolenaar call assert_equal('3', TclEval('$::vim::current(buffer) count')) 424fd34cebeSBram Moolenaar call assert_equal('2', TclEval('$::vim::current(buffer) last')) 425fd34cebeSBram Moolenaar 426fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) count x', 'wrong # args:') 427fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) last x', 'wrong # args:') 428fd34cebeSBram Moolenaar 429fd34cebeSBram Moolenaar tcl set ::vim::lbase 1 430fd34cebeSBram Moolenaar bwipe! 431fd34cebeSBram Moolenaarendfunc 432fd34cebeSBram Moolenaar 433fd34cebeSBram Moolenaar" Test $buf delete (delete line(s) in buffer) 434fd34cebeSBram Moolenaarfunc Test_buffer_delete() 435fd34cebeSBram Moolenaar new 436fd34cebeSBram Moolenaar call setline(1, ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight']) 437fd34cebeSBram Moolenaar tcl $::vim::current(buffer) delete 4 6 438fd34cebeSBram Moolenaar tcl $::vim::current(buffer) delete 2 439fd34cebeSBram Moolenaar call assert_equal(['one', 'three', 'seven', 'eight'], getline(1, '$')) 440fd34cebeSBram Moolenaar 441fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) delete -1', 'line number out of range') 442fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) delete 0', 'line number out of range') 443fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) delete 5', 'line number out of range') 444fd34cebeSBram Moolenaar 445fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) delete', 'wrong # args:') 446fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) delete 1 2 3', 'wrong # args:') 447e4358906SBram Moolenaar call assert_fails('tcl $::vim::current(buffer) delete 1 abc', 448e4358906SBram Moolenaar \ 'expected integer but got "abc"') 449e4358906SBram Moolenaar 450e4358906SBram Moolenaar " Try to delete lines from an 'nomodifiable' buffer 451e4358906SBram Moolenaar set nomodifiable 452e4358906SBram Moolenaar call assert_fails('tcl $::vim::current(buffer) delete 2 1', 453ecdd14a4SBram Moolenaar \ ['E21:', 'cannot save undo information']) 454e4358906SBram Moolenaar set modifiable 455fd34cebeSBram Moolenaar 456fd34cebeSBram Moolenaar bwipe! 457fd34cebeSBram Moolenaarendfunc 458fd34cebeSBram Moolenaar 459fd34cebeSBram Moolenaar" Test $buf insert (insert line(s) in buffer) 460fd34cebeSBram Moolenaarfunc Test_buffer_insert() 461fd34cebeSBram Moolenaar new 462fd34cebeSBram Moolenaar tcl set buf $::vim::current(buffer) 463fd34cebeSBram Moolenaar tcl $buf insert 1 "first" 464fd34cebeSBram Moolenaar tcl $buf insert 2 "second" 465fd34cebeSBram Moolenaar tcl $buf insert 2 "third" 466fd34cebeSBram Moolenaar tcl $buf insert 4 "fourth" 467fd34cebeSBram Moolenaar tcl $buf insert 1 "fifth" 468fd34cebeSBram Moolenaar call assert_equal(['fifth', 'first', 'third', 'second', 'fourth', ''], getline(1, '$')) 469fd34cebeSBram Moolenaar 470fd34cebeSBram Moolenaar call assert_fails('tcl $buf insert -1 "x"', 'line number out of range') 471fd34cebeSBram Moolenaar call assert_fails('tcl $buf insert 0 "x"', 'line number out of range') 472fd34cebeSBram Moolenaar call assert_fails('tcl $buf insert 7 "x"', 'line number out of range') 473fd34cebeSBram Moolenaar 474fd34cebeSBram Moolenaar tcl unset buf 475fd34cebeSBram Moolenaar bwipe! 476fd34cebeSBram Moolenaarendfunc 477fd34cebeSBram Moolenaar 478fd34cebeSBram Moolenaar" Test $buf append (append line in buffer) 479fd34cebeSBram Moolenaarfunc Test_buffer_append() 480fd34cebeSBram Moolenaar new 481fd34cebeSBram Moolenaar tcl set buf $::vim::current(buffer) 482fd34cebeSBram Moolenaar tcl $buf append 1 "first" 483fd34cebeSBram Moolenaar tcl $buf append 2 "second" 484fd34cebeSBram Moolenaar tcl $buf append 2 "third" 485fd34cebeSBram Moolenaar tcl $buf append 4 "fourth" 486fd34cebeSBram Moolenaar tcl $buf append 1 "fifth" 487fd34cebeSBram Moolenaar call assert_equal(['', 'fifth', 'first', 'third', 'second', 'fourth'], getline(1, '$')) 488fd34cebeSBram Moolenaar 489fd34cebeSBram Moolenaar call assert_fails('tcl $buf append -1 "x"', 'line number out of range') 490fd34cebeSBram Moolenaar call assert_fails('tcl $buf append 0 "x"', 'line number out of range') 491fd34cebeSBram Moolenaar call assert_fails('tcl $buf append 7 "x"', 'line number out of range') 492fd34cebeSBram Moolenaar 493fd34cebeSBram Moolenaar call assert_fails('tcl $buf append', 'wrong # args:') 494fd34cebeSBram Moolenaar call assert_fails('tcl $buf append 1 x x', 'wrong # args:') 495fd34cebeSBram Moolenaar 496e4358906SBram Moolenaar " Try to append lines to a 'nomodifiable' buffer 497e4358906SBram Moolenaar set nomodifiable 498e4358906SBram Moolenaar call assert_fails('tcl $buf append 1 "first"', 499ecdd14a4SBram Moolenaar \ ['E21:', 'cannot save undo information']) 500e4358906SBram Moolenaar set modifiable 501e4358906SBram Moolenaar 502fd34cebeSBram Moolenaar tcl unset buf 503fd34cebeSBram Moolenaar bwipe! 504fd34cebeSBram Moolenaarendfunc 505fd34cebeSBram Moolenaar 506fd34cebeSBram Moolenaar" Test $buf set (replacing line(s) in a buffer) 507fd34cebeSBram Moolenaarfunc Test_buffer_set() 508fd34cebeSBram Moolenaar new 509fd34cebeSBram Moolenaar call setline(1, ['line1', 'line2', 'line3', 'line4', 'line5']) 510fd34cebeSBram Moolenaar tcl $::vim::current(buffer) set 2 a 511fd34cebeSBram Moolenaar call assert_equal(['line1', 'a', 'line3', 'line4', 'line5'], getline(1, '$')) 5122549acf7SBram Moolenaar 5132549acf7SBram Moolenaar " Test with fewer replacing lines than replaced lines: lines get deleted. 514fd34cebeSBram Moolenaar tcl $::vim::current(buffer) set 3 4 b 515fd34cebeSBram Moolenaar call assert_equal(['line1', 'a', 'b', 'line5'], getline(1, '$')) 516fd34cebeSBram Moolenaar tcl $::vim::current(buffer) set 4 3 c 517fd34cebeSBram Moolenaar call assert_equal(['line1', 'a', 'c'], getline(1, '$')) 518fd34cebeSBram Moolenaar 5192549acf7SBram Moolenaar " Test with more replacing lines than replaced lines: lines get added. 5202549acf7SBram Moolenaar tcl $::vim::current(buffer) set 2 3 {x y z} 5212549acf7SBram Moolenaar call assert_equal(['line1', 'x', 'y', 'z'], getline(1, '$')) 5222549acf7SBram Moolenaar tcl $::vim::current(buffer) set 3 2 {X Y Z} 5232549acf7SBram Moolenaar call assert_equal(['line1', 'X', 'Y', 'Z', 'z'], getline(1, '$')) 5242549acf7SBram Moolenaar 525fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) set 0 "x"', 'line number out of range') 5262549acf7SBram Moolenaar call assert_fails('tcl $::vim::current(buffer) set 6 "x"', 'line number out of range') 527fd34cebeSBram Moolenaar 528fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) set', 'wrong # args:') 529e4358906SBram Moolenaar call assert_fails('tcl $::vim::current(buffer) set 1 2 {[list "a" "b"]}', 530e4358906SBram Moolenaar \ 'list element in quotes followed by "]" instead of space') 531e4358906SBram Moolenaar 532e4358906SBram Moolenaar " Try to modify a 'nomodifiable' buffer 533e4358906SBram Moolenaar set nomodifiable 534e4358906SBram Moolenaar call assert_fails('tcl $::vim::current(buffer) set 1 "x"', 535ecdd14a4SBram Moolenaar \ ['E21:', 'cannot save undo information']) 536e4358906SBram Moolenaar call assert_fails('tcl $::vim::current(buffer) set 1 {a b}', 537ecdd14a4SBram Moolenaar \ ['E21:', 'cannot save undo information']) 538e4358906SBram Moolenaar call assert_fails('tcl $::vim::current(buffer) set 1 2 {a b}', 539ecdd14a4SBram Moolenaar \ ['E21:', 'cannot save undo information']) 540e4358906SBram Moolenaar set modifiable 541fd34cebeSBram Moolenaar bwipe! 542fd34cebeSBram Moolenaarendfunc 543fd34cebeSBram Moolenaar 544fd34cebeSBram Moolenaar" Test $buf get (get line(s) from buffer) 545fd34cebeSBram Moolenaarfunc Test_buffer_get() 546fd34cebeSBram Moolenaar new 547fd34cebeSBram Moolenaar call setline(1, ['first line', 'two', 'three', 'last line']) 548fd34cebeSBram Moolenaar tcl set buf $::vim::current(buffer) 549fd34cebeSBram Moolenaar 550fd34cebeSBram Moolenaar call assert_equal('first line', TclEval('$buf get top')) 551fd34cebeSBram Moolenaar call assert_equal('first line', TclEval('$buf get begin')) 552fd34cebeSBram Moolenaar call assert_equal('last line', TclEval('$buf get bottom')) 553fd34cebeSBram Moolenaar call assert_equal('last line', TclEval('$buf get last')) 554fd34cebeSBram Moolenaar 555fd34cebeSBram Moolenaar call assert_equal('first line', TclEval('$buf get 1')) 556fd34cebeSBram Moolenaar call assert_equal('two', TclEval('$buf get 2')) 557fd34cebeSBram Moolenaar call assert_equal('three', TclEval('$buf get 3')) 558fd34cebeSBram Moolenaar call assert_equal('last line', TclEval('$buf get 4')) 559fd34cebeSBram Moolenaar 560fd34cebeSBram Moolenaar call assert_equal('two three', TclEval('$buf get 2 3')) 561fd34cebeSBram Moolenaar call assert_equal('two three', TclEval('$buf get 3 2')) 562fd34cebeSBram Moolenaar call assert_equal('three {last line}', TclEval('$buf get 3 last')) 563fd34cebeSBram Moolenaar 564fd34cebeSBram Moolenaar call assert_fails('tcl $buf get -1', 'line number out of range') 565fd34cebeSBram Moolenaar call assert_fails('tcl $buf get 0', 'line number out of range') 566fd34cebeSBram Moolenaar call assert_fails('tcl $buf get 5', 'line number out of range') 567fd34cebeSBram Moolenaar call assert_fails('tcl $buf get 0 1', 'line number out of range') 568fd34cebeSBram Moolenaar 569fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) get x', 'expected integer but got "x"') 570e4358906SBram Moolenaar call assert_fails('tcl $::vim::current(buffer) get 1 x', 'expected integer but got "x"') 571fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) get 1 1 1', 'wrong # args:') 572fd34cebeSBram Moolenaar 573fd34cebeSBram Moolenaar tcl unset buf 574fd34cebeSBram Moolenaar bwipe! 575fd34cebeSBram Moolenaarendfunc 576fd34cebeSBram Moolenaar 577fd34cebeSBram Moolenaar" Test $buf mark (get position of a mark) 578fd34cebeSBram Moolenaarfunc Test_buffer_mark() 579fd34cebeSBram Moolenaar new 580fd34cebeSBram Moolenaar call setline(1, ['one', 'two', 'three', 'four']) 581fd34cebeSBram Moolenaar /three 582fd34cebeSBram Moolenaar norm! ma 583fd34cebeSBram Moolenaar norm! jllmB 584fd34cebeSBram Moolenaar 585fd34cebeSBram Moolenaar call assert_equal('row 3 column 1', TclEval('$::vim::current(buffer) mark a')) 586fd34cebeSBram Moolenaar call assert_equal('row 4 column 3', TclEval('$::vim::current(buffer) mark B')) 587fd34cebeSBram Moolenaar 588fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) mark /', 'invalid mark name') 589fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) mark z', 'mark not set') 590fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) mark', 'wrong # args:') 591fd34cebeSBram Moolenaar 592fd34cebeSBram Moolenaar delmarks aB 593fd34cebeSBram Moolenaar bwipe! 594fd34cebeSBram Moolenaarendfunc 595fd34cebeSBram Moolenaar 596fd34cebeSBram Moolenaar" Test $buf option (test and set option in context of a buffer) 597fd34cebeSBram Moolenaarfunc Test_buffer_option() 598fd34cebeSBram Moolenaar new Xfoo1 599fd34cebeSBram Moolenaar tcl set b1 $::vim::current(buffer) 600fd34cebeSBram Moolenaar new Xfoo2 601fd34cebeSBram Moolenaar tcl set b2 $::vim::current(buffer) 602fd34cebeSBram Moolenaar 603fd34cebeSBram Moolenaar tcl $b1 option foldcolumn 2 604fd34cebeSBram Moolenaar tcl $b2 option foldcolumn 3 605fd34cebeSBram Moolenaar 606fd34cebeSBram Moolenaar call assert_equal(3, &foldcolumn) 607fd34cebeSBram Moolenaar wincmd j 608fd34cebeSBram Moolenaar call assert_equal(2, &foldcolumn) 609fd34cebeSBram Moolenaar 610fd34cebeSBram Moolenaar call assert_equal('2', TclEval('$b1 option foldcolumn')) 611fd34cebeSBram Moolenaar call assert_equal('3', TclEval('$b2 option foldcolumn')) 612fd34cebeSBram Moolenaar 613fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) option', 'wrong # args:') 614fd34cebeSBram Moolenaar 615fd34cebeSBram Moolenaar set foldcolumn& 616fd34cebeSBram Moolenaar tcl unset b1 b2 617fd34cebeSBram Moolenaar %bwipe 618fd34cebeSBram Moolenaarendfunc 619fd34cebeSBram Moolenaar 620fd34cebeSBram Moolenaar" Test $buf expr (evaluate vim expression) 621fd34cebeSBram Moolenaarfunc Test_buffer_expr() 622fd34cebeSBram Moolenaar new Xfoo1 623fd34cebeSBram Moolenaar norm ifoo1 624fd34cebeSBram Moolenaar tcl set b1 $::vim::current(buffer) 625fd34cebeSBram Moolenaar 626fd34cebeSBram Moolenaar new Xfoo2 627fd34cebeSBram Moolenaar norm ifoo2 628fd34cebeSBram Moolenaar tcl set b2 $::vim::current(buffer) 629fd34cebeSBram Moolenaar 630fd34cebeSBram Moolenaar call assert_equal('foo1', TclEval('$b1 expr getline(1)')) 631fd34cebeSBram Moolenaar call assert_equal('foo2', TclEval('$b2 expr getline(1)')) 632fd34cebeSBram Moolenaar 633fd34cebeSBram Moolenaar call assert_fails('tcl expr', 'wrong # args:') 634fd34cebeSBram Moolenaar 635fd34cebeSBram Moolenaar tcl unset b1 b2 636fd34cebeSBram Moolenaar %bwipe! 637fd34cebeSBram Moolenaarendfunc 638fd34cebeSBram Moolenaar 639fd34cebeSBram Moolenaar" Test $buf delcmd {cmd} (command executed when buffer is deleted) 640fd34cebeSBram Moolenaarfunc Test_buffer_delcmd() 641fd34cebeSBram Moolenaar new Xfoo 642fd34cebeSBram Moolenaar split 643fd34cebeSBram Moolenaar tcl $::vim::current(buffer) delcmd [list set msg "buffer deleted"] 644fd34cebeSBram Moolenaar q 645fd34cebeSBram Moolenaar call assert_fails('tcl set msg', "can't read \"msg\": no such variable") 646fd34cebeSBram Moolenaar q 647fd34cebeSBram Moolenaar call assert_equal('buffer deleted', TclEval('set msg')) 648fd34cebeSBram Moolenaar 649e4358906SBram Moolenaar call assert_fails('tcl $::vim::current(buffer) delcmd', 'wrong # args') 650e4358906SBram Moolenaar call assert_fails('tcl $::vim::current(buffer) delcmd x x', 'wrong # args') 651fd34cebeSBram Moolenaar 652fd34cebeSBram Moolenaar tcl unset msg 653fd34cebeSBram Moolenaar %bwipe 654fd34cebeSBram Moolenaarendfunc 655fd34cebeSBram Moolenaar 656fd34cebeSBram Moolenaarfunc Test_vim_current() 657fd34cebeSBram Moolenaar " Only test errors as ::vim::current(...) is already indirectly 658fd34cebeSBram Moolenaar " tested by many other tests. 659fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer)', 'wrong # args:') 660fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(window)', 'wrong # args:') 661fd34cebeSBram Moolenaarendfunc 662fd34cebeSBram Moolenaar 663fd34cebeSBram Moolenaar" Test $buf windows (windows list of a buffer) 664fd34cebeSBram Moolenaarfunc Test_buffer_windows() 665fd34cebeSBram Moolenaar new Xfoo 666fd34cebeSBram Moolenaar split 667fd34cebeSBram Moolenaar new Xbar 668fd34cebeSBram Moolenaar split 669fd34cebeSBram Moolenaar vsplit 670fd34cebeSBram Moolenaar 671fd34cebeSBram Moolenaar tcl set bar_wl [$::vim::current(buffer) windows] 672fd34cebeSBram Moolenaar 2wincmd j 673fd34cebeSBram Moolenaar tcl set foo_wl [$::vim::current(buffer) windows] 674fd34cebeSBram Moolenaar 675fd34cebeSBram Moolenaar call assert_equal('2', TclEval('llength $foo_wl')) 676fd34cebeSBram Moolenaar call assert_equal('3', TclEval('llength $bar_wl')) 677fd34cebeSBram Moolenaar 678fd34cebeSBram Moolenaar call assert_fails('tcl $::vim::current(buffer) windows x', 'wrong # args:') 679fd34cebeSBram Moolenaar 680fd34cebeSBram Moolenaar tcl unset bar_wl foo_wl 681fd34cebeSBram Moolenaar %bwipe 682fd34cebeSBram Moolenaarendfunc 683fd34cebeSBram Moolenaar 684fd34cebeSBram Moolenaar" Test :tclfile 685fd34cebeSBram Moolenaarfunc Test_tclfile() 686fd34cebeSBram Moolenaar call delete('Xtcl_file') 687fd34cebeSBram Moolenaar call writefile(['set pi [format "%.2f" [expr acos(-1.0)]]'], 'Xtcl_file') 688fd34cebeSBram Moolenaar call setfperm('Xtcl_file', 'r-xr-xr-x') 689fd34cebeSBram Moolenaar 690fd34cebeSBram Moolenaar tclfile Xtcl_file 691fd34cebeSBram Moolenaar call assert_equal('3.14', TclEval('set pi')) 692fd34cebeSBram Moolenaar 693fd34cebeSBram Moolenaar tcl unset pi 694fd34cebeSBram Moolenaar call delete('Xtcl_file') 695fd34cebeSBram Moolenaarendfunc 696fd34cebeSBram Moolenaar 697fd34cebeSBram Moolenaar" Test :tclfile with syntax error in tcl script 698fd34cebeSBram Moolenaarfunc Test_tclfile_error() 699fd34cebeSBram Moolenaar call delete('Xtcl_file') 700fd34cebeSBram Moolenaar call writefile(['xyz'], 'Xtcl_file') 701fd34cebeSBram Moolenaar call setfperm('Xtcl_file', 'r-xr-xr-x') 702fd34cebeSBram Moolenaar 703fd34cebeSBram Moolenaar call assert_fails('tclfile Xtcl_file', 'invalid command name "xyz"') 704fd34cebeSBram Moolenaar 705fd34cebeSBram Moolenaar call delete('Xtcl_file') 706fd34cebeSBram Moolenaarendfunc 707fd34cebeSBram Moolenaar 7082549acf7SBram Moolenaar" Test exiting current Tcl interpreter and re-creating one. 709fd34cebeSBram Moolenaarfunc Test_tcl_exit() 7109b9be007SBram Moolenaar call assert_fails('tcl exit 1 1', 'wrong # args: should be "exit ?returnCode?"') 7119b9be007SBram Moolenaar call assert_fails('tcl exit x', 'expected integer but got "x"') 7129b9be007SBram Moolenaar 713fd34cebeSBram Moolenaar tcl set foo "foo" 714fd34cebeSBram Moolenaar call assert_fails('tcl exit 3', 'E572: exit code 3') 715fd34cebeSBram Moolenaar 716fd34cebeSBram Moolenaar " The Tcl interpreter should have been deleted and a new one 717fd34cebeSBram Moolenaar " is re-created with the next :tcl command. 718fd34cebeSBram Moolenaar call assert_fails('tcl set foo', "can't read \"foo\": no such variable") 719fd34cebeSBram Moolenaar tcl set bar "bar" 720fd34cebeSBram Moolenaar call assert_equal('bar', TclEval('set bar')) 721fd34cebeSBram Moolenaar 722fd34cebeSBram Moolenaar tcl unset bar 723fd34cebeSBram Moolenaarendfunc 72453901442SBram Moolenaar 72553901442SBram Moolenaarfunc Test_set_cursor() 72653901442SBram Moolenaar " Check that setting the cursor position works. 72753901442SBram Moolenaar new 72853901442SBram Moolenaar call setline(1, ['first line', 'second line']) 72953901442SBram Moolenaar normal gg 73053901442SBram Moolenaar tcldo $::vim::current(window) cursor 1 5 73153901442SBram Moolenaar call assert_equal([1, 5], [line('.'), col('.')]) 73253901442SBram Moolenaar 73353901442SBram Moolenaar " Check that movement after setting cursor position keeps current column. 73453901442SBram Moolenaar normal j 73553901442SBram Moolenaar call assert_equal([2, 5], [line('.'), col('.')]) 73653901442SBram Moolenaarendfunc 7376c2b7b80SBram Moolenaar 7386c2b7b80SBram Moolenaar" Test for different syntax for ruby heredoc 7396c2b7b80SBram Moolenaarfunc Test_tcl_heredoc() 7406c2b7b80SBram Moolenaar tcl << END 7416c2b7b80SBram Moolenaar::vim::command {let s = "A"} 7426c2b7b80SBram MoolenaarEND 7436c2b7b80SBram Moolenaar tcl << 7446c2b7b80SBram Moolenaar::vim::command {let s ..= "B"} 7456c2b7b80SBram Moolenaar. 7466c2b7b80SBram Moolenaar tcl << trim END 7476c2b7b80SBram Moolenaar ::vim::command {let s ..= "C"} 7486c2b7b80SBram Moolenaar END 7496c2b7b80SBram Moolenaar tcl << trim 7506c2b7b80SBram Moolenaar ::vim::command {let s ..= "D"} 7516c2b7b80SBram Moolenaar . 7526c2b7b80SBram Moolenaar call assert_equal('ABCD', s) 7536c2b7b80SBram Moolenaarendfunc 7546c2b7b80SBram Moolenaar 7556c2b7b80SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 756