diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/functional/legacy/069_multibyte_formatting_spec.lua | 340 |
1 files changed, 340 insertions, 0 deletions
diff --git a/test/functional/legacy/069_multibyte_formatting_spec.lua b/test/functional/legacy/069_multibyte_formatting_spec.lua new file mode 100644 index 0000000000..6edcd8b7f2 --- /dev/null +++ b/test/functional/legacy/069_multibyte_formatting_spec.lua @@ -0,0 +1,340 @@ +-- Test for multibyte text formatting. +-- Also test, that 'mps' with multibyte chars works. +-- And test "ra" on multibyte characters. +-- Also test byteidx() and byteidxcomp() + +local helpers = require('test.functional.helpers')(after_each) +local feed, insert, eq, eval, clear, execute, expect = helpers.feed, + helpers.insert, helpers.eq, helpers.eval, helpers.clear, helpers.execute, + helpers.expect + +describe('multibyte text', function() + before_each(clear) + + it('formatting with "set fo=t"', function() + insert([[ + { + XYZ + abc XYZ + }]]) + execute('/^{/+1') + execute('set tw=2 fo=t') + feed('gqgqjgqgqo<cr>') + feed('XYZ<cr>') + feed('abc XYZ<esc><esc>') + expect([[ + { + XYZ + abc + XYZ + + XYZ + abc + XYZ + }]]) + end) + + it('formatting with "set fo=tm"', function() + insert([[ + { + X + Xa + X a + XY + X Y + }]]) + execute('/^{/+1') + execute('set tw=1 fo=tm') + feed('gqgqjgqgqjgqgqjgqgqjgqgqo<cr>') + feed('X<cr>') + feed('Xa<cr>') + feed('X a<cr>') + feed('XY<cr>') + feed('X Y<esc><esc>') + expect([[ + { + X + X + a + X + a + X + Y + X + Y + + X + X + a + X + a + X + Y + X + Y + }]]) + end) + + it('formatting with "set fo=tm" (part 2)', function() + insert([[ + { + X + Xa + X a + XY + X Y + aX + abX + abcX + abX c + abXY + }]]) + execute('/^{/+1') + execute('set tw=2 fo=tm') + feed('gqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqo<cr>') + feed('X<cr>') + feed('Xa<cr>') + feed('X a<cr>') + feed('XY<cr>') + feed('X Y<cr>') + feed('aX<cr>') + feed('abX<cr>') + feed('abcX<cr>') + feed('abX c<cr>') + feed('abXY<esc><esc>') + expect([[ + { + X + X + a + X + a + X + Y + X + Y + a + X + ab + X + abc + X + ab + X + c + ab + X + Y + + X + X + a + X + a + X + Y + X + Y + a + X + ab + X + abc + X + ab + X + c + ab + X + Y + }]]) + end) + + it('formatting with "set ai fo=tm"', function() + insert([[ + { + X + Xa + }]]) + execute('/^{/+1') + execute('set ai tw=2 fo=tm') + feed('gqgqjgqgqo<cr>') + feed('X<cr>') + feed('Xa<esc>') + expect([[ + { + X + X + a + + X + X + a + }]]) + end) + + it('formatting with "set ai fo=tm" (part 2)', function() + insert([[ + { + X + Xa + }]]) + execute('/^{/+1') + execute('set noai tw=2 fo=tm') + feed('gqgqjgqgqo<cr>') + -- Literal spaces will be trimmed from the by feed(). + feed('<space><space>X<cr>') + feed('<space><space>Xa<esc>') + expect([[ + { + X + X + a + + X + X + a + }]]) + end) + + it('formatting with "set fo=cqm" and multibyte comments', function() + insert([[ + { + X + Xa + XaY + XY + XYZ + X Y + X YZ + XX + XXa + XXY + }]]) + execute('/^{/+1') + execute('set tw=2 fo=cqm comments=n:X') + feed('gqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqo<cr>') + feed('X<cr>') + feed('Xa<cr>') + feed('XaY<cr>') + feed('XY<cr>') + feed('XYZ<cr>') + feed('X Y<cr>') + feed('X YZ<cr>') + feed('XX<cr>') + feed('XXa<cr>') + feed('XXY<esc><esc>') + expect([[ + { + X + Xa + Xa + XY + XY + XY + XZ + X Y + X Y + X Z + XX + XXa + XXY + + X + Xa + Xa + XY + XY + XY + XZ + X Y + X Y + X Z + XX + XXa + XXY + }]]) + end) + + it('formatting in replace mode', function() + insert([[ + { + + }]]) + execute('/^{/+1') + execute('set tw=2 fo=tm') + feed('RXa<esc>') + expect([[ + { + X + a + }]]) + end) + + it("as values of 'mps'", function() + insert([[ + { + ‘ two three ’ four + }]]) + execute('/^{/+1') + execute('set mps+=‘:’') + feed('d%<cr>') + expect([[ + { + four + }]]) + end) + + it('can be replaced with r', function() + insert([[ + abba + aab]]) + feed('gg0Vjra<cr>') + expect([[ + aaaa + aaa]]) + end) + + it("doesn't interfere with 'whichwrap'", function() + insert([[ + á + x]]) + execute('set whichwrap+=h') + execute('/^x') + feed('dh') + expect([[ + áx]]) + end) + + it('can be queried with byteidx() and byteidxcomp()', function() + -- One char of two bytes. + execute("let a = '.é.'") + -- Normal e with composing char. + execute("let b = '.é.'") + eq(0, eval('byteidx(a, 0)')) + eq(1, eval('byteidx(a, 1)')) + eq(3, eval('byteidx(a, 2)')) + eq(4, eval('byteidx(a, 3)')) + eq(-1, eval('byteidx(a, 4)')) + eq(0, eval('byteidx(b, 0)')) + eq(1, eval('byteidx(b, 1)')) + eq(4, eval('byteidx(b, 2)')) + eq(5, eval('byteidx(b, 3)')) + eq(-1, eval('byteidx(b, 4)')) + eq(0, eval('byteidxcomp(a, 0)')) + eq(1, eval('byteidxcomp(a, 1)')) + eq(3, eval('byteidxcomp(a, 2)')) + eq(4, eval('byteidxcomp(a, 3)')) + eq(-1, eval('byteidxcomp(a, 4)')) + eq(0, eval('byteidxcomp(b, 0)')) + eq(1, eval('byteidxcomp(b, 1)')) + eq(2, eval('byteidxcomp(b, 2)')) + eq(4, eval('byteidxcomp(b, 3)')) + eq(5, eval('byteidxcomp(b, 4)')) + eq(-1, eval('byteidxcomp(b, 5)')) + end) + + it('correctly interact with the \zs pattern', function() + eq('a1a2a3a', eval([[substitute('123', '\zs', 'a', 'g')]])) + end) +end) |