66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
import pytest
|
|
import sys
|
|
import os
|
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
|
from slic.utils.debug import *
|
|
from unittest.mock import patch
|
|
|
|
class A(Traceable):
|
|
def __init__(self, a, b, c=None, d=None, **kwargs):
|
|
self.a = a
|
|
self.b = b
|
|
self.c = c
|
|
self.d = d
|
|
self.extra = kwargs
|
|
|
|
class CustomObj:
|
|
def __init__(self, val):
|
|
self.val = val
|
|
def __repr__(self):
|
|
return f"CustomObj({self.val})"
|
|
|
|
@pytest.mark.parametrize(
|
|
"cls, entry, expected",
|
|
[
|
|
# A(10, 20)
|
|
(A, ([10, 20], {}),
|
|
"creating: A(10, 20)"),
|
|
|
|
# A(10, 20, e=100)
|
|
(A, ([10, 20], {"e": 100}),
|
|
"creating: A(10, 20, e=100)"),
|
|
|
|
# A('foo', [1,2,3], flag=True, data={'x': 9})
|
|
(A, (['foo', [1,2,3]], {"flag": True, "data": {"x": 9}}),
|
|
f"creating: A('foo', [1, 2, 3], flag={short_repr(True)}, data={short_repr({'x': 9})})"),
|
|
|
|
# A(CustomObj("big"), [0]*12, name="test", meta="y"*70)
|
|
(A, ([CustomObj("big"), [0]*12], {"name": "test", "meta": "y"*70}),
|
|
f"creating: A({short_repr(CustomObj('big'))}, {short_repr([0]*12)}, name={short_repr('test')}, meta={short_repr('y'*70)})"),
|
|
|
|
# A("A"*60, [0]*5) # long string, no kwargs
|
|
(A, (["A"*60, [0]*5], {}),
|
|
f"creating: A({short_repr('A'*60)}, {short_repr([0]*5)})"),
|
|
]
|
|
)
|
|
def test_traceable(cls, entry, expected):
|
|
args, kwargs = entry
|
|
with patch("slic.utils.debug.log.trace") as mock_trace:
|
|
cls(*args, **kwargs)
|
|
actual = mock_trace.call_args[0][0]
|
|
assert actual == expected
|
|
|
|
@pytest.mark.parametrize(
|
|
"value, cutoff, expected",
|
|
[
|
|
("abc", 10, "'abc'"),
|
|
("a" * 100, 10, "'aaaaaaaaaa..."),
|
|
(12345, 10, "12345"),
|
|
([0]*100, 15, str(repr([0]*100))[:15] + "..."),
|
|
(None, 10, "None"),
|
|
(type("Obj", (), {"__repr__": lambda self: "Obj(" + "x"*50 + ")"})(), 20, "Obj(xxxxxxxxxxxxxxxxx..."),
|
|
]
|
|
)
|
|
|
|
def test_short_repr(value, cutoff, expected):
|
|
assert short_repr(value, cutoff) == expected |