128b23822SBram Moolenaar" Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c) 228b23822SBram Moolenaar" Also test "g~ap". 328b23822SBram Moolenaar 41e115360SBram Moolenaarfunc Ch(a, op, b, expected) 528b23822SBram Moolenaar call assert_equal(eval(printf('"%s" %s "%s"', a:a, a:op, a:b)), a:expected, 628b23822SBram Moolenaar \ printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected)) 71e115360SBram Moolenaarendfunc 828b23822SBram Moolenaar 91e115360SBram Moolenaarfunc Chk(a, b, result) 1028b23822SBram Moolenaar if a:result == 0 1128b23822SBram Moolenaar call Ch(a:a, '==?', a:b, 1) 1228b23822SBram Moolenaar call Ch(a:a, '!=?', a:b, 0) 1328b23822SBram Moolenaar call Ch(a:a, '<=?', a:b, 1) 1428b23822SBram Moolenaar call Ch(a:a, '>=?', a:b, 1) 1528b23822SBram Moolenaar call Ch(a:a, '<?', a:b, 0) 1628b23822SBram Moolenaar call Ch(a:a, '>?', a:b, 0) 1728b23822SBram Moolenaar elseif a:result > 0 1828b23822SBram Moolenaar call Ch(a:a, '==?', a:b, 0) 1928b23822SBram Moolenaar call Ch(a:a, '!=?', a:b, 1) 2028b23822SBram Moolenaar call Ch(a:a, '<=?', a:b, 0) 2128b23822SBram Moolenaar call Ch(a:a, '>=?', a:b, 1) 2228b23822SBram Moolenaar call Ch(a:a, '<?', a:b, 0) 2328b23822SBram Moolenaar call Ch(a:a, '>?', a:b, 1) 2428b23822SBram Moolenaar else 2528b23822SBram Moolenaar call Ch(a:a, '==?', a:b, 0) 2628b23822SBram Moolenaar call Ch(a:a, '!=?', a:b, 1) 2728b23822SBram Moolenaar call Ch(a:a, '<=?', a:b, 1) 2828b23822SBram Moolenaar call Ch(a:a, '>=?', a:b, 0) 2928b23822SBram Moolenaar call Ch(a:a, '<?', a:b, 1) 3028b23822SBram Moolenaar call Ch(a:a, '>?', a:b, 0) 3128b23822SBram Moolenaar endif 321e115360SBram Moolenaarendfunc 3328b23822SBram Moolenaar 341e115360SBram Moolenaarfunc Check(a, b, result) 3528b23822SBram Moolenaar call Chk(a:a, a:b, a:result) 3628b23822SBram Moolenaar call Chk(a:b, a:a, -a:result) 371e115360SBram Moolenaarendfunc 3828b23822SBram Moolenaar 391e115360SBram Moolenaarfunc LT(a, b) 4028b23822SBram Moolenaar call Check(a:a, a:b, -1) 411e115360SBram Moolenaarendfunc 4228b23822SBram Moolenaar 431e115360SBram Moolenaarfunc GT(a, b) 4428b23822SBram Moolenaar call Check(a:a, a:b, 1) 451e115360SBram Moolenaarendfunc 4628b23822SBram Moolenaar 471e115360SBram Moolenaarfunc EQ(a, b) 4828b23822SBram Moolenaar call Check(a:a, a:b, 0) 491e115360SBram Moolenaarendfunc 5028b23822SBram Moolenaar 511e115360SBram Moolenaarfunc Test_comparisons() 5228b23822SBram Moolenaar call EQ('', '') 5328b23822SBram Moolenaar call LT('', 'a') 5428b23822SBram Moolenaar call EQ('abc', 'abc') 5528b23822SBram Moolenaar call EQ('Abc', 'abC') 5628b23822SBram Moolenaar call LT('ab', 'abc') 5728b23822SBram Moolenaar call LT('AB', 'abc') 5828b23822SBram Moolenaar call LT('ab', 'aBc') 5928b23822SBram Moolenaar 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') 6028b23822SBram Moolenaar 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') 6128b23822SBram Moolenaar call EQ('\xe2\x84\xaa', 'k') 6228b23822SBram Moolenaar call LT('\xe2\x84\xaa', 'kkkkkk') 6328b23822SBram Moolenaar call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk') 6428b23822SBram Moolenaar call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa') 6528b23822SBram Moolenaar call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6') 6628b23822SBram Moolenaar call EQ('Abc\x80', 'AbC\x80') 6728b23822SBram Moolenaar call LT('Abc\x80', 'AbC\x81') 6828b23822SBram Moolenaar call LT('Abc', 'AbC\x80') 6928b23822SBram Moolenaar call LT('abc\x80DEF', 'abc\x80def') " case folding stops at the first bad character 7028b23822SBram Moolenaar call LT('\xc3XYZ', '\xc3xyz') 7128b23822SBram Moolenaar call EQ('\xef\xbc\xba', '\xef\xbd\x9a') " FF3A (upper), FF5A (lower) 7228b23822SBram Moolenaar 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 7328b23822SBram Moolenaar call LT('\xc3', '\xc3\x83') 7428b23822SBram Moolenaar call EQ('\xc3\xa3xYz', '\xc3\x83XyZ') 7528b23822SBram Moolenaar for n in range(0x60, 0xFF) 7628b23822SBram Moolenaar call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n)) 7728b23822SBram Moolenaar endfor 7828b23822SBram Moolenaar for n in range(0x80, 0xBF) 7928b23822SBram Moolenaar call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) 8028b23822SBram Moolenaar endfor 8128b23822SBram Moolenaar for n in range(0xC0, 0xFF) 8228b23822SBram Moolenaar call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) 8328b23822SBram Moolenaar endfor 841e115360SBram Moolenaarendfunc 8528b23822SBram Moolenaar 8628b23822SBram Moolenaar" test that g~ap changes one paragraph only. 871e115360SBram Moolenaarfunc Test_gap() 8828b23822SBram Moolenaar new 899134f1ecSBram Moolenaar " setup text 909134f1ecSBram Moolenaar call feedkeys("iabcd\<cr>\<cr>defg", "tx") 919134f1ecSBram Moolenaar " modify only first line 929134f1ecSBram Moolenaar call feedkeys("gg0g~ap", "tx") 9328b23822SBram Moolenaar call assert_equal(["ABCD", "", "defg"], getline(1,3)) 941e115360SBram Moolenaarendfunc 95*6d91bcb4SBram Moolenaar 96*6d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 97