aboutsummaryrefslogtreecommitdiff
path: root/test/functional/legacy
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/legacy')
-rw-r--r--test/functional/legacy/069_multibyte_formatting_spec.lua340
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)