1import pytest
2
3from ...annotations import skip_if_continuous_integration
4
5
6try:
7    from pyglet.media.drivers import pulse
8    has_pulse = True
9except ImportError:
10    has_pulse = False
11
12try:
13    from pyglet.media.drivers import openal
14    has_openal = True
15except ImportError:
16    has_openal = False
17
18try:
19    from pyglet.media.drivers import directsound
20    has_directsound = True
21except ImportError:
22    has_directsound = False
23
24
25def check_listener_defaults(listener):
26    assert listener.volume == 1.0
27    assert listener.position == (0, 0, 0)
28    assert listener.forward_orientation == (0, 0, -1)
29    assert listener.up_orientation == (0, 1, 0)
30
31
32def check_modifying_values(listener):
33    listener.volume = 0.5
34    listener.position = (-1, 0, 0)
35    listener.forward_orientation = (0, 0, 1)
36    listener.up_orientation = (0, -1, 0)
37    assert listener.volume == 0.5
38    assert listener.position == (-1, 0, 0)
39    assert listener.forward_orientation == (0, 0, 1)
40    assert listener.up_orientation == (0, -1, 0)
41
42
43@pytest.mark.skipif(not has_openal, reason="Test requires OpenAL")
44def test_openal_listener():
45    driver = openal.create_audio_driver()
46    listener = driver.get_listener()
47    check_listener_defaults(listener=listener)
48    check_modifying_values(listener=listener)
49    # Need to garbage collect the listener before the driver is deleted
50    del listener
51
52
53@skip_if_continuous_integration()   # test user cannot connect to PulseAudio daemon
54@pytest.mark.skipif(not has_pulse, reason="Test requires PulseAudio")
55def test_pulse_listener():
56    driver = pulse.create_audio_driver()
57    listener = driver.get_listener()
58    check_listener_defaults(listener=listener)
59    check_modifying_values(listener=listener)
60    # Need to garbage collect the listener before the driver is deleted
61    del listener
62
63
64@pytest.mark.skipif(not has_directsound, reason="Test requires DirectSound")
65def test_directsound_listener():
66    driver = directsound.create_audio_driver()
67    listener = driver.get_listener()
68    check_listener_defaults(listener=listener)
69    check_modifying_values(listener=listener)
70    # Need to garbage collect the listener before the driver is deleted
71    del listener
72