123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- -- Test for wordcount() function
- local helpers = require('test.functional.helpers')(after_each)
- local feed, insert, source = helpers.feed, helpers.insert, helpers.source
- local clear, command = helpers.clear, helpers.command
- local eq, eval = helpers.eq, helpers.eval
- local poke_eventloop = helpers.poke_eventloop
- describe('wordcount', function()
- before_each(clear)
- it('is working', function()
- command('set selection=inclusive fileformat=unix fileformats=unix')
- insert([=[
- RESULT test:]=])
- poke_eventloop()
- command('new')
- source([=[
- function DoRecordWin(...)
- wincmd k
- if exists("a:1")
- call cursor(a:1)
- endif
- let result=[]
- call add(result, getline(1, '$'))
- call add(result, wordcount())
- wincmd j
- return result
- endfunction
- ]=])
- source([=[
- function PutInWindow(args)
- wincmd k
- %d _
- call append(1, a:args)
- wincmd j
- endfunction
- ]=])
- source([=[
- function! STL()
- if mode() =~? 'V'
- let g:visual_stat=wordcount()
- endif
- return string(wordcount())
- endfunction
- ]=])
- -- Test 1: empty window
- eq(eval('DoRecordWin()'),
- eval([=[
- [[''], {'chars': 0, 'cursor_chars': 0, 'words': 0, 'cursor_words': 0, 'bytes': 0, 'cursor_bytes': 0}]
- ]=])
- )
- -- Test 2: some words, cursor at start
- command([[call PutInWindow('one two three')]])
- eq(eval('DoRecordWin([1, 1, 0])'),
- eval([=[
- [['', 'one two three'], {'chars': 15, 'cursor_chars': 1, 'words': 3, 'cursor_words': 0, 'bytes': 15, 'cursor_bytes': 1}]
- ]=])
- )
- -- Test 3: some words, cursor at end
- command([[call PutInWindow('one two three')]])
- eq(eval('DoRecordWin([2, 99, 0])'),
- eval([=[
- [['', 'one two three'], {'chars': 15, 'cursor_chars': 14, 'words': 3, 'cursor_words': 3, 'bytes': 15, 'cursor_bytes': 14}]
- ]=])
- )
- -- Test 4: some words, cursor at end, ve=all
- command('set ve=all')
- command([[call PutInWindow('one two three')]])
- eq(eval('DoRecordWin([2,99,0])'),
- eval([=[
- [['', 'one two three'], {'chars': 15, 'cursor_chars': 15, 'words': 3, 'cursor_words': 3, 'bytes': 15, 'cursor_bytes': 15}]
- ]=])
- )
- command('set ve=')
- -- Test 5: several lines with words
- command([=[call PutInWindow(['one two three', 'one two three', 'one two three'])]=])
- eq(eval('DoRecordWin([4,99,0])'),
- eval([=[
- [['', 'one two three', 'one two three', 'one two three'], {'chars': 43, 'cursor_chars': 42, 'words': 9, 'cursor_words': 9, 'bytes': 43, 'cursor_bytes': 42}]
- ]=])
- )
- -- Test 6: one line with BOM set
- command([[call PutInWindow('one two three')]])
- command('wincmd k')
- command('set bomb')
- command('wincmd j')
- eq(eval('DoRecordWin([2,99,0])'),
- eval([=[
- [['', 'one two three'], {'chars': 15, 'cursor_chars': 14, 'words': 3, 'cursor_words': 3, 'bytes': 18, 'cursor_bytes': 14}]
- ]=])
- )
- command('wincmd k')
- command('set nobomb')
- command('wincmd j')
- -- Test 7: one line with multibyte words
- command([=[call PutInWindow(['Äne M¤ne Müh'])]=])
- eq(eval('DoRecordWin([2,99,0])'),
- eval([=[
- [['', 'Äne M¤ne Müh'], {'chars': 14, 'cursor_chars': 13, 'words': 3, 'cursor_words': 3, 'bytes': 17, 'cursor_bytes': 16}]
- ]=])
- )
- -- Test 8: several lines with multibyte words
- command([=[call PutInWindow(['Äne M¤ne Müh', 'und raus bist dü!'])]=])
- eq(eval('DoRecordWin([3,99,0])'),
- eval([=[
- [['', 'Äne M¤ne Müh', 'und raus bist dü!'], {'chars': 32, 'cursor_chars': 31, 'words': 7, 'cursor_words': 7, 'bytes': 36, 'cursor_bytes': 35}]
- ]=])
- )
- -- Test 9: visual mode, complete buffer
- command([=[call PutInWindow(['Äne M¤ne Müh', 'und raus bist dü!'])]=])
- command('wincmd k')
- command('set ls=2 stl=%{STL()}')
- -- -- Start visual mode quickly and select complete buffer.
- command('0')
- feed('V2jy<cr>')
- poke_eventloop()
- command('set stl= ls=1')
- command('let log=DoRecordWin([3,99,0])')
- command('let log[1]=g:visual_stat')
- eq(eval('log'),
- eval([=[
- [['', 'Äne M¤ne Müh', 'und raus bist dü!'], {'chars': 32, 'words': 7, 'bytes': 36, 'visual_chars': 32, 'visual_words': 7, 'visual_bytes': 36}]
- ]=])
- )
- -- Test 10: visual mode (empty)
- command([=[call PutInWindow(['Äne M¤ne Müh', 'und raus bist dü!'])]=])
- command('wincmd k')
- command('set ls=2 stl=%{STL()}')
- -- Start visual mode quickly and select complete buffer.
- command('0')
- feed('v$y<cr>')
- poke_eventloop()
- command('set stl= ls=1')
- command('let log=DoRecordWin([3,99,0])')
- command('let log[1]=g:visual_stat')
- eq(eval('log'),
- eval([=[
- [['', 'Äne M¤ne Müh', 'und raus bist dü!'], {'chars': 32, 'words': 7, 'bytes': 36, 'visual_chars': 1, 'visual_words': 0, 'visual_bytes': 1}]
- ]=])
- )
- -- Test 11: visual mode, single line
- command([=[call PutInWindow(['Äne M¤ne Müh', 'und raus bist dü!'])]=])
- command('wincmd k')
- command('set ls=2 stl=%{STL()}')
- -- Start visual mode quickly and select complete buffer.
- command('2')
- feed('0v$y<cr>')
- poke_eventloop()
- command('set stl= ls=1')
- command('let log=DoRecordWin([3,99,0])')
- command('let log[1]=g:visual_stat')
- eq(eval('log'),
- eval([=[
- [['', 'Äne M¤ne Müh', 'und raus bist dü!'], {'chars': 32, 'words': 7, 'bytes': 36, 'visual_chars': 13, 'visual_words': 3, 'visual_bytes': 16}]
- ]=])
- )
- end)
- end)
|