mirror of
https://github.com/neovim/neovim.git
synced 2024-12-21 03:35:02 -07:00
341 lines
6.0 KiB
Lua
341 lines
6.0 KiB
Lua
-- 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, feed_command, expect = helpers.feed,
|
||
helpers.insert, helpers.eq, helpers.eval, helpers.clear, helpers.feed_command,
|
||
helpers.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)
|