aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/message.c2
-rw-r--r--src/nvim/version.c2
-rw-r--r--test/functional/ui/inccommand_spec.lua18
-rw-r--r--test/unit/message_spec.lua49
4 files changed, 60 insertions, 11 deletions
diff --git a/src/nvim/message.c b/src/nvim/message.c
index 699f4b87b9..57f7369e73 100644
--- a/src/nvim/message.c
+++ b/src/nvim/message.c
@@ -257,7 +257,7 @@ void trunc_string(char_u *s, char_u *buf, int room, int buflen)
return;
}
n = ptr2cells(s + e);
- if (len + n >= half)
+ if (len + n > half)
break;
len += n;
buf[e] = s[e];
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 8fd9b4b74f..b755404a58 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -389,7 +389,7 @@ static int included_patches[] = {
// 2054 NA
// 2053 NA
// 2052 NA
- // 2051,
+ 2051,
2050,
2049,
// 2048 NA
diff --git a/test/functional/ui/inccommand_spec.lua b/test/functional/ui/inccommand_spec.lua
index 6da22b6a3a..3b31da0397 100644
--- a/test/functional/ui/inccommand_spec.lua
+++ b/test/functional/ui/inccommand_spec.lua
@@ -482,7 +482,7 @@ describe(":substitute, 'inccommand' preserves undo", function()
{15:~ }|
{15:~ }|
{15:~ }|
- Already...st change |
+ Already ...t change |
]])
else
screen:expect([[
@@ -495,7 +495,7 @@ describe(":substitute, 'inccommand' preserves undo", function()
{15:~ }|
{15:~ }|
{15:~ }|
- Already...st change |
+ Already ...t change |
]])
end
end
@@ -534,7 +534,7 @@ describe(":substitute, 'inccommand' preserves undo", function()
{15:~ }|
{15:~ }|
{15:~ }|
- Already...st change |
+ Already ...t change |
]])
else
screen:expect([[
@@ -547,7 +547,7 @@ describe(":substitute, 'inccommand' preserves undo", function()
{15:~ }|
{15:~ }|
{15:~ }|
- Already...st change |
+ Already ...t change |
]])
end
@@ -574,7 +574,7 @@ describe(":substitute, 'inccommand' preserves undo", function()
{15:~ }|
{15:~ }|
{15:~ }|
- Already...st change |
+ Already ...t change |
]])
else
screen:expect([[
@@ -587,7 +587,7 @@ describe(":substitute, 'inccommand' preserves undo", function()
{15:~ }|
{15:~ }|
{15:~ }|
- Already...st change |
+ Already ...t change |
]])
end
screen:detach()
@@ -616,7 +616,7 @@ describe(":substitute, 'inccommand' preserves undo", function()
{15:~ }|
{15:~ }|
{15:~ }|
- Already...st change |
+ Already ...t change |
]])
else
screen:expect([[
@@ -629,7 +629,7 @@ describe(":substitute, 'inccommand' preserves undo", function()
{15:~ }|
{15:~ }|
{15:~ }|
- Already...st change |
+ Already ...t change |
]])
end
@@ -653,7 +653,7 @@ describe(":substitute, 'inccommand' preserves undo", function()
{15:~ }|
{15:~ }|
{15:~ }|
- Already...st change |
+ Already ...t change |
]])
end
screen:detach()
diff --git a/test/unit/message_spec.lua b/test/unit/message_spec.lua
new file mode 100644
index 0000000000..23d342c027
--- /dev/null
+++ b/test/unit/message_spec.lua
@@ -0,0 +1,49 @@
+local helpers = require("test.unit.helpers")
+
+local ffi = helpers.ffi
+local eq = helpers.eq
+local to_cstr = helpers.to_cstr
+
+local cimp = helpers.cimport('./src/nvim/message.h')
+
+describe('trunc_string', function()
+ local buffer = ffi.typeof('char_u[40]')
+
+ local function test_inplace(s, expected)
+ local buf = buffer()
+ ffi.C.strcpy(buf, s)
+ cimp.trunc_string(buf, buf, 20, 40)
+ eq(expected, ffi.string(buf))
+ end
+
+ local function test_copy(s, expected)
+ local buf = buffer()
+ cimp.trunc_string(to_cstr(s), buf, 20, 40)
+ eq(expected, ffi.string(buf))
+ end
+
+ local permutations = {
+ { ['desc'] = 'in-place', ['func'] = test_inplace },
+ { ['desc'] = 'by copy', ['func'] = test_copy },
+ }
+
+ for _,t in ipairs(permutations) do
+ describe('populates buf '..t.desc, function()
+ it('with a small string', function()
+ t.func('text', 'text')
+ end)
+
+ it('with a medium string', function()
+ t.func('a short text', 'a short text')
+ end)
+
+ it('with a string exactly the truncate size', function()
+ t.func('a text tha just fits', 'a text tha just fits')
+ end)
+
+ it('with a string that must be truncated', function()
+ t.func('a text that nott fits', 'a text t...nott fits')
+ end)
+ end)
+ end
+end)