107 lines
2.9 KiB
Python
107 lines
2.9 KiB
Python
import sys
|
|
import warnings
|
|
|
|
import pytest
|
|
|
|
from ray._common.test_utils import run_string_as_driver
|
|
from ray.util.annotations import Deprecated
|
|
|
|
|
|
# Use default filterwarnings behavior for this test
|
|
@pytest.mark.filterwarnings("default")
|
|
@pytest.mark.parametrize("warning", [True, False])
|
|
def test_deprecated(warning):
|
|
class_deprecated_message = "class is deprecated"
|
|
class_method_deprecated_message = "class method is deprecated"
|
|
function_deprecated_message = "function is deprecated"
|
|
|
|
@Deprecated(message=class_deprecated_message, warning=warning)
|
|
class A:
|
|
def __init__(self):
|
|
self.i = 13
|
|
|
|
@Deprecated(message=class_method_deprecated_message, warning=warning)
|
|
def method(self):
|
|
self.i = 14
|
|
|
|
@Deprecated(message=function_deprecated_message, warning=warning)
|
|
def func():
|
|
return 15
|
|
|
|
with warnings.catch_warnings(record=True) as w:
|
|
a = A()
|
|
assert a.i == 13
|
|
assert class_deprecated_message in A.__doc__
|
|
if warning:
|
|
assert any(
|
|
class_deprecated_message in str(warning.message) for warning in w
|
|
)
|
|
else:
|
|
assert not w
|
|
|
|
with warnings.catch_warnings(record=True) as w:
|
|
a.method()
|
|
assert a.i == 14
|
|
assert class_method_deprecated_message in A.method.__doc__
|
|
if warning:
|
|
assert any(
|
|
class_method_deprecated_message in str(warning.message) for warning in w
|
|
)
|
|
else:
|
|
assert not w
|
|
|
|
with warnings.catch_warnings(record=True) as w:
|
|
ret = func()
|
|
assert ret == 15
|
|
assert function_deprecated_message in func.__doc__
|
|
if warning:
|
|
assert any(
|
|
function_deprecated_message in str(warning.message) for warning in w
|
|
)
|
|
else:
|
|
assert not w
|
|
|
|
|
|
# Use default filterwarnings behavior for this test
|
|
@pytest.mark.filterwarnings("default")
|
|
@pytest.mark.skipif(sys.platform == "win32", reason="Windows failed reading stdout")
|
|
def test_only_warn_once():
|
|
log = run_string_as_driver(
|
|
"""
|
|
from ray.util.annotations import Deprecated
|
|
|
|
@Deprecated(message="functionisdeprecated", warning=True)
|
|
def func():
|
|
return 15
|
|
|
|
for _ in range(3):
|
|
func()
|
|
"""
|
|
)
|
|
assert log.count("functionisdeprecated") == 1
|
|
|
|
|
|
# Use default filterwarnings behavior for this test
|
|
@pytest.mark.filterwarnings("default")
|
|
@pytest.mark.skipif(sys.platform == "win32", reason="Windows failed reading stdout")
|
|
def test_warn_suppressed():
|
|
log = run_string_as_driver(
|
|
"""
|
|
from ray.util.annotations import Deprecated
|
|
|
|
@Deprecated(message="functionisdeprecated", warning=True)
|
|
def func():
|
|
return 15
|
|
|
|
for _ in range(3):
|
|
func()
|
|
""",
|
|
env={"PYTHONWARNINGS": "ignore::DeprecationWarning"},
|
|
)
|
|
assert log.count("functionisdeprecated") == 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
sys.exit(pytest.main(["-sv", __file__]))
|