Skip to content

Instantly share code, notes, and snippets.

@Kami
Last active August 16, 2019 18:02
Show Gist options
  • Save Kami/a7a1906f864bec1f8f0a741704079f56 to your computer and use it in GitHub Desktop.
Save Kami/a7a1906f864bec1f8f0a741704079f56 to your computer and use it in GitHub Desktop.
def setUp(self):
super(TestCollectionNoConnect, self).setUp()
if sys.version_info[0] == 2:
self._original_encoding = sys.getdefaultencoding()
def tearDown(self):
super(TestCollectionNoConnect, self).tearDown()
if sys.version_info[0] == 2:
# Restore back the original encoding
sys.setdefaultencoding(self._original_encoding)
@unittest.skipIf(sys.version_info[0] == 3, 'Skipping tests under Python 3')
def test_error_message_as_as_string_and_unicode_python2(self):
msg1 = 'E11000 duplicate key error index: foo.$uid_1 dup key: { : "žfooćšžži💩" }'
msg2 = u'E11000 duplicate key error index: foo.$uid_1 dup key: { : "žfooćšžži💩" }'
err1 = DuplicateKeyError(msg1)
err2 = DuplicateKeyError(msg2)
# 1. Test with ascii encoding
reload(sys)
sys.setdefaultencoding('ascii')
self.assertEqual(sys.getdefaultencoding(), 'ascii')
err_1_str = str(err1)
err_1_unicode = unicode(err1)
err_2_str = str(err2)
err_2_unicode = unicode(err2)
self.assertEqual(err_1_str, msg1)
self.assertEqual(err_1_unicode, unicode(msg1, 'utf-8'))
self.assertEqual(err_2_str, msg2.encode('utf-8', errors='replace'))
self.assertEqual(err_2_unicode, msg2)
# 2. Test with utf-8 encoding
reload(sys)
sys.setdefaultencoding('utf8')
self.assertEqual(sys.getdefaultencoding(), 'utf8')
err_1_str = str(err1)
err_1_unicode = unicode(err1)
err_2_str = str(err2)
err_2_unicode = unicode(err2)
self.assertEqual(err_1_str, msg1)
self.assertEqual(err_1_unicode, unicode(msg1, 'utf-8'))
# Here casting to unicode works out of the box because default encoding
# is utf8
self.assertEqual(err_1_unicode, msg1)
self.assertEqual(err_2_str, msg2.encode('utf-8', errors='replace'))
self.assertEqual(err_2_unicode, msg2)
@unittest.skipIf(sys.version_info[0] == 2, 'Skipping tests under Python 2')
def test_error_message_as_as_string_and_unicode_python3(self):
msg = 'E11000 duplicate key error index: foo.$uid_1 dup key: { : "žfooćšžži💩" }'
err = DuplicateKeyError(msg)
err_unicode = str(err)
self.assertEqual(err_unicode, msg)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment