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