Passed
Pull Request — dev (#32)
by Konstantinos
03:38 queued 01:48
created

test_command_registration.command_registrator()   A

Complexity

Conditions 1

Size

Total Lines 4
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
import pytest
2
3
4
@pytest.fixture
5
def command_registrator():
6
    from so_magic.data.backend.backend import CommandRegistrator
7
    return CommandRegistrator
8
9
10
@pytest.fixture
11
def classes(command_registrator):
12
    class A(metaclass=command_registrator): pass
13
    class B(metaclass=command_registrator): pass
14
    class C(B): pass
15
    class D(B): pass
16
    classes = type('Classes', (object,), {'A': A, 'B': B, 'C': C, 'D': D,
17
                                          '__iter__': lambda self: iter([getattr(self, x) for x in 'ABCD'])})()
18
    assert all([type(x) == command_registrator for x in classes])  # sanity check
19
    assert all([isinstance(x, command_registrator) for x in classes])  # sanity check
20
    return classes
21
22
23
def test_command_registrator(assert_different_objects, classes):
24
    assert all([hasattr(x, 'registry') for x in classes])
25
    assert all([hasattr(x, 'state') for x in classes])
26
    assert_different_objects([c.registry for c in classes])
27
28
    classes.A.state = 1
29
    classes.B.state = 2
30
    classes.C.state = 3
31
    classes.D.state = 4
32
    assert_different_objects([c.state for c in classes])
33
34
    classes.A.registry['a'] = 1
35
    classes.B.registry['b'] = 2
36
    classes.C.registry['c'] = 3
37
    classes.D.registry['d'] = 4
38
    assert classes.B.registry != classes.A.registry != classes.C.registry != classes.D.registry
39
40
    assert classes.A.__getitem__('a') == 1
41
    assert classes.B.__getitem__('b') == 2
42
    assert classes.C.__getitem__('c') == 3
43
    assert classes.D.__getitem__('d') == 4
44
    assert 'b' not in classes.C.registry
45
    assert 'c' not in classes.B.registry
46
    assert 'c' not in classes.D.registry
47
    assert 'd' not in classes.C.registry
48
    assert classes.A['a'] == 1
49
    assert classes.B['b'] == 2
50
    assert classes.C['c'] == 3
51
    assert classes.D['d'] == 4
52
53
54
def test_wrong_command_registrator_usage(command_registrator):
55
    class P1(command_registrator): pass
56
    assert type(P1) == type
57
    assert not hasattr(P1, 'state')
58
    assert not hasattr(P1, 'state')
59