summaryrefslogtreecommitdiff
path: root/tests/test_functions_audio.py
blob: 5aaec5a3fd32137367143c6ec7981a6077595f4f (plain)
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
"""Tests for the audio primitive."""

import pytest

from blc2.functions.audio import Audio
from blc2.constants import BXW

def test_audio(aws):
    a = Audio(aws)
    
    a.fade_out = 1000
    a.fade_out = 1000
    a.fade_in = 1000
    a.fade_in = 1000
    a.filename = "nonexistant"
    
    assert a.audio_scope == {"nonexistant"}
    assert not a.scope
    assert a.duration == 0
    assert a.actual_duration == 0

    a.filename = "tests/silence.m4a"
    assert a.filename == "tests/silence.m4a"
    assert a.audio_scope == {"tests/silence.m4a"}
    assert a.duration == 2024
    assert a.actual_duration == 3024

    a.fade_out = 500
    assert a.fade_out == 500
    assert a.duration == 2524
    assert a.actual_duration == 3024

    lc, ac, _ = a.render(0)
    assert not lc
    assert len(ac) == 1
    assert ac[0][1:] == ("tests/silence.m4a", 0, 1000, 2524, 500)

    _, ac2, _ = a.render(3000)
    assert ac2 == ac

    _, ac, _ = a.render(5000)
    assert not ac

    with pytest.raises(ValueError):
        _ = Audio(aws, id_=101, fade_in=-10)

    assert 101 not in aws.functions

    fout = a.fade_out
    with pytest.raises(ValueError):
        a.fade_out = -50
    assert a.fade_out == fout

    fin = a.fade_in
    with pytest.raises(ValueError):
        a.fade_in = -50
    assert a.fade_in == fin

    a._set_duration(10000)
    assert a.copy_data(a.get_data()) is None

    a.filename = None
    assert a.duration == 0
    assert a.actual_duration == 0

def test_audio_serialize(aws, test_xml_eq):
    a1 = Audio(aws, id_=123, name="Test Audio 1", fade_out=100, filename="test.wav")
    a2 = Audio(aws, id_=124, name="Test Audio 2", filename=None)

    test = (a1, a2)
    success = [
"""<function type="Audio" xmlns="{}" id="123" name="Test Audio 1" fade-in="0" fade-out="100" filename="test.wav"/>""",
"""<function type="Audio" xmlns="{}" id="124" name="Test Audio 2" fade-in="0" fade-out="0"/>"""
    ]

    for case, s in zip(test, success):
        s = s.replace('\n', "").format(BXW.strip("{}"))
        assert test_xml_eq(case.serialize(), s)