neovim/test/functional/legacy/069_multibyte_formatting_spec.lua

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

341 lines
6.0 KiB
Lua
Raw Normal View History

-- Test for multibyte text formatting.
2015-07-09 06:38:56 -07:00
-- Also test, that 'mps' with multibyte chars works.
-- And test "ra" on multibyte characters.
2015-07-09 06:38:56 -07:00
-- 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
2015-07-09 06:38:56 -07:00
describe('multibyte text', function()
2015-07-09 06:38:56 -07:00
before_each(clear)
it('formatting with "set fo=t"', function()
insert([[
{
abc
}]])
feed_command('/^{/+1')
feed_command('set tw=2 fo=t')
2015-07-09 06:38:56 -07:00
feed('gqgqjgqgqo<cr>')
feed('<cr>')
feed('abc <esc><esc>')
expect([[
{
abc
2015-07-09 06:38:56 -07:00
abc
}]])
end)
it('formatting with "set fo=tm"', function()
insert([[
{
a
a
}]])
feed_command('/^{/+1')
feed_command('set tw=1 fo=tm')
2015-07-09 06:38:56 -07:00
feed('gqgqjgqgqjgqgqjgqgqjgqgqo<cr>')
feed('<cr>')
feed('a<cr>')
feed(' a<cr>')
feed('<cr>')
feed(' <esc><esc>')
expect([[
{
a
a
2015-07-09 06:38:56 -07:00
a
a
}]])
end)
it('formatting with "set fo=tm" (part 2)', function()
insert([[
{
a
a
a
ab
abc
ab c
ab
}]])
feed_command('/^{/+1')
feed_command('set tw=2 fo=tm')
2015-07-09 06:38:56 -07:00
feed('gqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqo<cr>')
feed('<cr>')
feed('a<cr>')
feed(' a<cr>')
feed('<cr>')
feed(' <cr>')
feed('a<cr>')
feed('ab<cr>')
feed('abc<cr>')
feed('ab c<cr>')
feed('ab<esc><esc>')
expect([[
{
a
a
a
ab
abc
ab
c
ab
2015-07-09 06:38:56 -07:00
a
a
a
ab
abc
ab
c
ab
}]])
end)
it('formatting with "set ai fo=tm"', function()
insert([[
{
a
}]])
feed_command('/^{/+1')
feed_command('set ai tw=2 fo=tm')
2015-07-09 06:38:56 -07:00
feed('gqgqjgqgqo<cr>')
feed('<cr>')
feed('a<esc>')
expect([[
{
a
2015-07-09 06:38:56 -07:00
a
}]])
end)
it('formatting with "set ai fo=tm" (part 2)', function()
insert([[
{
a
}]])
feed_command('/^{/+1')
feed_command('set noai tw=2 fo=tm')
2015-07-09 06:38:56 -07:00
feed('gqgqjgqgqo<cr>')
-- Literal spaces will be trimmed from the by feed().
feed('<space><space><cr>')
feed('<space><space>a<esc>')
expect([[
{
a
2015-07-09 06:38:56 -07:00
a
}]])
end)
it('formatting with "set fo=cqm" and multibyte comments', function()
2015-07-09 06:38:56 -07:00
insert([[
{
a
a
a
}]])
feed_command('/^{/+1')
feed_command('set tw=2 fo=cqm comments=n:')
2015-07-09 06:38:56 -07:00
feed('gqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqo<cr>')
feed('<cr>')
feed('a<cr>')
feed('a<cr>')
feed('<cr>')
feed('<cr>')
feed(' <cr>')
feed(' <cr>')
feed('<cr>')
feed('a<cr>')
feed('<esc><esc>')
expect([[
{
a
a
a
2015-07-09 06:38:56 -07:00
a
a
a
}]])
end)
it('formatting in replace mode', function()
insert([[
{
2015-07-09 06:38:56 -07:00
}]])
feed_command('/^{/+1')
feed_command('set tw=2 fo=tm')
2015-07-09 06:38:56 -07:00
feed('Ra<esc>')
expect([[
{
a
}]])
end)
it("as values of 'mps'", function()
insert([[
{
two three four
}]])
feed_command('/^{/+1')
feed_command('set mps+=:')
2015-07-09 06:38:56 -07:00
feed('d%<cr>')
expect([[
{
four
}]])
end)
it('can be replaced with r', function()
insert([[
bb
b]])
feed('gg0Vjra<cr>')
expect([[
aaaa
aaa]])
end)
it("doesn't interfere with 'whichwrap'", function()
insert([[
á
x]])
feed_command('set whichwrap+=h')
feed_command('/^x')
2015-07-09 06:38:56 -07:00
feed('dh')
expect([[
áx]])
end)
it('can be queried with byteidx() and byteidxcomp()', function()
2015-07-09 06:38:56 -07:00
-- One char of two bytes.
feed_command("let a = '.é.'")
2015-07-09 06:38:56 -07:00
-- 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)'))
2015-07-09 06:38:56 -07:00
end)
it('correctly interact with the \zs pattern', function()
eq('aaaa', eval([[substitute('', '\zs', 'a', 'g')]]))
2015-07-09 06:38:56 -07:00
end)
end)