diff options
author | James McCoy <jamessan@jamessan.com> | 2017-12-17 20:15:12 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-17 20:15:12 -0500 |
commit | e6f8b105b00f706ddb8b790a24e37d50711d8dcb (patch) | |
tree | b3208fd9191d6a6c0d257b39ff3a6880ec12f804 /src/nvim/testdir/test_makeencoding.py | |
parent | cca6d4b2674304d544b3880a616fd2ca7df2b891 (diff) | |
parent | db0685a663a7d86d960f22e18f4e8e5041f80833 (diff) | |
download | rneovim-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.py | 67 |
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() |