aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/testdir/test_makeencoding.py
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2017-12-17 20:15:12 -0500
committerGitHub <noreply@github.com>2017-12-17 20:15:12 -0500
commite6f8b105b00f706ddb8b790a24e37d50711d8dcb (patch)
treeb3208fd9191d6a6c0d257b39ff3a6880ec12f804 /src/nvim/testdir/test_makeencoding.py
parentcca6d4b2674304d544b3880a616fd2ca7df2b891 (diff)
parentdb0685a663a7d86d960f22e18f4e8e5041f80833 (diff)
downloadrneovim-e6f8b105b00f706ddb8b790a24e37d50711d8dcb.tar.gz
rneovim-e6f8b105b00f706ddb8b790a24e37d50711d8dcb.tar.bz2
rneovim-e6f8b105b00f706ddb8b790a24e37d50711d8dcb.zip
Merge pull request #7736 from jamessan/vim-8.0.0420
[RFC] vim-patch:8.0.0420: text garbled when the system encoding differs from 'encoding'
Diffstat (limited to 'src/nvim/testdir/test_makeencoding.py')
-rw-r--r--src/nvim/testdir/test_makeencoding.py67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/nvim/testdir/test_makeencoding.py b/src/nvim/testdir/test_makeencoding.py
new file mode 100644
index 0000000000..041edadc0a
--- /dev/null
+++ b/src/nvim/testdir/test_makeencoding.py
@@ -0,0 +1,67 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+# Test program for :make, :grep and :cgetfile.
+
+from __future__ import print_function, unicode_literals
+import locale
+import io
+import sys
+
+def set_output_encoding(enc=None):
+ """Set the encoding of stdout and stderr
+
+ arguments:
+ enc -- Encoding name.
+ If omitted, locale.getpreferredencoding() is used.
+ """
+ if enc is None:
+ enc = locale.getpreferredencoding()
+
+ def get_text_writer(fo, **kwargs):
+ kw = dict(kwargs)
+ kw.setdefault('errors', 'backslashreplace') # use \uXXXX style
+ kw.setdefault('closefd', False)
+
+ if sys.version_info[0] < 3:
+ # Work around for Python 2.x
+ # New line conversion isn't needed here. Done in somewhere else.
+ writer = io.open(fo.fileno(), mode='w', newline='', **kw)
+ write = writer.write # save the original write() function
+ enc = locale.getpreferredencoding()
+ def convwrite(s):
+ if isinstance(s, bytes):
+ write(s.decode(enc)) # convert to unistr
+ else:
+ write(s)
+ try:
+ writer.flush() # needed on Windows
+ except IOError:
+ pass
+ writer.write = convwrite
+ else:
+ writer = io.open(fo.fileno(), mode='w', **kw)
+ return writer
+
+ sys.stdout = get_text_writer(sys.stdout, encoding=enc)
+ sys.stderr = get_text_writer(sys.stderr, encoding=enc)
+
+
+def main():
+ enc = 'utf-8'
+ if len(sys.argv) > 1:
+ enc = sys.argv[1]
+ set_output_encoding(enc)
+
+ message_tbl = {
+ 'utf-8': 'ÀÈÌÒÙ こんにちは 你好',
+ 'latin1': 'ÀÈÌÒÙ',
+ 'cp932': 'こんにちは',
+ 'cp936': '你好',
+ }
+
+ print('Xfoobar.c(10) : %s (%s)' % (message_tbl[enc], enc))
+
+
+if __name__ == "__main__":
+ main()