def test_iterable(self): self.assertEqual( '[{nl:<5}1,{nl:<5}2,{nl:<5}3,\n' ']'.format(nl='\n'), logwrap.pretty_str([1, 2, 3]), ) self.assertEqual( '({nl:<5}1,{nl:<5}2,{nl:<5}3,\n' ')'.format(nl='\n'), logwrap.pretty_str((1, 2, 3)), ) res = logwrap.pretty_str({1, 2, 3}) self.assertTrue(res.startswith('{') and res.endswith('\n}')) res = logwrap.pretty_str(frozenset({1, 2, 3})) self.assertTrue(res.startswith('{') and res.endswith('\n}'))
def test_iterable(self): self.assertEqual( "[{nl:<5}1,{nl:<5}2,{nl:<5}3,\n" "]".format(nl="\n"), logwrap.pretty_str([1, 2, 3]), ) self.assertEqual( "({nl:<5}1,{nl:<5}2,{nl:<5}3,\n" ")".format(nl="\n"), logwrap.pretty_str((1, 2, 3)), ) res = logwrap.pretty_str({1, 2, 3}) self.assertTrue(res.startswith("{") and res.endswith("\n}")) res = logwrap.pretty_str(frozenset({1, 2, 3})) self.assertTrue(res.startswith("{") and res.endswith("\n}"))
def test_003_complex(self): fmt = "\n{spc:<{indent}}<{obj!r} with interface ({args}){annotation}>".format namespace = {} exec(""" import typing def func(a: typing.Optional[int]=None) -> None: pass """, namespace ) func = namespace['func'] # type: typing.Callable[..., None] self.assertEqual( logwrap.pretty_repr(func), fmt( spc='', indent=0, obj=func, args="\n a: typing.Union[int, NoneType]=None,\n", annotation=" -> None" ) ) self.assertEqual( logwrap.pretty_str(func), fmt( spc='', indent=0, obj=func, args="\n a: typing.Union[int, NoneType]=None,\n", annotation=" -> None" ) )
def test_002_annotation_return(self): fmt = "\n{spc:<{indent}}<{obj!r} with interface ({args}){annotation}>".format namespace = {} exec(""" import typing def func() -> None: pass """, namespace ) func = namespace['func'] # type: typing.Callable[[], None] self.assertEqual( logwrap.pretty_repr(func), fmt( spc='', indent=0, obj=func, args='', annotation=' -> None' ) ) self.assertEqual( logwrap.pretty_str(func), fmt( spc='', indent=0, obj=func, args='', annotation=' -> None' ) )
def test_002_typing_specific_dict(self): class MyDict(typing.Dict[str, str]): """Dict subclass.""" val = MyDict(key="value") self.assertEqual("MyDict({\n" " 'key': 'value',\n" "})", logwrap.pretty_repr(val)) self.assertEqual("{\n" " key: value,\n" "}", logwrap.pretty_str(val))
def test_001_dict_subclass(self): class MyDict(dict): """Dict subclass.""" val = MyDict(key="value") self.assertEqual("MyDict({\n" " 'key': 'value',\n" "})", logwrap.pretty_repr(val)) self.assertEqual("{\n" " key: value,\n" "}", logwrap.pretty_str(val))
def test_003_typed_dict(self): # noinspection PyMissingOrEmptyDocstring class MyDict(typing.TypedDict): key: str val = MyDict(key="value") self.assertEqual("{\n" " 'key': 'value',\n" "}", logwrap.pretty_repr(val)) self.assertEqual("{\n" " key: value,\n" "}", logwrap.pretty_str(val))
def test_002_annotation_return(self): fmt = "\n{spc:<{indent}}<{obj!r} with interface ({args}){annotation}>".format def func() -> None: pass self.assertEqual( logwrap.pretty_repr(func), fmt(spc='', indent=0, obj=func, args='', annotation=' -> None')) self.assertEqual( logwrap.pretty_str(func), fmt(spc='', indent=0, obj=func, args='', annotation=' -> None'))
def test_dict(self): self.assertEqual( '{\n' ' 1 : 1,\n' ' 2 : 2,\n' ' 33: 33,\n' '}', logwrap.pretty_str({ 1: 1, 2: 2, 33: 33 }), )
def test_dict(self): self.assertEqual( "{\n" " 1 : 1,\n" " 2 : 2,\n" " 33: 33,\n" "}", logwrap.pretty_str({ 1: 1, 2: 2, 33: 33 }), )
def test_magic_override(self): # noinspection PyMissingOrEmptyDocstring class Tst(object): def __str__(self): return 'Test' # noinspection PyMethodMayBeStatic def __pretty_str__(self, parser, indent, no_indent_start): return parser.process_element("Test Class", indent=indent, no_indent_start=no_indent_start) result = logwrap.pretty_str(Tst()) self.assertNotEqual(result, 'Test') self.assertEqual(result, "Test Class".format(id(Tst)))
def test_003_complex(self): fmt = "\n{spc:<{indent}}<{obj!r} with interface ({args}){annotation}>".format def func(a: typing.Optional[int] = None) -> None: pass self.assertEqual( logwrap.pretty_repr(func), fmt(spc='', indent=0, obj=func, args="\n a: typing.Union[int, NoneType]=None,\n", annotation=" -> None")) self.assertEqual( logwrap.pretty_str(func), fmt(spc='', indent=0, obj=func, args="\n a: typing.Union[int, NoneType]=None,\n", annotation=" -> None"))
def test_callable(self): fmt = "\n{spc:<{indent}}<{obj!s} with interface ({args})>".format def empty_func(): pass def full_func(arg, darg=1, *positional, **named): pass # noinspection PyMissingOrEmptyDocstring class TstClass(object): def tst_method(self, arg, darg=1, *positional, **named): pass @classmethod def tst_classmethod(cls, arg, darg=1, *positional, **named): pass tst_instance = TstClass() self.assertEqual(logwrap.pretty_str(empty_func), fmt(spc='', indent=0, obj=empty_func, args='')) self.assertEqual( logwrap.pretty_str(full_func), fmt(spc='', indent=0, obj=full_func, args='\n' ' arg,\n' ' darg=1,\n' ' *positional,\n' ' **named,\n')) obj = TstClass.tst_method self.assertEqual( logwrap.pretty_str(obj), fmt(spc='', indent=0, obj=obj, args='\n' ' self,\n' ' arg,\n' ' darg=1,\n' ' *positional,\n' ' **named,\n')) obj = TstClass.tst_classmethod self.assertEqual( logwrap.pretty_str(obj), fmt(spc='', indent=0, obj=obj, args='\n' ' cls={cls!r},\n' ' arg,\n' ' darg=1,\n' ' *positional,\n' ' **named,\n'.format(cls=TstClass))) obj = tst_instance.tst_method self.assertEqual( logwrap.pretty_str(obj), fmt(spc='', indent=0, obj=obj, args='\n' ' self={self!r},\n' ' arg,\n' ' darg=1,\n' ' *positional,\n' ' **named,\n'.format(self=tst_instance))) obj = tst_instance.tst_classmethod self.assertEqual( logwrap.pretty_str(obj), fmt(spc='', indent=0, obj=obj, args='\n' ' cls={cls!r},\n' ' arg,\n' ' darg=1,\n' ' *positional,\n' ' **named,\n'.format(cls=TstClass)))
def test_simple_set(self): self.assertEqual(logwrap.pretty_str(set()), 'set()')
def test_text(self): self.assertEqual(logwrap.pretty_str('Unicode text'), "Unicode text") self.assertEqual(logwrap.pretty_str(b'bytes text\x01'), "bytes text\x01")
def test_simple(self): self.assertEqual(logwrap.pretty_str(True), str(True))
def test_py2_compatibility_flag(self): self.assertIsInstance(logwrap.pretty_str(u'Text', py2_str=True), str)