1" Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c) 2" Also test "g~ap". 3 4if !has("multi_byte") 5 finish 6endif 7 8func 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)) 11endfunc 12 13func 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 36endfunc 37 38func Check(a, b, result) 39 call Chk(a:a, a:b, a:result) 40 call Chk(a:b, a:a, -a:result) 41endfunc 42 43func LT(a, b) 44 call Check(a:a, a:b, -1) 45endfunc 46 47func GT(a, b) 48 call Check(a:a, a:b, 1) 49endfunc 50 51func EQ(a, b) 52 call Check(a:a, a:b, 0) 53endfunc 54 55func 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 88endfunc 89 90" test that g~ap changes one paragraph only. 91func Test_gap() 92 new 93 call feedkeys("iabcd\n\ndefggg0g~ap", "tx") 94 call assert_equal(["ABCD", "", "defg"], getline(1,3)) 95endfunc 96