blob: 5ee9116685d80ac3c950724cd95ab366452059fc [file] [log] [blame]
Bram Moolenaar97293012011-07-18 19:40:27 +02001Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c)
Bram Moolenaarf17968b2013-08-09 19:48:40 +02002Also test "g~ap".
Bram Moolenaar97293012011-07-18 19:40:27 +02003
4STARTTEST
5:so small.vim
6:if !has("multi_byte")
7: e! test.ok
8: w! test.out
9: qa!
10:endif
11:set enc=utf8
Bram Moolenaar901e58c2015-08-11 18:33:48 +020012ggdG:
Bram Moolenaar97293012011-07-18 19:40:27 +020013:
14:function! Ch(a, op, b, expected)
15: if eval(printf('"%s" %s "%s"', a:a, a:op, a:b)) != a:expected
16: call append(line('$'), printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected))
17: else
18: let b:passed += 1
19: endif
20:endfunction
21:
22:function! Chk(a, b, result)
23: if a:result == 0
24: call Ch(a:a, '==?', a:b, 1)
25: call Ch(a:a, '!=?', a:b, 0)
26: call Ch(a:a, '<=?', a:b, 1)
27: call Ch(a:a, '>=?', a:b, 1)
28: call Ch(a:a, '<?', a:b, 0)
29: call Ch(a:a, '>?', a:b, 0)
30: elseif a:result > 0
31: call Ch(a:a, '==?', a:b, 0)
32: call Ch(a:a, '!=?', a:b, 1)
33: call Ch(a:a, '<=?', a:b, 0)
34: call Ch(a:a, '>=?', a:b, 1)
35: call Ch(a:a, '<?', a:b, 0)
36: call Ch(a:a, '>?', a:b, 1)
37: else
38: call Ch(a:a, '==?', a:b, 0)
39: call Ch(a:a, '!=?', a:b, 1)
40: call Ch(a:a, '<=?', a:b, 1)
41: call Ch(a:a, '>=?', a:b, 0)
42: call Ch(a:a, '<?', a:b, 1)
43: call Ch(a:a, '>?', a:b, 0)
44: endif
45:endfunction
46:
47:function! Check(a, b, result)
48: call Chk(a:a, a:b, a:result)
49: call Chk(a:b, a:a, -a:result)
50:endfunction
51:
52:function! LT(a, b)
53: call Check(a:a, a:b, -1)
54:endfunction
55:
56:function! GT(a, b)
57: call Check(a:a, a:b, 1)
58:endfunction
59:
60:function! EQ(a, b)
61: call Check(a:a, a:b, 0)
62:endfunction
63:
64:let b:passed=0
65:call EQ('', '')
66:call LT('', 'a')
67:call EQ('abc', 'abc')
68:call EQ('Abc', 'abC')
69:call LT('ab', 'abc')
70:call LT('AB', 'abc')
71:call LT('ab', 'aBc')
72: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')
73: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')
74:call EQ('\xe2\x84\xaa', 'k')
75:call LT('\xe2\x84\xaa', 'kkkkkk')
76:call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk')
77:call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa')
78:call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6')
79:call EQ('Abc\x80', 'AbC\x80')
80:call LT('Abc\x80', 'AbC\x81')
81:call LT('Abc', 'AbC\x80')
82:call LT('abc\x80DEF', 'abc\x80def') " case folding stops at the first bad character
83:call LT('\xc3XYZ', '\xc3xyz')
84:call EQ('\xef\xbc\xba', '\xef\xbd\x9a') " FF3A (upper), FF5A (lower)
85: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
86:call LT('\xc3', '\xc3\x83')
87:call EQ('\xc3\xa3xYz', '\xc3\x83XyZ')
88:for n in range(0x60, 0xFF) | call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n)) | endfor
89:for n in range(0x80, 0xBF) | call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
90:for n in range(0xC0, 0xFF) | call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
91:call append(0, printf('%d checks passed', b:passed))
Bram Moolenaarf17968b2013-08-09 19:48:40 +020092:"
93:" test that g~ap changes one paragraph only.
94:new
95iabcd
96
97defggg0g~ap:let lns = getline(1,3)
98:q!
99:call append(line('$'), lns)
100:"
Bram Moolenaar97293012011-07-18 19:40:27 +0200101:wq! test.out
102ENDTEST
103