50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
import pytest
|
|
|
|
import attr
|
|
|
|
from ..testing import assert_checkpoints
|
|
from .. import abc as tabc
|
|
|
|
|
|
async def test_AsyncResource_defaults():
|
|
@attr.s
|
|
class MyAR(tabc.AsyncResource):
|
|
record = attr.ib(factory=list)
|
|
|
|
async def aclose(self):
|
|
self.record.append("ac")
|
|
|
|
async with MyAR() as myar:
|
|
assert isinstance(myar, MyAR)
|
|
assert myar.record == []
|
|
|
|
assert myar.record == ["ac"]
|
|
|
|
|
|
def test_abc_generics():
|
|
# Pythons below 3.5.2 had a typing.Generic that would throw
|
|
# errors when instantiating or subclassing a parameterized
|
|
# version of a class with any __slots__. This is why RunVar
|
|
# (which has slots) is not generic. This tests that
|
|
# the generic ABCs are fine, because while they are slotted
|
|
# they don't actually define any slots.
|
|
|
|
class SlottedChannel(tabc.SendChannel[tabc.Stream]):
|
|
__slots__ = ("x",)
|
|
|
|
def send_nowait(self, value):
|
|
raise RuntimeError
|
|
|
|
async def send(self, value):
|
|
raise RuntimeError # pragma: no cover
|
|
|
|
def clone(self):
|
|
raise RuntimeError # pragma: no cover
|
|
|
|
async def aclose(self):
|
|
pass # pragma: no cover
|
|
|
|
channel = SlottedChannel()
|
|
with pytest.raises(RuntimeError):
|
|
channel.send_nowait(None)
|