From e0c489fd02b042a74845a07dd09e8ce66a2780ca Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Wed, 16 Nov 2016 11:57:00 +0100 Subject: [PATCH] Fix error in coverage runs under Py3 with a C locale --- tornado/test/template_test.py | 9 +++++++-- tornado/test/util.py | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/tornado/test/template_test.py b/tornado/test/template_test.py index dfcf38056..176d41a7c 100644 --- a/tornado/test/template_test.py +++ b/tornado/test/template_test.py @@ -6,8 +6,8 @@ import traceback from tornado.escape import utf8, native_str, to_unicode from tornado.template import Template, DictLoader, ParseError, Loader -from tornado.test.util import unittest -from tornado.util import ObjectDict, unicode_type +from tornado.test.util import unittest, is_coverage_running +from tornado.util import ObjectDict, unicode_type, PY3 class TemplateTest(unittest.TestCase): @@ -175,6 +175,11 @@ try{% set y = 1/x %} self.assertEqual(template.generate(), '0') def test_non_ascii_name(self): + if PY3 and is_coverage_running(): + try: + os.fsencode(u"t\u00e9st.html") + except UnicodeEncodeError: + self.skipTest("coverage tries to access unencodable filename") loader = DictLoader({u"t\u00e9st.html": "hello"}) self.assertEqual(loader.load(u"t\u00e9st.html").generate(), b"hello") diff --git a/tornado/test/util.py b/tornado/test/util.py index 2e3d779fd..429bc0240 100644 --- a/tornado/test/util.py +++ b/tornado/test/util.py @@ -76,3 +76,21 @@ def exec_test(caller_globals, caller_locals, s): local_namespace = {} exec(textwrap.dedent(s), global_namespace, local_namespace) return local_namespace + + +def is_coverage_running(): + """Return whether coverage is currently running. + """ + if 'coverage' not in sys.modules: + return False + tracer = sys.gettrace() + if tracer is None: + return False + try: + mod = tracer.__module__ + except AttributeError: + try: + mod = tracer.__class__.__module__ + except AttributeError: + return False + return mod.startswith('coverage') -- 2.47.2