mirror of https://github.com/scrapy/scrapy.git
91 lines
1.8 KiB
Python
91 lines
1.8 KiB
Python
from io import StringIO
|
|
from time import sleep, time
|
|
from unittest import mock
|
|
|
|
import pytest
|
|
|
|
from scrapy.utils import trackref
|
|
|
|
|
|
class Foo(trackref.object_ref):
|
|
pass
|
|
|
|
|
|
class Bar(trackref.object_ref):
|
|
pass
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def clear_refs() -> None:
|
|
trackref.live_refs.clear()
|
|
|
|
|
|
def test_format_live_refs():
|
|
o1 = Foo() # noqa: F841
|
|
o2 = Bar() # noqa: F841
|
|
o3 = Foo() # noqa: F841
|
|
assert (
|
|
trackref.format_live_refs()
|
|
== """\
|
|
Live References
|
|
|
|
Bar 1 oldest: 0s ago
|
|
Foo 2 oldest: 0s ago
|
|
"""
|
|
)
|
|
|
|
assert (
|
|
trackref.format_live_refs(ignore=Foo)
|
|
== """\
|
|
Live References
|
|
|
|
Bar 1 oldest: 0s ago
|
|
"""
|
|
)
|
|
|
|
|
|
@mock.patch("sys.stdout", new_callable=StringIO)
|
|
def test_print_live_refs_empty(stdout):
|
|
trackref.print_live_refs()
|
|
assert stdout.getvalue() == "Live References\n\n\n"
|
|
|
|
|
|
@mock.patch("sys.stdout", new_callable=StringIO)
|
|
def test_print_live_refs_with_objects(stdout):
|
|
o1 = Foo() # noqa: F841
|
|
trackref.print_live_refs()
|
|
assert (
|
|
stdout.getvalue()
|
|
== """\
|
|
Live References
|
|
|
|
Foo 1 oldest: 0s ago\n\n"""
|
|
)
|
|
|
|
|
|
def test_get_oldest():
|
|
o1 = Foo()
|
|
|
|
o1_time = time()
|
|
|
|
o2 = Bar()
|
|
|
|
o3_time = time()
|
|
if o3_time <= o1_time:
|
|
sleep(0.01)
|
|
o3_time = time()
|
|
if o3_time <= o1_time:
|
|
pytest.skip("time.time is not precise enough")
|
|
|
|
o3 = Foo() # noqa: F841
|
|
assert trackref.get_oldest("Foo") is o1
|
|
assert trackref.get_oldest("Bar") is o2
|
|
assert trackref.get_oldest("XXX") is None
|
|
|
|
|
|
def test_iter_all():
|
|
o1 = Foo()
|
|
o2 = Bar() # noqa: F841
|
|
o3 = Foo()
|
|
assert set(trackref.iter_all("Foo")) == {o1, o3}
|