xref: /vim-8.2.3635/src/testdir/test_tcl.vim (revision dcfc3111)
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