From 1ca1e7ccba203752f7b7f89c2bd3aca13586d460 Mon Sep 17 00:00:00 2001 From: JINNOUCHI Yasushi Date: Sun, 31 Jan 2021 18:55:17 +0900 Subject: fix: Multi byte truncate for displayer (#464) This is needed for calling strdisplaywidth() from Lua loop. See https://github.com/nvim-telescope/telescope.nvim/issues/414 See https://github.com/neovim/neovim/blob/a1ed941a7881122fda2fd48e71e890ed55e4d08e/src/nvim/eval/funcs.c#L9845-L9858 Co-authored-by: Simon Hauser --- lua/tests/automated/entry_display_spec.lua | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 lua/tests/automated/entry_display_spec.lua (limited to 'lua/tests') diff --git a/lua/tests/automated/entry_display_spec.lua b/lua/tests/automated/entry_display_spec.lua new file mode 100644 index 0000000..fff78cd --- /dev/null +++ b/lua/tests/automated/entry_display_spec.lua @@ -0,0 +1,32 @@ +local entry_display = require('telescope.pickers.entry_display') + +describe('truncate', function() + for _, ambiwidth in ipairs{'single', 'double'} do + for _, case in ipairs{ + {args = {'abcde', 6}, expected = {single = 'abcde', double = 'abcde'}}, + {args = {'abcde', 5}, expected = {single = 'abcde', double = 'abcde'}}, + {args = {'abcde', 4}, expected = {single = 'abc…', double = 'ab…'}}, + {args = {'アイウエオ', 11}, expected = {single = 'アイウエオ', double = 'アイウエオ'}}, + {args = {'アイウエオ', 10}, expected = {single = 'アイウエオ', double = 'アイウエオ'}}, + {args = {'アイウエオ', 9}, expected = {single = 'アイウエ…', double = 'アイウ…'}}, + {args = {'アイウエオ', 8}, expected = {single = 'アイウ…', double = 'アイウ…'}}, + {args = {'├─┤', 7}, expected = {single = '├─┤', double = '├─┤'}}, + {args = {'├─┤', 6}, expected = {single = '├─┤', double = '├─┤'}}, + {args = {'├─┤', 5}, expected = {single = '├─┤', double = '├…'}}, + {args = {'├─┤', 4}, expected = {single = '├─┤', double = '├…'}}, + {args = {'├─┤', 3}, expected = {single = '├─┤', double = '…'}}, + {args = {'├─┤', 2}, expected = {single = '├…', double = '…'}}, + } do + local msg = ('can truncate: ambiwidth = %s, [%s, %d] -> %s'):format(ambiwidth, case.args[1], case.args[2], case.expected[ambiwidth]) + it(msg, function() + local original = vim.o.ambiwidth + vim.o.ambiwidth = ambiwidth + assert.are.same( + case.expected[ambiwidth], + entry_display.truncate(case.args[1], case.args[2]) + ) + vim.o.ambiwidth = original + end) + end + end +end) -- cgit v1.2.3