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