Passed
Push — master ( 87fd0f...6004a9 )
by Konstantinos
56s
created

broadcaster_class()   A

Complexity

Conditions 2

Size

Total Lines 22
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 16
dl 0
loc 22
rs 9.6
c 0
b 0
f 0
cc 2
nop 0
1
import pytest
2
3
@pytest.fixture
4
def termination_condition_adapter(termination_condition):
5
    from neural_style_transfer.termination_condition_adapter import TerminationConditionAdapterFactory
6
    termination_condition_instance = termination_condition('max-iterations', 4)
7
    return TerminationConditionAdapterFactory.create('max-iterations', termination_condition_instance)
8
9
10
@pytest.fixture
11
def broadcaster_class():
12
    class TestSubject:
13
        def __init__(self, subject, done_callback):
14
            self.subject = subject
15
            self.done = done_callback
16
17
        def iterate(self):
18
            i = 0
19
            while not self.done():
20
                # do something in the current iteration
21
                print('Iteration with index', i)
22
23
                # notify when we have completed i+1 iterations
24
                self.subject.state = type('Subject', (), {
25
                    'metrics': {'iterations': i + 1},  # we have completed i+1 iterations
26
                }) 
27
                self.subject.notify()
28
                i += 1
29
            return i
30
31
    return TestSubject
32
33
34
@pytest.fixture
35
def test_objects(broadcaster_class, termination_condition_adapter):
36
    from neural_style_transfer.utils.notification import Subject
37
    return type('O', (), {
38
        'broadcaster': broadcaster_class(Subject(), lambda: termination_condition_adapter.satisfied),
39
        'adapter': termination_condition_adapter
40
    })
41
42
43
def test_adapter(test_objects):
44
    # subscribe adapter to broadcaster
45
    test_objects.broadcaster.subject.attach(test_objects.adapter)
46
47
    # select a loop function (from test implementations)
48
49
    # iterate
50
    iterations = test_objects.broadcaster.iterate()
51
52
    # assert iterations completed are the expected nb of oiterations
53
    assert iterations == 4
54