File: test_import_error.py

package info (click to toggle)
python-friendly-traceback 0.7.62%2Bgit20240811.d7dbff6-1.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 9,264 kB
  • sloc: python: 21,500; makefile: 4
file content (90 lines) | stat: -rw-r--r-- 2,874 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import friendly_traceback


def multiple_choices():
    try:
        from math import bsin
    except ImportError:
        friendly_traceback.explain_traceback(redirect="capture")
    result = friendly_traceback.get_output()
    assert "ImportError: cannot import name 'bsin'" in result
    if friendly_traceback.get_lang() == "en":
        assert "Did you mean one of the following:" in result
        assert "sin, asin" in result or "asin, sin" in result


def no_suggestion():
    try:
        from math import alphabet_alphabet
    except ImportError:
        friendly_traceback.explain_traceback(redirect="capture")
    result = friendly_traceback.get_output()
    assert "ImportError: cannot import name 'alphabet_alphabet'" in result
    if friendly_traceback.get_lang() == "en":
        assert "could not be imported is `alphabet_alphabet`" in result


def multiple_import_on_same_line():
    try:
        import circular_a, circular_b
    except ImportError:
        friendly_traceback.explain_traceback(redirect="capture")
    result = friendly_traceback.get_output()
    assert "cannot import name 'a'" in result
    if friendly_traceback.get_lang() == "en":
        assert "likely caused by what is known as a 'circular import'." in result


def wrong_case():
    try:
        from math import PI
    except ImportError:
        friendly_traceback.explain_traceback(redirect="capture")
    result = friendly_traceback.get_output()
    if friendly_traceback.get_lang() == "en":
        assert "Did you mean `pi`" in result



def test_Simple_import_error():
    multiple_choices()  # do not record in documentation
    no_suggestion()
    multiple_import_on_same_line()
    wrong_case()

    try:
        from math import Pi
    except ImportError as e:
        message = str(e)
        friendly_traceback.explain_traceback(redirect="capture")
    result = friendly_traceback.get_output()
    
    assert "ImportError: cannot import name 'Pi'" in result
    if friendly_traceback.get_lang() == "en":
        assert "Did you mean `pi`" in result
    if friendly_traceback._writing_docs:
        return result, message


# The following test has become unreliable when running under pytest.
# def test_Circular_import():
#
#     try:
#         import circular_a
#     except ImportError as e:
#         message = str(e)
#         friendly_traceback.explain_traceback(redirect="capture")
#     else:
#         message = "Message was never set."
#     result = friendly_traceback.get_output()
#     # The actual message varies a lot depending on Python version.
#
#     if friendly_traceback.get_lang() == "en":
#         assert friendly_traceback.utils.expected_in_result("what is known as a 'circular import'", result)
#
#     if friendly_traceback._writing_docs:
        return result, message


if __name__ == "__main__":
    print(test_Simple_import_error()[0])