aboutsummaryrefslogtreecommitdiff
path: root/test/functional/ui/multibyte_spec.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/functional/ui/multibyte_spec.lua')
-rw-r--r--test/functional/ui/multibyte_spec.lua122
1 files changed, 122 insertions, 0 deletions
diff --git a/test/functional/ui/multibyte_spec.lua b/test/functional/ui/multibyte_spec.lua
new file mode 100644
index 0000000000..278480ec4f
--- /dev/null
+++ b/test/functional/ui/multibyte_spec.lua
@@ -0,0 +1,122 @@
+local helpers = require('test.functional.helpers')(after_each)
+local Screen = require('test.functional.ui.screen')
+local clear = helpers.clear
+local feed = helpers.feed
+local feed_command = helpers.feed_command
+local insert = helpers.insert
+local funcs = helpers.funcs
+
+describe("multibyte rendering", function()
+ local screen
+ before_each(function()
+ clear()
+ screen = Screen.new(60, 6)
+ screen:attach({rgb=true})
+ screen:set_default_attr_ids({
+ [1] = {bold = true, foreground = Screen.colors.Blue1},
+ [2] = {background = Screen.colors.WebGray},
+ [3] = {background = Screen.colors.LightMagenta},
+ [4] = {bold = true},
+ })
+ end)
+
+ after_each(function()
+ screen:detach()
+ end)
+
+ it("works with composed char at start of line", function()
+ insert([[
+ ̊
+ x]])
+ feed("gg")
+ -- verify the modifier infact is alone
+ feed_command("ascii")
+ screen:expect([[
+ ^ ̊ |
+ x |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ < ̊> 778, Hex 030a, Octal 1412 |
+ ]])
+
+ -- a char inserted before will spontaneously merge with it
+ feed("ia<esc>")
+ feed_command("ascii")
+ screen:expect([[
+ ^å |
+ x |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ <a> 97, Hex 61, Octal 141 < ̊> 778, Hex 030a, Octal 1412 |
+ ]])
+ end)
+
+ it('works with doublewidth char at end of line', function()
+ feed('58a <esc>a馬<esc>')
+ screen:expect([[
+ ^馬|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ |
+ ]])
+
+ feed('i <esc>')
+ screen:expect([[
+ ^ {1:>}|
+ 馬 |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ |
+ ]])
+
+ feed('l')
+ screen:expect([[
+ {1:>}|
+ ^馬 |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ |
+ ]])
+ end)
+
+ it('clears left half of double-width char when right half is overdrawn', function()
+ feed('o-馬<esc>ggiab ')
+ screen:expect([[
+ ab ^ |
+ -馬 |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {4:-- INSERT --} |
+ ]])
+
+ -- check double-with char is temporarily hidden when overlapped
+ funcs.complete(4, {'xx', 'yy'})
+ screen:expect([[
+ ab xx^ |
+ - {2: xx } |
+ {1:~ }{3: yy }{1: }|
+ {1:~ }|
+ {1:~ }|
+ {4:-- INSERT --} |
+ ]])
+
+ -- check it is properly restored
+ feed('z')
+ screen:expect([[
+ ab xxz^ |
+ -馬 |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {4:-- INSERT --} |
+ ]])
+ end)
+end)
+