commit
96f8e92822
1 changed files with 154 additions and 0 deletions
|
@ -1,5 +1,159 @@
|
|||
import pytest
|
||||
|
||||
import util.cli
|
||||
import core.config
|
||||
import modules.contrib.amixer
|
||||
|
||||
@pytest.fixture
|
||||
def module_mock(request):
|
||||
def _module_mock(config = []):
|
||||
return modules.contrib.amixer.Module(
|
||||
config=core.config.Config(config),
|
||||
theme=None
|
||||
)
|
||||
|
||||
yield _module_mock
|
||||
|
||||
@pytest.fixture
|
||||
def amixer_mock():
|
||||
def _mock(device='Master', volume='10%', state='on'):
|
||||
return """
|
||||
Simple mixer control '{device}',0
|
||||
Capabilities: pvolume pswitch pswitch-joined
|
||||
Playback channels: Front Left - Front Right
|
||||
Limits: Playback 0 - 65536
|
||||
Mono:
|
||||
Front Left: Playback 55705 [{volume}%] [{state}]
|
||||
Front Right: Playback 55705 [{volume}%] [{state}]
|
||||
""".format(
|
||||
device=device,
|
||||
volume=volume,
|
||||
state=state
|
||||
)
|
||||
|
||||
return _mock
|
||||
|
||||
def test_load_module():
|
||||
__import__("modules.contrib.amixer")
|
||||
|
||||
def test_initial_full_text(module_mock, amixer_mock, mocker):
|
||||
module = module_mock()
|
||||
assert module.widget().full_text() == 'n/a'
|
||||
|
||||
def test_input_registration(mocker):
|
||||
input_register = mocker.patch('core.input.register')
|
||||
|
||||
module = modules.contrib.amixer.Module(
|
||||
config=core.config.Config([]),
|
||||
theme=None
|
||||
)
|
||||
|
||||
input_register.assert_any_call(
|
||||
module,
|
||||
button=core.input.WHEEL_DOWN,
|
||||
cmd=module.decrease_volume
|
||||
)
|
||||
|
||||
input_register.assert_any_call(
|
||||
module,
|
||||
button=core.input.WHEEL_UP,
|
||||
cmd=module.increase_volume
|
||||
)
|
||||
|
||||
input_register.assert_any_call(
|
||||
module,
|
||||
button=core.input.LEFT_MOUSE,
|
||||
cmd=module.toggle
|
||||
)
|
||||
|
||||
def test_volume_update(module_mock, amixer_mock, mocker):
|
||||
mocker.patch(
|
||||
'util.cli.execute',
|
||||
return_value=amixer_mock(volume='25%', state='on')
|
||||
)
|
||||
|
||||
module = module_mock()
|
||||
widget = module.widget()
|
||||
|
||||
module.update()
|
||||
assert widget.full_text() == '25%'
|
||||
assert module.state(widget) == ['unmuted']
|
||||
|
||||
def test_muted_update(module_mock, amixer_mock, mocker):
|
||||
mocker.patch(
|
||||
'util.cli.execute',
|
||||
return_value=amixer_mock(volume='50%', state='off')
|
||||
)
|
||||
|
||||
module = module_mock()
|
||||
widget = module.widget()
|
||||
|
||||
module.update()
|
||||
assert widget.full_text() == '50%'
|
||||
assert module.state(widget) == ['warning', 'muted']
|
||||
|
||||
def test_exception_update(module_mock, mocker):
|
||||
mocker.patch(
|
||||
'util.cli.execute',
|
||||
side_effect=Exception
|
||||
)
|
||||
|
||||
module = module_mock()
|
||||
widget = module.widget()
|
||||
|
||||
module.update()
|
||||
assert widget.full_text() == 'n/a'
|
||||
|
||||
def test_unavailable_amixer(module_mock, mocker):
|
||||
mocker.patch('util.cli.execute', return_value='Invalid')
|
||||
|
||||
module = module_mock()
|
||||
widget = module.widget()
|
||||
|
||||
module.update()
|
||||
assert widget.full_text() == '0%'
|
||||
|
||||
def test_toggle(module_mock, mocker):
|
||||
command = mocker.patch('util.cli.execute')
|
||||
module = module_mock()
|
||||
module.toggle(False)
|
||||
command.assert_called_once_with('amixer -q set Master,0 toggle')
|
||||
|
||||
def test_default_volume(module_mock, mocker):
|
||||
module = module_mock()
|
||||
|
||||
command = mocker.patch('util.cli.execute')
|
||||
module.increase_volume(False)
|
||||
command.assert_called_once_with('amixer -q set Master,0 4%+')
|
||||
|
||||
command = mocker.patch('util.cli.execute')
|
||||
module.decrease_volume(False)
|
||||
command.assert_called_once_with('amixer -q set Master,0 4%-')
|
||||
|
||||
def test_custom_volume(module_mock, mocker):
|
||||
module = module_mock(['-p', 'amixer.percent_change=25'])
|
||||
|
||||
command = mocker.patch('util.cli.execute')
|
||||
module.increase_volume(False)
|
||||
command.assert_called_once_with('amixer -q set Master,0 25%+')
|
||||
|
||||
command = mocker.patch('util.cli.execute')
|
||||
module.decrease_volume(False)
|
||||
command.assert_called_once_with('amixer -q set Master,0 25%-')
|
||||
|
||||
def test_custom_device(module_mock, mocker):
|
||||
mocker.patch('util.cli.execute')
|
||||
module = module_mock(['-p', 'amixer.device=CustomMaster'])
|
||||
|
||||
command = mocker.patch('util.cli.execute')
|
||||
module.toggle(False)
|
||||
command.assert_called_once_with('amixer -q set CustomMaster toggle')
|
||||
|
||||
command = mocker.patch('util.cli.execute')
|
||||
module.increase_volume(False)
|
||||
command.assert_called_once_with('amixer -q set CustomMaster 4%+')
|
||||
|
||||
command = mocker.patch('util.cli.execute')
|
||||
module.decrease_volume(False)
|
||||
command.assert_called_once_with('amixer -q set CustomMaster 4%-')
|
||||
|
||||
|
|
Loading…
Reference in a new issue