New issue 605: tmpdir.join("foo").write(...) doesn't work as expected. https://bitbucket.org/hpk42/pytest/issue/605/tmpdirjoin-foo-write-doesnt-work-as
Bjorn Pettersen: All of the following testcase ``` #!python # -*- coding: utf-8 -*- def test_1(tmpdir): tmpdir.join('foo').write(u'æ') def test_2(tmpdir): tmpdir.join('foo').write(u'æ'.encode('u8')) def test_3(tmpdir): tmpdir.join('foo').write(u'æ'.encode('l1')) ``` fails with the following errors: (dev) w:\>py.test test_tmpdir.py ============================= test session starts ============================= platform win32 -- Python 2.7.8 -- py-1.4.25 -- pytest-2.6.3 plugins: cov, xdist collected 3 items test_tmpdir.py FFF ================================== FAILURES =================================== ___________________________________ test_1 ____________________________________ tmpdir = local('c:\\tmp\\pytest-20\\test_10') def test_1(tmpdir): > tmpdir.join('foo').write(u'├ª') test_tmpdir.py:4: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = local('c:\\tmp\\pytest-20\\test_10\\foo'), data = 'æ', mode = 'w' ensure = False def write(self, data, mode='w', ensure=False): """ write data into path. If ensure is True create missing parent directories. """ if ensure: self.dirpath().ensure(dir=1) if 'b' in mode: if not py.builtin._isbytes(data): raise ValueError("can only process bytes") else: if not py.builtin._istext(data): if not py.builtin._isbytes(data): data = str(data) else: data = py.builtin._totext(data, sys.getdefaultencoding()) f = self.open(mode) try: > f.write(data) E UnicodeEncodeError: 'ascii' codec can't encode character u'\xe6' in position 0: ordinal not in range(128) dev\lib\site-packages\py\_path\local.py:476: UnicodeEncodeError ___________________________________ test_2 ____________________________________ tmpdir = local('c:\\tmp\\pytest-20\\test_20') def test_2(tmpdir): > tmpdir.join('foo').write(u'├ª'.encode('u8')) test_tmpdir.py:8: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = local('c:\\tmp\\pytest-20\\test_20\\foo'), data = '\xc3\xa6', mode = 'w' ensure = False def write(self, data, mode='w', ensure=False): """ write data into path. If ensure is True create missing parent directories. """ if ensure: self.dirpath().ensure(dir=1) if 'b' in mode: if not py.builtin._isbytes(data): raise ValueError("can only process bytes") else: if not py.builtin._istext(data): if not py.builtin._isbytes(data): data = str(data) else: > data = py.builtin._totext(data, sys.getdefaultencoding()) E UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128) dev\lib\site-packages\py\_path\local.py:473: UnicodeDecodeError ___________________________________ test_3 ____________________________________ tmpdir = local('c:\\tmp\\pytest-20\\test_30') def test_3(tmpdir): > tmpdir.join('foo').write(u'├ª'.encode('l1')) test_tmpdir.py:12: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = local('c:\\tmp\\pytest-20\\test_30\\foo'), data = '\xe6', mode = 'w' ensure = False def write(self, data, mode='w', ensure=False): """ write data into path. If ensure is True create missing parent directories. """ if ensure: self.dirpath().ensure(dir=1) if 'b' in mode: if not py.builtin._isbytes(data): raise ValueError("can only process bytes") else: if not py.builtin._istext(data): if not py.builtin._isbytes(data): data = str(data) else: > data = py.builtin._totext(data, sys.getdefaultencoding()) E UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128) dev\lib\site-packages\py\_path\local.py:473: UnicodeDecodeError ========================== 3 failed in 0.19 seconds =========================== (dev) w:\> _______________________________________________ pytest-commit mailing list pytest-commit@python.org https://mail.python.org/mailman/listinfo/pytest-commit