You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
2.5 KiB
53 lines
2.5 KiB
from Debug import Debug |
|
import gevent |
|
import os |
|
|
|
import pytest |
|
|
|
|
|
class TestDebug: |
|
@pytest.mark.parametrize("items,expected", [ |
|
(["@/src/A/B/C.py:17"], ["A/B/C.py line 17"]), # basic test |
|
(["@/src/Db/Db.py:17"], ["Db.py line 17"]), # path compression |
|
(["%s:1" % __file__], ["TestDebug.py line 1"]), |
|
(["@/plugins/Chart/ChartDb.py:100"], ["ChartDb.py line 100"]), # plugins |
|
(["@/main.py:17"], ["main.py line 17"]), # root |
|
(["@\\src\\Db\\__init__.py:17"], ["Db/__init__.py line 17"]), # Windows paths |
|
(["<frozen importlib._bootstrap>:1"], []), # importlib builtins |
|
(["<frozen importlib._bootstrap_external>:1"], []), # importlib builtins |
|
(["/home/ivanq/ZeroNet/src/main.py:13"], ["?/src/main.py line 13"]), # best-effort anonymization |
|
(["C:\\ZeroNet\\core\\src\\main.py:13"], ["?/src/main.py line 13"]), |
|
(["/root/main.py:17"], ["/root/main.py line 17"]), |
|
(["{gevent}:13"], ["<gevent>/__init__.py line 13"]), # modules |
|
(["{os}:13"], ["<os> line 13"]), # python builtin modules |
|
(["src/gevent/event.py:17"], ["<gevent>/event.py line 17"]), # gevent-overriden __file__ |
|
(["@/src/Db/Db.py:17", "@/src/Db/DbQuery.py:1"], ["Db.py line 17", "DbQuery.py line 1"]), # mutliple args |
|
(["@/src/Db/Db.py:17", "@/src/Db/Db.py:1"], ["Db.py line 17", "1"]), # same file |
|
(["{os}:1", "@/src/Db/Db.py:17"], ["<os> line 1", "Db.py line 17"]), # builtins |
|
(["{gevent}:1"] + ["{os}:3"] * 4 + ["@/src/Db/Db.py:17"], ["<gevent>/__init__.py line 1", "...", "Db.py line 17"]) |
|
]) |
|
def testFormatTraceback(self, items, expected): |
|
q_items = [] |
|
for item in items: |
|
file, line = item.rsplit(":", 1) |
|
if file.startswith("@"): |
|
file = Debug.root_dir + file[1:] |
|
file = file.replace("{os}", os.__file__) |
|
file = file.replace("{gevent}", gevent.__file__) |
|
q_items.append((file, int(line))) |
|
assert Debug.formatTraceback(q_items) == expected |
|
|
|
|
|
def testFormatException(self): |
|
try: |
|
raise ValueError("Test exception") |
|
except: |
|
assert Debug.formatException() == "ValueError: Test exception in TestDebug.py line 43" |
|
try: |
|
os.path.abspath(1) |
|
except: |
|
assert "in TestDebug.py line 47 > <posixpath> line " in Debug.formatException() |
|
|
|
|
|
def testFormatStack(self): |
|
assert Debug.formatStack().startswith("TestDebug.py line 53 > <_pytest>/python.py line ") |