123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- -- 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 t = require('test.testutil')
- local n = require('test.functional.testnvim')()
- local feed, insert, eq, eval, clear, feed_command, expect =
- n.feed, n.insert, t.eq, n.eval, n.clear, n.feed_command, n.expect
- describe('multibyte text', function()
- before_each(clear)
- it('formatting with "set fo=t"', function()
- insert([[
- {
- XYZ
- abc XYZ
- }]])
- feed_command('/^{/+1')
- feed_command('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
- }]])
- feed_command('/^{/+1')
- feed_command('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
- }]])
- feed_command('/^{/+1')
- feed_command('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
- }]])
- feed_command('/^{/+1')
- feed_command('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
- }]])
- feed_command('/^{/+1')
- feed_command('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
- }]])
- feed_command('/^{/+1')
- feed_command('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([[
- {
- }]])
- feed_command('/^{/+1')
- feed_command('set tw=2 fo=tm')
- feed('RXa<esc>')
- expect([[
- {
- X
- a
- }]])
- end)
- it("as values of 'mps'", function()
- insert([[
- {
- ‘ two three ’ four
- }]])
- feed_command('/^{/+1')
- feed_command('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]])
- feed_command('set whichwrap+=h')
- feed_command('/^x')
- feed('dh')
- expect([[
- áx]])
- end)
- it('can be queried with byteidx() and byteidxcomp()', function()
- -- One char of two bytes.
- feed_command("let a = '.é.'")
- -- Normal e with composing char.
- feed_command("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)
|