diff options
| author | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-04 12:41:27 +0300 |
|---|---|---|
| committer | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-04 12:41:27 +0300 |
| commit | 4f2d36194b4f299aa7509d815c07121039ea833b (patch) | |
| tree | f3ded014bad3a4c76ff6a22b8726ebaab68c3d13 /mnv/src/testdir/test_uniq.mnv | |
| parent | 5b578e70c314723a3cde5c9bfc2be0bf1dadc93b (diff) | |
| download | Project-Tick-4f2d36194b4f299aa7509d815c07121039ea833b.tar.gz Project-Tick-4f2d36194b4f299aa7509d815c07121039ea833b.zip | |
NOISSUE change uvim folder name to mnv
Signed-off-by: Mehmet Samet Duman <yongdohyun@projecttick.org>
Diffstat (limited to 'mnv/src/testdir/test_uniq.mnv')
| -rw-r--r-- | mnv/src/testdir/test_uniq.mnv | 610 |
1 files changed, 610 insertions, 0 deletions
diff --git a/mnv/src/testdir/test_uniq.mnv b/mnv/src/testdir/test_uniq.mnv new file mode 100644 index 0000000000..d36545460c --- /dev/null +++ b/mnv/src/testdir/test_uniq.mnv @@ -0,0 +1,610 @@ +" Tests for the ":uniq" command. + +" Tests for the ":uniq" command. +func Test_uniq_cmd() + let tests = [ + \ { + \ 'name' : 'Alphabetical uniq #1', + \ 'cmd' : '%uniq', + \ 'input' : [ + \ 'abc', + \ 'ab', + \ 'a', + \ 'a321', + \ 'a123', + \ 'a123', + \ 'a123', + \ 'a123', + \ 'a122', + \ 'a123', + \ 'b321', + \ 'c123d', + \ ' 123b', + \ 'c321d', + \ 'b322b', + \ 'b321', + \ 'b321b' + \ ], + \ 'expected' : [ + \ 'abc', + \ 'ab', + \ 'a', + \ 'a321', + \ 'a123', + \ 'a122', + \ 'a123', + \ 'b321', + \ 'c123d', + \ ' 123b', + \ 'c321d', + \ 'b322b', + \ 'b321', + \ 'b321b' + \ ] + \ }, + \ { + \ 'name' : 'Alphabetical uniq #2', + \ 'cmd' : '%uniq', + \ 'input' : [ + \ 'abc', + \ 'abc', + \ 'abc', + \ 'ab', + \ 'a', + \ 'a321', + \ 'a122', + \ 'b321', + \ 'a123', + \ 'a123', + \ 'c123d', + \ ' 123b', + \ 'c321d', + \ 'b322b', + \ 'b321', + \ 'b321b' + \ ], + \ 'expected' : [ + \ 'abc', + \ 'ab', + \ 'a', + \ 'a321', + \ 'a122', + \ 'b321', + \ 'a123', + \ 'c123d', + \ ' 123b', + \ 'c321d', + \ 'b322b', + \ 'b321', + \ 'b321b' + \ ] + \ }, + \ { + \ 'name' : 'alphabetical, uniqed input', + \ 'cmd' : 'uniq', + \ 'input' : [ + \ 'a', + \ 'b', + \ 'c', + \ ], + \ 'expected' : [ + \ 'a', + \ 'b', + \ 'c', + \ ] + \ }, + \ { + \ 'name' : 'alphabetical, uniqed input, unique at end', + \ 'cmd' : 'uniq', + \ 'input' : [ + \ 'aa', + \ 'bb', + \ 'cc', + \ 'cc', + \ ], + \ 'expected' : [ + \ 'aa', + \ 'bb', + \ 'cc', + \ ] + \ }, + \ { + \ 'name' : 'uniq one line buffer', + \ 'cmd' : 'uniq', + \ 'input' : [ + \ 'single line' + \ ], + \ 'expected' : [ + \ 'single line' + \ ] + \ }, + \ { + \ 'name' : 'uniq ignoring case', + \ 'cmd' : '%uniq i', + \ 'input' : [ + \ 'BB', + \ 'Cc', + \ 'cc', + \ 'Cc', + \ 'aa' + \ ], + \ 'expected' : [ + \ 'BB', + \ 'Cc', + \ 'aa' + \ ] + \ }, + \ { + \ 'name' : 'uniq not uniqued #1', + \ 'cmd' : '%uniq!', + \ 'input' : [ + \ 'aa', + \ 'cc', + \ 'cc', + \ 'cc', + \ 'bb', + \ 'aa', + \ 'yyy', + \ 'yyy', + \ 'zz' + \ ], + \ 'expected' : [ + \ 'cc', + \ 'yyy', + \ ] + \ }, + \ { + \ 'name' : 'uniq not uniqued #2', + \ 'cmd' : '%uniq!', + \ 'input' : [ + \ 'aa', + \ 'aa', + \ 'bb', + \ 'cc', + \ 'cc', + \ 'cc', + \ 'yyy', + \ 'yyy', + \ 'zz' + \ ], + \ 'expected' : [ + \ 'aa', + \ 'cc', + \ 'yyy', + \ ] + \ }, + \ { + \ 'name' : 'uniq not uniqued ("u" is ignored)', + \ 'cmd' : '%uniq! u', + \ 'input' : [ + \ 'aa', + \ 'cc', + \ 'cc', + \ 'cc', + \ 'bb', + \ 'aa', + \ 'yyy', + \ 'yyy', + \ 'zz' + \ ], + \ 'expected' : [ + \ 'cc', + \ 'yyy', + \ ] + \ }, + \ { + \ 'name' : 'uniq not uniqued, ignoring case', + \ 'cmd' : '%uniq! i', + \ 'input' : [ + \ 'aa', + \ 'cc', + \ 'cc', + \ 'Cc', + \ 'bb', + \ 'aa', + \ 'yyy', + \ 'yyy', + \ 'zz' + \ ], + \ 'expected' : [ + \ 'cc', + \ 'yyy', + \ ] + \ }, + \ { + \ 'name' : 'uniq only unique #1', + \ 'cmd' : '%uniq u', + \ 'input' : [ + \ 'aa', + \ 'cc', + \ 'cc', + \ 'cc', + \ 'bb', + \ 'aa', + \ 'yyy', + \ 'yyy', + \ 'zz' + \ ], + \ 'expected' : [ + \ 'aa', + \ 'bb', + \ 'aa', + \ 'zz' + \ ] + \ }, + \ { + \ 'name' : 'uniq only unique #2', + \ 'cmd' : '%uniq u', + \ 'input' : [ + \ 'aa', + \ 'aa', + \ 'bb', + \ 'cc', + \ 'cc', + \ 'cc', + \ 'yyy', + \ 'yyy', + \ 'zz' + \ ], + \ 'expected' : [ + \ 'bb', + \ 'zz' + \ ] + \ }, + \ { + \ 'name' : 'uniq only unique, ignoring case', + \ 'cmd' : '%uniq ui', + \ 'input' : [ + \ 'aa', + \ 'cc', + \ 'Cc', + \ 'cc', + \ 'bb', + \ 'aa', + \ 'yyy', + \ 'yyy', + \ 'zz' + \ ], + \ 'expected' : [ + \ 'aa', + \ 'bb', + \ 'aa', + \ 'zz' + \ ] + \ }, + \ { + \ 'name' : 'uniq on first 2 charscters', + \ 'cmd' : '%uniq r /^../', + \ 'input' : [ + \ 'aa', + \ 'cc', + \ 'cc1', + \ 'cc2', + \ 'bb', + \ 'aa', + \ 'yyy', + \ 'yyy2', + \ 'zz' + \ ], + \ 'expected' : [ + \ 'aa', + \ 'cc', + \ 'bb', + \ 'aa', + \ 'yyy', + \ 'zz' + \ ] + \ }, + \ { + \ 'name' : 'uniq on after 2 charscters', + \ 'cmd' : '%uniq /^../', + \ 'input' : [ + \ '11aa', + \ '11cc', + \ '13cc', + \ '13cc', + \ '13bb', + \ '13aa', + \ '12yyy', + \ '11yyy', + \ '11zz' + \ ], + \ 'expected' : [ + \ '11aa', + \ '11cc', + \ '13bb', + \ '13aa', + \ '12yyy', + \ '11zz' + \ ] + \ }, + \ { + \ 'name' : 'uniq on first 2 charscters, not uniqued', + \ 'cmd' : '%uniq! r /^../', + \ 'input' : [ + \ 'aa', + \ 'cc', + \ 'cc1', + \ 'cc2', + \ 'bb', + \ 'aa', + \ 'yyy', + \ 'yyy2', + \ 'zz' + \ ], + \ 'expected' : [ + \ 'cc', + \ 'yyy' + \ ] + \ }, + \ { + \ 'name' : 'uniq on after 2 charscters, not uniqued', + \ 'cmd' : '%uniq! /^../', + \ 'input' : [ + \ '11aa', + \ '11cc', + \ '13cc', + \ '13cc', + \ '13bb', + \ '13aa', + \ '12yyy', + \ '11yyy', + \ '11zz' + \ ], + \ 'expected' : [ + \ '11cc', + \ '12yyy' + \ ] + \ }, + \ { + \ 'name' : 'uniq on first 2 charscters, only unique', + \ 'cmd' : '%uniq ru /^../', + \ 'input' : [ + \ 'aa', + \ 'cc', + \ 'cc1', + \ 'cc2', + \ 'bb', + \ 'aa', + \ 'yyy', + \ 'yyy2', + \ 'zz' + \ ], + \ 'expected' : [ + \ 'aa', + \ 'bb', + \ 'aa', + \ 'zz' + \ ] + \ }, + \ { + \ 'name' : 'uniq on after 2 charscters, only unique', + \ 'cmd' : '%uniq u /^../', + \ 'input' : [ + \ '11aa', + \ '11cc', + \ '13cc', + \ '13cc', + \ '13bb', + \ '13aa', + \ '12yyy', + \ '11yyy', + \ '11zz' + \ ], + \ 'expected' : [ + \ '11aa', + \ '13bb', + \ '13aa', + \ '11zz' + \ ] + \ } + \ ] + + " This does not appear to work correctly on Mac. + if !has('mac') + if v:collate =~? '^\(en\|fr\)_ca.utf-\?8$' + " en_CA.utf-8 uniqs capitals before lower case + " 'Œ' is omitted because it can uniq before or after 'œ' + let tests += [ + \ { + \ 'name' : 'uniq with locale ' .. v:collate, + \ 'cmd' : '%uniq l', + \ 'input' : [ + \ 'A', + \ 'a', + \ 'À', + \ 'à', + \ 'E', + \ 'e', + \ 'É', + \ 'é', + \ 'È', + \ 'è', + \ 'O', + \ 'o', + \ 'Ô', + \ 'ô', + \ 'œ', + \ 'Z', + \ 'z' + \ ], + \ 'expected' : [ + \ 'A', + \ 'a', + \ 'À', + \ 'à', + \ 'E', + \ 'e', + \ 'É', + \ 'é', + \ 'È', + \ 'è', + \ 'O', + \ 'o', + \ 'Ô', + \ 'ô', + \ 'œ', + \ 'Z', + \ 'z' + \ ] + \ }, + \ ] + elseif v:collate =~? '^\(en\|es\|de\|fr\|it\|nl\).*\.utf-\?8$' + " With these locales, the accentuated letters are ordered + " similarly to the non-accentuated letters. + let tests += [ + \ { + \ 'name' : 'uniq with locale ' .. v:collate, + \ 'cmd' : '%uniq li', + \ 'input' : [ + \ 'A', + \ 'À', + \ 'a', + \ 'à', + \ 'à', + \ 'E', + \ 'È', + \ 'É', + \ 'o', + \ 'O', + \ 'Ô', + \ 'e', + \ 'è', + \ 'é', + \ 'ô', + \ 'Œ', + \ 'œ', + \ 'z', + \ 'Z' + \ ], + \ 'expected' : [ + \ 'A', + \ 'À', + \ 'a', + \ 'à', + \ 'E', + \ 'È', + \ 'É', + \ 'o', + \ 'O', + \ 'Ô', + \ 'e', + \ 'è', + \ 'é', + \ 'ô', + \ 'Œ', + \ 'œ', + \ 'z', + \ 'Z' + \ ] + \ }, + \ ] + endif + endif + + for t in tests + enew! + call append(0, t.input) + $delete _ + setlocal nomodified + execute t.cmd + + call assert_equal(t.expected, getline(1, '$'), t.name) + + " Previously, the ":uniq" command would set 'modified' even if the buffer + " contents did not change. Here, we check that this problem is fixed. + if t.input == t.expected + call assert_false(&modified, t.name . ': &mod is not correct') + else + call assert_true(&modified, t.name . ': &mod is not correct') + endif + endfor + + " Needs at least two lines for this test + call setline(1, ['line1', 'line2']) + call assert_fails('uniq no', 'E475:') + call assert_fails('uniq c', 'E475:') + call assert_fails('uniq #pat%', 'E654:') + call assert_fails('uniq /\%(/', 'E53:') + call assert_fails('333uniq', 'E16:') + call assert_fails('1,999uniq', 'E16:') + + enew! +endfunc + +func Test_uniq_cmd_report() + enew! + call append(0, repeat([1], 3) + repeat([2], 3) + repeat([3], 3)) + $delete _ + setlocal nomodified + let res = execute('%uniq') + + call assert_equal([1,2,3], map(getline(1, '$'), 'v:val+0')) + call assert_match("6 fewer lines", res) + enew! + call append(0, repeat([1], 3) + repeat([2], 3) + repeat([3], 3)) + $delete _ + setlocal nomodified report=10 + let res = execute('%uniq') + + call assert_equal([1,2,3], map(getline(1, '$'), 'v:val+0')) + call assert_equal("", res) + enew! + call append(0, repeat([1], 3) + repeat([2], 3) + repeat([3], 3)) + $delete _ + setl report&mnv + setlocal nomodified + let res = execute('1g/^/%uniq') + + call assert_equal([1,2,3], map(getline(1, '$'), 'v:val+0')) + " the output comes from the :g command, not from the :uniq + call assert_match("6 fewer lines", res) + enew! +endfunc + +" Test for a :uniq command followed by another command +func Test_uniq_followed_by_cmd() + new + let var = '' + call setline(1, ['cc', 'aa', 'bb']) + %uniq | let var = "uniqcmdtest" + call assert_equal(var, "uniqcmdtest") + call assert_equal(['cc', 'aa', 'bb'], getline(1, '$')) + " Test for :uniq followed by a comment + call setline(1, ['3b', '3b', '3b', '1c', '2a']) + %uniq " uniq alphabetically + call assert_equal(['3b', '1c', '2a'], getline(1, '$')) + bw! +endfunc + +" Test for retaining marks across a :uniq +func Test_uniq_with_marks() + new + call setline(1, ['cc', 'cc', 'aa', 'bb', 'bb', 'bb', 'bb']) + call setpos("'c", [0, 1, 0, 0]) + call setpos("'a", [0, 4, 0, 0]) + call setpos("'b", [0, 7, 0, 0]) + %uniq + call assert_equal(['cc', 'aa', 'bb'], getline(1, '$')) + call assert_equal(1, line("'c")) + call assert_equal(0, line("'a")) + call assert_equal(0, line("'b")) + bw! +endfunc + +" Test for undo after a :uniq +func Test_uniq_undo() + new + let li = ['cc', 'cc', 'aa', 'bb', 'bb', 'bb', 'bb', 'aa'] + call writefile(li, 'XfileUniq', 'D') + edit XfileUniq + uniq + call assert_equal(['cc', 'aa', 'bb', 'aa'], getline(1, '$')) + call assert_true(&modified) + undo + call assert_equal(li, getline(1, '$')) + call assert_false(&modified) + bw! +endfunc + +" mnv: shiftwidth=2 sts=2 expandtab |
