blob: 8930b18d3ff242969b08ce6a936c790dc7e2a0c9 [file] [log] [blame]
#!/usr/bin/python -u
# -*- coding: utf-8 -*-
#
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import factory_common # pylint: disable=W0611
import unittest
from cros.factory.test.unicode_to_string \
import UnicodeToString, UnicodeToStringArgs, UnicodeToStringClass
# My favorite character: 囧
JIONG_UTF8 = '\xe5\x9b\xa7'
class UnicodeToStringTest(unittest.TestCase):
def isSame(self, a, b):
'''Returns True if a and b are equal and the same type.
This is necessary because 'abc' == u'abc' but we want to distinguish
them.
'''
if a != b:
return False
elif type(a) != type(b):
return False
elif type(a) in [list, tuple]:
for x, y in zip(a, b):
if not self.isSame(x, y):
return False
elif type(a) == set:
return self.isSame(sorted(list(a)), sorted(list(b)))
elif type(a) == dict:
for k in a:
if not self.isSame(a[k], b[k]):
return False
return True
def assertSame(self, a, b):
self.assertTrue(self.isSame(a, b), 'isSame(%r,%r)' % (a, b))
def testAssertSame(self):
'''Makes sense that assertSame works properly.'''
self.assertSame('abc', 'abc')
self.assertRaises(AssertionError,
lambda: self.assertSame('abc', u'abc'))
self.assertSame(['a'], ['a'])
self.assertRaises(AssertionError,
lambda: self.assertSame(['a'], [u'a']))
self.assertSame(('a'), ('a'))
self.assertRaises(AssertionError,
lambda: self.assertSame(('a'), (u'a')))
self.assertSame(set(['a']), set(['a']))
self.assertRaises(
AssertionError,
lambda: self.assertSame(set(['a']),
set([u'a'])))
self.assertSame({1: 'a'}, {1: 'a'})
self.assertRaises(AssertionError,
lambda: self.assertSame({1: 'a'}, {1: u'a'}))
def testUnicodeToString(self):
self.assertSame(1, UnicodeToString(1))
self.assertSame('abc', UnicodeToString(u'abc'))
self.assertSame(JIONG_UTF8, UnicodeToString(u'囧'))
def testUnicodeToStringArgs(self):
@UnicodeToStringArgs
def func(*args, **kwargs):
return ('func', args, kwargs)
self.assertSame(('func', ('a',), {'b': 'c'}),
func(u'a', b=u'c'))
def testUnicodeToStringClass(self):
@UnicodeToStringClass
class MyClass(object):
def f1(self, *args, **kwargs):
return ('f1', args, kwargs)
def f2(self, *args, **kwargs):
return ('f2', args, kwargs)
obj = MyClass()
self.assertSame(('f1', ('a',), {'b': 'c', 'd': set(['e'])}),
obj.f1(u'a', b=u'c', d=set([u'e'])))
self.assertSame(('f2', ('a',), {'b': 'c', 'd': set(['e'])}),
obj.f2(u'a', b=u'c', d=set([u'e'])))
if __name__ == "__main__":
unittest.main()