File: test_fade.py

package info (click to toggle)
pyartnet 2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 668 kB
  • sloc: python: 1,845; makefile: 5
file content (155 lines) | stat: -rw-r--r-- 3,989 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import asyncio
from time import monotonic

from tests.conftest import STEP_MS, TestingNode

from pyartnet.base import BaseUniverse
from pyartnet.base.channel import Channel


async def test_channel_await(node: TestingNode, universe: BaseUniverse, caplog) -> None:
    a = Channel(universe, 1, 1)
    assert a.get_values() == [0]

    a.set_fade([255], 200)

    start = monotonic()
    await asyncio.wait_for(a, 1)
    stop = monotonic()

    assert stop - start >= 0.2


async def test_single_step(node: TestingNode, universe: BaseUniverse, caplog) -> None:
    caplog.set_level(0)

    a = Channel(universe, 1, 1)
    assert a.get_values() == [0]

    a.set_fade([255], 0)
    assert a.get_values() == [0]

    assert list(caplog.messages) == [
        'Added fade with 1 steps:',
        'CH 1: 000 -> 255 | step: +255.0'
    ]

    await node.sleep_steps(2)
    assert a.get_values() == [255]
    assert node.data == ['ff']

    await node.wait_for_task_finish()
    assert node.data == ['ff']


async def test_single_fade(node: TestingNode, universe: BaseUniverse, caplog) -> None:
    caplog.set_level(0)

    a = Channel(universe, 1, 1)
    assert a.get_values() == [0]

    a.set_fade([2], 2 * STEP_MS)
    assert a.get_values() == [0]

    assert list(caplog.messages) == [
        'Added fade with 2 steps:',
        'CH 1: 000 -> 002 | step:  +1.0'
    ]

    await node.sleep_steps(3)
    assert a.get_values() == [2]
    assert node.data == ['01', '02']

    await node.wait_for_task_finish()
    assert node.data == ['01', '02']


async def test_tripple_fade(node: TestingNode, universe: BaseUniverse, caplog) -> None:
    caplog.set_level(0)

    a = Channel(universe, 1, 3)
    assert a.get_values() == [0, 0, 0]

    a.set_fade([3, 6, 9], 3 * STEP_MS)
    assert a.get_values() == [0, 0, 0]

    assert list(caplog.messages) == [
        'Added fade with 3 steps:',
        'CH 1: 000 -> 003 | step:  +1.0',
        'CH 2: 000 -> 006 | step:  +2.0',
        'CH 3: 000 -> 009 | step:  +3.0'
    ]

    await node.sleep_steps(4)
    assert a.get_values() == [3, 6, 9]
    assert node.data == ['010203', '020406', '030609']

    await node.wait_for_task_finish()
    assert node.data == ['010203', '020406', '030609']


async def test_fade_await(node: TestingNode, universe: BaseUniverse, caplog) -> None:
    caplog.set_level(0)

    channel = Channel(universe, 1, 1)
    assert channel.get_values() == [0]

    async def check_no_wait_time_when_no_fade() -> None:
        start = monotonic()
        for _ in range(1000):
            assert not await channel
        assert monotonic() - start < 0.001

    await check_no_wait_time_when_no_fade()

    channel.set_fade([2], 2 * STEP_MS)
    assert channel.get_values() == [0]

    assert list(caplog.messages) == [
        'Added fade with 2 steps:',
        'CH 1: 000 -> 002 | step:  +1.0'
    ]

    assert channel._current_fade is not None
    assert await channel
    assert channel._current_fade is None
    assert channel.get_values() == [2]
    assert node.data == ['01', '02']

    await check_no_wait_time_when_no_fade()

    channel.set_fade([10], 2 * STEP_MS)

    assert channel._current_fade is not None
    await channel
    assert channel._current_fade is None
    assert node.data == ['01', '02', '06', '0a']

    await check_no_wait_time_when_no_fade()
    await node.wait_for_task_finish()


async def test_up_down_fade(node: TestingNode, universe: BaseUniverse, caplog) -> None:
    caplog.set_level(0)

    a = Channel(universe, 1, 1)
    for _ in range(5):
        node.data.clear()
        assert a.get_values() == [0]

        a.set_fade([255], 2 * STEP_MS)
        assert a.get_values() == [0]

        await a

        assert a.get_values() == [255]
        assert node.data == ['80', 'ff']

        # Fade down
        a.set_fade([0], 2 * STEP_MS)
        assert a.get_values() == [255]

        await a

        assert a.get_values() == [0]
        assert node.data == ['80', 'ff', '80', '00']