Spaces:
Running
Running
File size: 6,778 Bytes
6a86ad5 |
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 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 |
import warnings
from sympy.testing.pytest import (raises, warns, ignore_warnings,
warns_deprecated_sympy, Failed)
from sympy.utilities.exceptions import sympy_deprecation_warning
# Test callables
def test_expected_exception_is_silent_callable():
def f():
raise ValueError()
raises(ValueError, f)
# Under pytest raises will raise Failed rather than AssertionError
def test_lack_of_exception_triggers_AssertionError_callable():
try:
raises(Exception, lambda: 1 + 1)
assert False
except Failed as e:
assert "DID NOT RAISE" in str(e)
def test_unexpected_exception_is_passed_through_callable():
def f():
raise ValueError("some error message")
try:
raises(TypeError, f)
assert False
except ValueError as e:
assert str(e) == "some error message"
# Test with statement
def test_expected_exception_is_silent_with():
with raises(ValueError):
raise ValueError()
def test_lack_of_exception_triggers_AssertionError_with():
try:
with raises(Exception):
1 + 1
assert False
except Failed as e:
assert "DID NOT RAISE" in str(e)
def test_unexpected_exception_is_passed_through_with():
try:
with raises(TypeError):
raise ValueError("some error message")
assert False
except ValueError as e:
assert str(e) == "some error message"
# Now we can use raises() instead of try/catch
# to test that a specific exception class is raised
def test_second_argument_should_be_callable_or_string():
raises(TypeError, lambda: raises("irrelevant", 42))
def test_warns_catches_warning():
with warnings.catch_warnings(record=True) as w:
with warns(UserWarning):
warnings.warn('this is the warning message')
assert len(w) == 0
def test_warns_raises_without_warning():
with raises(Failed):
with warns(UserWarning):
pass
def test_warns_hides_other_warnings():
with raises(RuntimeWarning):
with warns(UserWarning):
warnings.warn('this is the warning message', UserWarning)
warnings.warn('this is the other message', RuntimeWarning)
def test_warns_continues_after_warning():
with warnings.catch_warnings(record=True) as w:
finished = False
with warns(UserWarning):
warnings.warn('this is the warning message')
finished = True
assert finished
assert len(w) == 0
def test_warns_many_warnings():
with warns(UserWarning):
warnings.warn('this is the warning message', UserWarning)
warnings.warn('this is the other warning message', UserWarning)
def test_warns_match_matching():
with warnings.catch_warnings(record=True) as w:
with warns(UserWarning, match='this is the warning message'):
warnings.warn('this is the warning message', UserWarning)
assert len(w) == 0
def test_warns_match_non_matching():
with warnings.catch_warnings(record=True) as w:
with raises(Failed):
with warns(UserWarning, match='this is the warning message'):
warnings.warn('this is not the expected warning message', UserWarning)
assert len(w) == 0
def _warn_sympy_deprecation(stacklevel=3):
sympy_deprecation_warning(
"feature",
active_deprecations_target="active-deprecations",
deprecated_since_version="0.0.0",
stacklevel=stacklevel,
)
def test_warns_deprecated_sympy_catches_warning():
with warnings.catch_warnings(record=True) as w:
with warns_deprecated_sympy():
_warn_sympy_deprecation()
assert len(w) == 0
def test_warns_deprecated_sympy_raises_without_warning():
with raises(Failed):
with warns_deprecated_sympy():
pass
def test_warns_deprecated_sympy_wrong_stacklevel():
with raises(Failed):
with warns_deprecated_sympy():
_warn_sympy_deprecation(stacklevel=1)
def test_warns_deprecated_sympy_doesnt_hide_other_warnings():
# Unlike pytest's deprecated_call, we should not hide other warnings.
with raises(RuntimeWarning):
with warns_deprecated_sympy():
_warn_sympy_deprecation()
warnings.warn('this is the other message', RuntimeWarning)
def test_warns_deprecated_sympy_continues_after_warning():
with warnings.catch_warnings(record=True) as w:
finished = False
with warns_deprecated_sympy():
_warn_sympy_deprecation()
finished = True
assert finished
assert len(w) == 0
def test_ignore_ignores_warning():
with warnings.catch_warnings(record=True) as w:
with ignore_warnings(UserWarning):
warnings.warn('this is the warning message')
assert len(w) == 0
def test_ignore_does_not_raise_without_warning():
with warnings.catch_warnings(record=True) as w:
with ignore_warnings(UserWarning):
pass
assert len(w) == 0
def test_ignore_allows_other_warnings():
with warnings.catch_warnings(record=True) as w:
# This is needed when pytest is run as -Werror
# the setting is reverted at the end of the catch_Warnings block.
warnings.simplefilter("always")
with ignore_warnings(UserWarning):
warnings.warn('this is the warning message', UserWarning)
warnings.warn('this is the other message', RuntimeWarning)
assert len(w) == 1
assert isinstance(w[0].message, RuntimeWarning)
assert str(w[0].message) == 'this is the other message'
def test_ignore_continues_after_warning():
with warnings.catch_warnings(record=True) as w:
finished = False
with ignore_warnings(UserWarning):
warnings.warn('this is the warning message')
finished = True
assert finished
assert len(w) == 0
def test_ignore_many_warnings():
with warnings.catch_warnings(record=True) as w:
# This is needed when pytest is run as -Werror
# the setting is reverted at the end of the catch_Warnings block.
warnings.simplefilter("always")
with ignore_warnings(UserWarning):
warnings.warn('this is the warning message', UserWarning)
warnings.warn('this is the other message', RuntimeWarning)
warnings.warn('this is the warning message', UserWarning)
warnings.warn('this is the other message', RuntimeWarning)
warnings.warn('this is the other message', RuntimeWarning)
assert len(w) == 3
for wi in w:
assert isinstance(wi.message, RuntimeWarning)
assert str(wi.message) == 'this is the other message'
|