mirror of
https://github.com/neovim/neovim.git
synced 2025-10-25 20:07:09 +00:00
test/env: multibyte env var to child process
Note: the test fails on non-Windows CI (Travis linux, Quickbuild bsd): even on master before the env.c changes in this patch-series. Maybe the unix part of printenv-test.c needs to be revisited. Signed-off-by: Justin M. Keyes <justinkz@gmail.com>
This commit is contained in:
@@ -7,6 +7,7 @@ local eval = helpers.eval
|
|||||||
local meths = helpers.meths
|
local meths = helpers.meths
|
||||||
local redir_exec = helpers.redir_exec
|
local redir_exec = helpers.redir_exec
|
||||||
local source = helpers.source
|
local source = helpers.source
|
||||||
|
local nvim_dir = helpers.nvim_dir
|
||||||
|
|
||||||
before_each(clear)
|
before_each(clear)
|
||||||
|
|
||||||
@@ -45,7 +46,7 @@ describe(':let', function()
|
|||||||
]=])
|
]=])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it("multibyte environment variables", function()
|
it("multibyte env var #8398 #9267", function()
|
||||||
command("let $NVIM_TEST = 'AìaB'")
|
command("let $NVIM_TEST = 'AìaB'")
|
||||||
eq('AìaB', eval('$NVIM_TEST'))
|
eq('AìaB', eval('$NVIM_TEST'))
|
||||||
command("let $NVIM_TEST = 'AaあB'")
|
command("let $NVIM_TEST = 'AaあB'")
|
||||||
@@ -56,4 +57,26 @@ describe(':let', function()
|
|||||||
command("let $NVIM_TEST = '"..mbyte.."'")
|
command("let $NVIM_TEST = '"..mbyte.."'")
|
||||||
eq(mbyte, eval('$NVIM_TEST'))
|
eq(mbyte, eval('$NVIM_TEST'))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it("multibyte env var to child process #8398 #9267", function()
|
||||||
|
if (not helpers.iswin()) and require('test.helpers').isCI() then
|
||||||
|
-- Fails on non-Windows CI. Buffering/timing issue?
|
||||||
|
pending('fails on unix CI', function() end)
|
||||||
|
end
|
||||||
|
local cmd_get_child_env = "let g:env_from_child = system(['"..nvim_dir.."/printenv-test', 'NVIM_TEST'])"
|
||||||
|
command("let $NVIM_TEST = 'AìaB'")
|
||||||
|
command(cmd_get_child_env)
|
||||||
|
eq(eval('$NVIM_TEST'), eval('g:env_from_child'))
|
||||||
|
|
||||||
|
command("let $NVIM_TEST = 'AaあB'")
|
||||||
|
command(cmd_get_child_env)
|
||||||
|
eq(eval('$NVIM_TEST'), eval('g:env_from_child'))
|
||||||
|
|
||||||
|
local mbyte = [[\p* .ม .ม .ม .ม่ .ม่ .ม่ ֹ ֹ ֹ .ֹ .ֹ .ֹ ֹֻ ֹֻ ֹֻ
|
||||||
|
.ֹֻ .ֹֻ .ֹֻ ֹֻ ֹֻ ֹֻ .ֹֻ .ֹֻ .ֹֻ ֹ ֹ ֹ .ֹ .ֹ .ֹ ֹ ֹ ֹ .ֹ .ֹ .ֹ ֹֻ ֹֻ
|
||||||
|
.ֹֻ .ֹֻ .ֹֻ a a a ca ca ca à à à]]
|
||||||
|
command("let $NVIM_TEST = '"..mbyte.."'")
|
||||||
|
command(cmd_get_child_env)
|
||||||
|
eq(eval('$NVIM_TEST'), eval('g:env_from_child'))
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -3,3 +3,7 @@ target_link_libraries(tty-test ${LIBUV_LIBRARIES})
|
|||||||
|
|
||||||
add_executable(shell-test shell-test.c)
|
add_executable(shell-test shell-test.c)
|
||||||
add_executable(printargs-test printargs-test.c)
|
add_executable(printargs-test printargs-test.c)
|
||||||
|
add_executable(printenv-test printenv-test.c)
|
||||||
|
if(WIN32)
|
||||||
|
set_target_properties(printenv-test PROPERTIES LINK_FLAGS -municode)
|
||||||
|
endif()
|
||||||
|
|||||||
59
test/functional/fixtures/printenv-test.c
Normal file
59
test/functional/fixtures/printenv-test.c
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
// This is an open source non-commercial project. Dear PVS-Studio, please check
|
||||||
|
// it. PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
# include <windows.h>
|
||||||
|
#else
|
||||||
|
# include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
int wmain(int argc, wchar_t **argv)
|
||||||
|
#else
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if (argc != 2) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
wchar_t *value = _wgetenv(argv[1]);
|
||||||
|
if (value == NULL) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int utf8_len = WideCharToMultiByte(CP_UTF8,
|
||||||
|
0,
|
||||||
|
value,
|
||||||
|
-1,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
if (utf8_len == 0) {
|
||||||
|
return (int)GetLastError();
|
||||||
|
}
|
||||||
|
char *utf8_value = (char *)calloc((size_t)utf8_len, sizeof(char));
|
||||||
|
utf8_len = WideCharToMultiByte(CP_UTF8,
|
||||||
|
0,
|
||||||
|
value,
|
||||||
|
-1,
|
||||||
|
utf8_value,
|
||||||
|
utf8_len,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
fprintf(stderr, "%s", utf8_value);
|
||||||
|
free(utf8_value);
|
||||||
|
#else
|
||||||
|
char *value = getenv(argv[1]);
|
||||||
|
if (value == NULL) {
|
||||||
|
fprintf(stderr, "env var not found: %s", argv[1]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// Print to stderr to avoid buffering.
|
||||||
|
fprintf(stderr, "%s", value);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -751,6 +751,7 @@ local module = {
|
|||||||
hasenv = hasenv,
|
hasenv = hasenv,
|
||||||
hexdump = hexdump,
|
hexdump = hexdump,
|
||||||
intchar2lua = intchar2lua,
|
intchar2lua = intchar2lua,
|
||||||
|
isCI = isCI,
|
||||||
map = map,
|
map = map,
|
||||||
matches = matches,
|
matches = matches,
|
||||||
mergedicts_copy = mergedicts_copy,
|
mergedicts_copy = mergedicts_copy,
|
||||||
|
|||||||
Reference in New Issue
Block a user