From 4d18425ed4a446511486c595a346829e6499bca4 Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Tue, 27 Sep 2016 18:05:09 +0100 Subject: [PATCH] Fix for Magic Folder tests if the I/O encoding is borked on Unicode platforms (OS X, Windows). Signed-off-by: Daira Hopwood --- src/allmydata/test/cli/test_magic_folder.py | 4 ++-- src/allmydata/test/common_util.py | 25 +++++++++++++-------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/allmydata/test/cli/test_magic_folder.py b/src/allmydata/test/cli/test_magic_folder.py index b1d422a28..16c85d91c 100644 --- a/src/allmydata/test/cli/test_magic_folder.py +++ b/src/allmydata/test/cli/test_magic_folder.py @@ -22,8 +22,8 @@ from allmydata import uri class MagicFolderCLITestMixin(CLITestMixin, GridTestMixin, NonASCIIPathMixin): def setUp(self): GridTestMixin.setUp(self) - self.alice_nickname = self.unicode_or_fallback(u"Alice\u00F8", u"Alice") - self.bob_nickname = self.unicode_or_fallback(u"Bob\u00F8", u"Bob") + self.alice_nickname = self.unicode_or_fallback(u"Alice\u00F8", u"Alice", io_as_well=True) + self.bob_nickname = self.unicode_or_fallback(u"Bob\u00F8", u"Bob", io_as_well=True) def do_create_magic_folder(self, client_num): d = self.do_cli("magic-folder", "create", "magic:", client_num=client_num) diff --git a/src/allmydata/test/common_util.py b/src/allmydata/test/common_util.py index 982b8a3ec..f68599f1c 100644 --- a/src/allmydata/test/common_util.py +++ b/src/allmydata/test/common_util.py @@ -8,7 +8,8 @@ from twisted.trial import unittest from allmydata.util import fileutil, log from ..util.assertutil import precondition -from allmydata.util.encodingutil import unicode_platform, get_filesystem_encoding +from allmydata.util.encodingutil import (unicode_platform, get_filesystem_encoding, + get_io_encoding) from ..scripts import runner def skip_if_cannot_represent_filename(u): @@ -95,14 +96,20 @@ class NonASCIIPathMixin: self.addCleanup(_cleanup) os.mkdir(dirpath) - def unicode_or_fallback(self, unicode_name, fallback_name): - if unicode_platform(): - return unicode_name - try: - unicode_name.encode(get_filesystem_encoding()) - return unicode_name - except UnicodeEncodeError: - return fallback_name + def unicode_or_fallback(self, unicode_name, fallback_name, io_as_well=False): + if not unicode_platform(): + try: + unicode_name.encode(get_filesystem_encoding()) + except UnicodeEncodeError: + return fallback_name + + if io_as_well: + try: + unicode_name.encode(get_io_encoding()) + except UnicodeEncodeError: + return fallback_name + + return unicode_name class SignalMixin: