diff --git a/src/tox/_pytestplugin.py b/src/tox/_pytestplugin.py index c91763484..d0c870335 100644 --- a/src/tox/_pytestplugin.py +++ b/src/tox/_pytestplugin.py @@ -491,7 +491,14 @@ def create_files(base, filedefs): create_files(base.ensure(key, dir=1), value) elif isinstance(value, six.string_types): s = textwrap.dedent(value) - base.join(key).write(s) + + if not isinstance(s, six.text_type): + if not isinstance(s, six.binary_type): + s = str(s) + else: + s = six.ensure_text(s) + + base.join(key).write_text(s, encoding="UTF-8") @pytest.fixture() diff --git a/src/tox/config/__init__.py b/src/tox/config/__init__.py index 32fdb8b18..278d4b2b6 100644 --- a/src/tox/config/__init__.py +++ b/src/tox/config/__init__.py @@ -1,6 +1,7 @@ from __future__ import print_function import argparse +import io import itertools import json import os @@ -303,7 +304,7 @@ def parseconfig(args, plugins=()): def get_py_project_toml(path): - with open(str(path)) as file_handler: + with io.open(str(path), encoding="UTF-8") as file_handler: config_data = toml.load(file_handler) return config_data diff --git a/tests/unit/config/test_config.py b/tests/unit/config/test_config.py index fe11224c2..b4bd24fb5 100644 --- a/tests/unit/config/test_config.py +++ b/tests/unit/config/test_config.py @@ -1,3 +1,4 @@ +# coding=utf-8 import os import re import sys @@ -3556,7 +3557,10 @@ def test_config_via_pyproject_legacy(initproj): initproj( "config_via_pyproject_legacy-0.5", filedefs={ - "pyproject.toml": ''' + "pyproject.toml": u''' + [project] + description = "Factory ⸻ A code generator 🏭" + authors = [{name = "Łukasz Langa"}] [tool.tox] legacy_tox_ini = """ [tox]