1a703aaeeSBram Moolenaar" Test for wordcount() function
2a703aaeeSBram Moolenaar
3a703aaeeSBram Moolenaarfunc Test_wordcount()
4a703aaeeSBram Moolenaar  let save_enc = &enc
5a703aaeeSBram Moolenaar  set encoding=utf-8
6a703aaeeSBram Moolenaar  set selection=inclusive fileformat=unix fileformats=unix
7a703aaeeSBram Moolenaar
8a703aaeeSBram Moolenaar  new
9a703aaeeSBram Moolenaar
10a703aaeeSBram Moolenaar  " Test 1: empty window
11a703aaeeSBram Moolenaar  call assert_equal({'chars': 0, 'cursor_chars': 0, 'words': 0, 'cursor_words': 0,
12a703aaeeSBram Moolenaar				\ 'bytes': 0, 'cursor_bytes': 0}, wordcount())
13a703aaeeSBram Moolenaar
14a703aaeeSBram Moolenaar  " Test 2: some words, cursor at start
15a703aaeeSBram Moolenaar  call append(1, 'one two three')
16a703aaeeSBram Moolenaar  call cursor([1, 1, 0])
17a703aaeeSBram Moolenaar  call assert_equal({'chars': 15, 'cursor_chars': 1, 'words': 3, 'cursor_words': 0,
18a703aaeeSBram Moolenaar				\ 'bytes': 15, 'cursor_bytes': 1}, wordcount())
19a703aaeeSBram Moolenaar
20a703aaeeSBram Moolenaar  " Test 3: some words, cursor at end
21a703aaeeSBram Moolenaar  %d _
22a703aaeeSBram Moolenaar  call append(1, 'one two three')
23a703aaeeSBram Moolenaar  call cursor([2, 99, 0])
24a703aaeeSBram Moolenaar  call assert_equal({'chars': 15, 'cursor_chars': 14, 'words': 3, 'cursor_words': 3,
25a703aaeeSBram Moolenaar				\ 'bytes': 15, 'cursor_bytes': 14}, wordcount())
26a703aaeeSBram Moolenaar
27a703aaeeSBram Moolenaar  " Test 4: some words, cursor at end, ve=all
28a703aaeeSBram Moolenaar  set ve=all
29a703aaeeSBram Moolenaar  %d _
30a703aaeeSBram Moolenaar  call append(1, 'one two three')
31a703aaeeSBram Moolenaar  call cursor([2, 99, 0])
32a703aaeeSBram Moolenaar  call assert_equal({'chars': 15, 'cursor_chars': 15, 'words': 3, 'cursor_words': 3,
33a703aaeeSBram Moolenaar				\ 'bytes': 15, 'cursor_bytes': 15}, wordcount())
34a703aaeeSBram Moolenaar  set ve=
35a703aaeeSBram Moolenaar
36a703aaeeSBram Moolenaar  " Test 5: several lines with words
37a703aaeeSBram Moolenaar  %d _
38a703aaeeSBram Moolenaar  call append(1, ['one two three', 'one two three', 'one two three'])
39a703aaeeSBram Moolenaar  call cursor([4, 99, 0])
40a703aaeeSBram Moolenaar  call assert_equal({'chars': 43, 'cursor_chars': 42, 'words': 9, 'cursor_words': 9,
41a703aaeeSBram Moolenaar				\ 'bytes': 43, 'cursor_bytes': 42}, wordcount())
42a703aaeeSBram Moolenaar
43a703aaeeSBram Moolenaar  " Test 6: one line with BOM set
44a703aaeeSBram Moolenaar  %d _
45a703aaeeSBram Moolenaar  call append(1, 'one two three')
46a703aaeeSBram Moolenaar  set bomb
47a703aaeeSBram Moolenaar  w! Xtest
48a703aaeeSBram Moolenaar  call cursor([2, 99, 0])
49a703aaeeSBram Moolenaar  call assert_equal({'chars': 15, 'cursor_chars': 14, 'words': 3, 'cursor_words': 3,
50a703aaeeSBram Moolenaar				\ 'bytes': 18, 'cursor_bytes': 14}, wordcount())
51a703aaeeSBram Moolenaar  set nobomb
52a703aaeeSBram Moolenaar  w!
53a703aaeeSBram Moolenaar  call delete('Xtest')
54a703aaeeSBram Moolenaar
55a703aaeeSBram Moolenaar  " Test 7: one line with multibyte words
56a703aaeeSBram Moolenaar  %d _
57a703aaeeSBram Moolenaar  call append(1, ['Äne M¤ne Müh'])
58a703aaeeSBram Moolenaar  call cursor([2, 99, 0])
59a703aaeeSBram Moolenaar  call assert_equal({'chars': 14, 'cursor_chars': 13, 'words': 3, 'cursor_words': 3,
60a703aaeeSBram Moolenaar				\ 'bytes': 17, 'cursor_bytes': 16}, wordcount())
61a703aaeeSBram Moolenaar
62a703aaeeSBram Moolenaar  " Test 8: several lines with multibyte words
63a703aaeeSBram Moolenaar  %d _
64a703aaeeSBram Moolenaar  call append(1, ['Äne M¤ne Müh', 'und raus bist dü!'])
65a703aaeeSBram Moolenaar  call cursor([3, 99, 0])
66a703aaeeSBram Moolenaar  call assert_equal({'chars': 32, 'cursor_chars': 31, 'words': 7, 'cursor_words': 7,
67a703aaeeSBram Moolenaar				\ 'bytes': 36, 'cursor_bytes': 35}, wordcount())
68a703aaeeSBram Moolenaar
69a703aaeeSBram Moolenaar  " Visual map to capture wordcount() in visual mode
70a703aaeeSBram Moolenaar  vnoremap <expr> <F2> execute("let g:visual_stat = wordcount()")
71a703aaeeSBram Moolenaar
72a703aaeeSBram Moolenaar  " Test 9: visual mode, complete buffer
73a703aaeeSBram Moolenaar  let g:visual_stat = {}
74a703aaeeSBram Moolenaar  %d _
75a703aaeeSBram Moolenaar  call append(1, ['Äne M¤ne Müh', 'und raus bist dü!'])
76a703aaeeSBram Moolenaar  " start visual mode and select the complete buffer
77a703aaeeSBram Moolenaar  0
78a703aaeeSBram Moolenaar  exe "normal V2j\<F2>y"
79a703aaeeSBram Moolenaar  call assert_equal({'chars': 32, 'words': 7, 'bytes': 36, 'visual_chars': 32,
80a703aaeeSBram Moolenaar				\ 'visual_words': 7, 'visual_bytes': 36}, g:visual_stat)
81a703aaeeSBram Moolenaar
82a703aaeeSBram Moolenaar  " Test 10: visual mode (empty)
83a703aaeeSBram Moolenaar  %d _
84a703aaeeSBram Moolenaar  call append(1, ['Äne M¤ne Müh', 'und raus bist dü!'])
85a703aaeeSBram Moolenaar  " start visual mode and select the complete buffer
86a703aaeeSBram Moolenaar  0
87a703aaeeSBram Moolenaar  exe "normal v$\<F2>y"
88a703aaeeSBram Moolenaar  call assert_equal({'chars': 32, 'words': 7, 'bytes': 36, 'visual_chars': 1,
89a703aaeeSBram Moolenaar				\ 'visual_words': 0, 'visual_bytes': 1}, g:visual_stat)
90a703aaeeSBram Moolenaar
91a703aaeeSBram Moolenaar  " Test 11: visual mode, single line
92a703aaeeSBram Moolenaar  %d _
93a703aaeeSBram Moolenaar  call append(1, ['Äne M¤ne Müh', 'und raus bist dü!'])
94a703aaeeSBram Moolenaar  " start visual mode and select the complete buffer
95a703aaeeSBram Moolenaar  2
96a703aaeeSBram Moolenaar  exe "normal 0v$\<F2>y"
97a703aaeeSBram Moolenaar  call assert_equal({'chars': 32, 'words': 7, 'bytes': 36, 'visual_chars': 13,
98a703aaeeSBram Moolenaar				\ 'visual_words': 3, 'visual_bytes': 16}, g:visual_stat)
99a703aaeeSBram Moolenaar
100a703aaeeSBram Moolenaar  set selection& fileformat& fileformats&
101a703aaeeSBram Moolenaar  let &enc = save_enc
102a703aaeeSBram Moolenaar  enew!
103a703aaeeSBram Moolenaar  close
104a703aaeeSBram Moolenaarendfunc
105*6d91bcb4SBram Moolenaar
106*6d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
107