comparison src/testdir/test_utf8_comparisons.vim @ 11603:4e66689bced6 v8.0.0684

patch 8.0.0684: old style tests are not nice commit https://github.com/vim/vim/commit/28b238225ae618f63cfe5d3d723120960a941da7 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jun 27 18:29:17 2017 +0200 patch 8.0.0684: old style tests are not nice Problem: Old style tests are not nice. Solution: Turn two tests into new style. (pschuh, closes https://github.com/vim/vim/issues/1797)
author Christian Brabandt <cb@256bit.org>
date Tue, 27 Jun 2017 18:30:03 +0200
parents
children 63b02fcf1361
comparison
equal deleted inserted replaced
11602:f36644d90543 11603:4e66689bced6
1 " Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c)
2 " Also test "g~ap".
3
4 if !has("multi_byte")
5 finish
6 endif
7
8 function! Ch(a, op, b, expected)
9 call assert_equal(eval(printf('"%s" %s "%s"', a:a, a:op, a:b)), a:expected,
10 \ printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected))
11 endfunction
12
13 function! Chk(a, b, result)
14 if a:result == 0
15 call Ch(a:a, '==?', a:b, 1)
16 call Ch(a:a, '!=?', a:b, 0)
17 call Ch(a:a, '<=?', a:b, 1)
18 call Ch(a:a, '>=?', a:b, 1)
19 call Ch(a:a, '<?', a:b, 0)
20 call Ch(a:a, '>?', a:b, 0)
21 elseif a:result > 0
22 call Ch(a:a, '==?', a:b, 0)
23 call Ch(a:a, '!=?', a:b, 1)
24 call Ch(a:a, '<=?', a:b, 0)
25 call Ch(a:a, '>=?', a:b, 1)
26 call Ch(a:a, '<?', a:b, 0)
27 call Ch(a:a, '>?', a:b, 1)
28 else
29 call Ch(a:a, '==?', a:b, 0)
30 call Ch(a:a, '!=?', a:b, 1)
31 call Ch(a:a, '<=?', a:b, 1)
32 call Ch(a:a, '>=?', a:b, 0)
33 call Ch(a:a, '<?', a:b, 1)
34 call Ch(a:a, '>?', a:b, 0)
35 endif
36 endfunction
37
38 function! Check(a, b, result)
39 call Chk(a:a, a:b, a:result)
40 call Chk(a:b, a:a, -a:result)
41 endfunction
42
43 function! LT(a, b)
44 call Check(a:a, a:b, -1)
45 endfunction
46
47 function! GT(a, b)
48 call Check(a:a, a:b, 1)
49 endfunction
50
51 function! EQ(a, b)
52 call Check(a:a, a:b, 0)
53 endfunction
54
55 function Test_comparisons()
56 call EQ('', '')
57 call LT('', 'a')
58 call EQ('abc', 'abc')
59 call EQ('Abc', 'abC')
60 call LT('ab', 'abc')
61 call LT('AB', 'abc')
62 call LT('ab', 'aBc')
63 call EQ('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xb9\xd0\xa6\xd0\xa3\xd0\xba\xd0\x95\xd0\xbd')
64 call LT('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xaf\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd')
65 call EQ('\xe2\x84\xaa', 'k')
66 call LT('\xe2\x84\xaa', 'kkkkkk')
67 call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk')
68 call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa')
69 call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6')
70 call EQ('Abc\x80', 'AbC\x80')
71 call LT('Abc\x80', 'AbC\x81')
72 call LT('Abc', 'AbC\x80')
73 call LT('abc\x80DEF', 'abc\x80def') " case folding stops at the first bad character
74 call LT('\xc3XYZ', '\xc3xyz')
75 call EQ('\xef\xbc\xba', '\xef\xbd\x9a') " FF3A (upper), FF5A (lower)
76 call GT('\xef\xbc\xba', '\xef\xbc\xff') " first string is ok and equals \xef\xbd\x9a after folding, second string is illegal and was left unchanged, then the strings were bytewise compared
77 call LT('\xc3', '\xc3\x83')
78 call EQ('\xc3\xa3xYz', '\xc3\x83XyZ')
79 for n in range(0x60, 0xFF)
80 call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n))
81 endfor
82 for n in range(0x80, 0xBF)
83 call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n))
84 endfor
85 for n in range(0xC0, 0xFF)
86 call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n))
87 endfor
88 endfunction
89
90 " test that g~ap changes one paragraph only.
91 function Test_gap()
92 new
93 call feedkeys("iabcd\n\ndefggg0g~ap", "tx")
94 call assert_equal(["ABCD", "", "defg"], getline(1,3))
95 endfunction