1"""
2Tests for `__init_subclass__` related tests.
3
4Python 3.6+ only.
5"""
6
7import pytest
8
9import attr
10
11
12@pytest.mark.parametrize("slots", [True, False])
13def test_init_subclass_vanilla(slots):
14    """
15    `super().__init_subclass__` can be used if the subclass is not an attrs
16    class both with dict and slots classes.
17    """
18    @attr.s(slots=slots)
19    class Base:
20        def __init_subclass__(cls, param, **kw):
21            super().__init_subclass__(**kw)
22            cls.param = param
23
24    class Vanilla(Base, param="foo"):
25        pass
26
27    assert "foo" == Vanilla().param
28
29
30def test_init_subclass_attrs():
31    """
32    `__init_subclass__` works with attrs classes as long as slots=False.
33    """
34    @attr.s(slots=False)
35    class Base:
36        def __init_subclass__(cls, param, **kw):
37            super().__init_subclass__(**kw)
38            cls.param = param
39
40    @attr.s
41    class Attrs(Base, param="foo"):
42        pass
43
44    assert "foo" == Attrs().param
45