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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
|
import friendly_traceback
expected_in_result = friendly_traceback.utils.expected_in_result
def test_Popitem_empty_dict():
d = {}
try:
d.popitem()
except KeyError as e:
message = str(e)
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert "popitem(): dictionary is empty" in result
if friendly_traceback.get_lang() == "en":
expected = "You tried to retrieve an item from `d` which is an empty `dict`."
ok, diff = expected_in_result(expected, result)
assert ok, diff
if friendly_traceback._writing_docs:
return result, message
def test_Popitem_empty_ChainMap():
from collections import ChainMap
alpha = ChainMap({}, {})
try:
alpha.popitem()
except KeyError as e:
message = str(e)
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert "popitem(): dictionary is empty" in result
if friendly_traceback.get_lang() == "en":
expected = "You tried to retrieve an item from `alpha` which is an empty `ChainMap`."
ok, diff = expected_in_result(expected, result)
assert ok, diff
if friendly_traceback._writing_docs:
return result, message
def test_Generic_key_error():
d = {"a": 1, "b": 2}
try:
d["c"]
except KeyError as e:
message = str(e)
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert "KeyError: 'c'" in result
if friendly_traceback.get_lang() == "en":
expected = "The key `'c'` cannot be found in the dict `d`.\n"
ok, diff = expected_in_result(expected, result)
assert ok, diff
if friendly_traceback._writing_docs:
return result, message
def test_ChainMap():
from collections import ChainMap
d = ChainMap({}, {})
try:
d.pop(42)
except KeyError as e:
message = str(e)
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert "KeyError: 42" in result
if friendly_traceback.get_lang() == "en":
expected = "The key `42` cannot be found in `d`, an object of type `ChainMap`."
ok, diff = expected_in_result(expected, result)
assert ok, diff
if friendly_traceback._writing_docs:
return result, message
def chain_map_string_by_mistake():
from collections import ChainMap
beta = ChainMap({(0, 0): "origin"}, {})
try:
beta.pop("(0, 0)")
except KeyError as e:
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert "KeyError: '(0, 0)'" in result
if friendly_traceback.get_lang() == "en":
expected = "Did you convert `(0, 0)` into a string by mistake?"
ok, diff = expected_in_result(expected, result)
assert ok, diff
def test_String_by_mistake():
chain_map_string_by_mistake() # do not show in docs
d = {(0, 0): "origin"}
try:
d["(0, 0)"]
except KeyError as e:
message = str(e)
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert "KeyError: '(0, 0)'" in result
if friendly_traceback.get_lang() == "en":
expected = "Did you convert `(0, 0)` into a string by mistake?"
ok, diff = expected_in_result(expected, result)
assert ok, diff
if friendly_traceback._writing_docs:
return result, message
def test_Forgot_to_convert_to_string():
squares = {"1": 1, "2": 4, "3": 9}
try:
print(squares[2])
except KeyError as e:
message = str(e)
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert "KeyError: 2" in result
if friendly_traceback.get_lang() == "en":
expected = "Did you forget to convert `2` into a string?"
ok, diff = expected_in_result(expected, result)
assert ok, diff
if friendly_traceback._writing_docs:
return result, message
def test_Similar_names():
first = {"alpha": 1, "beta": 2, "gamma": 3}
try:
a = first["alpha1"]
except KeyError as e:
message = str(e)
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert "KeyError: 'alpha1'" in result
if friendly_traceback.get_lang() == "en":
expected = "Did you mean `'alpha'`?"
ok, diff = expected_in_result(expected, result)
assert ok, diff
second = {"alpha0": 1, "alpha11": 2, "alpha12": 3}
try:
a = second["alpha"]
except KeyError as e:
message = str(e)
friendly_traceback.explain_traceback(redirect="capture")
result = friendly_traceback.get_output()
assert "KeyError: 'alpha'" in result
if friendly_traceback.get_lang() == "en":
expected = "Did you mean `'alpha0'`?"
ok, diff = expected_in_result(expected, result)
assert ok, diff
# The order for alpha11 and alpha12 could vary
expected = "'alpha0'"
ok, diff = expected_in_result(expected, result)
assert ok, diff
expected = "'alpha11'"
ok, diff = expected_in_result(expected, result)
assert ok, diff
expected = "'alpha12'"
ok, diff = expected_in_result(expected, result)
assert ok, diff
if friendly_traceback._writing_docs:
return result, message
|