2016-11-16 00:56:40 -05:00
|
|
|
"""The tests for the Yamaha Media player platform."""
|
|
|
|
import unittest
|
|
|
|
import xml.etree.ElementTree as ET
|
|
|
|
|
|
|
|
import rxv
|
|
|
|
|
2018-01-03 10:25:16 -08:00
|
|
|
import homeassistant.components.media_player.yamaha as yamaha
|
|
|
|
|
|
|
|
TEST_CONFIG = {
|
|
|
|
'name': "Test Receiver",
|
|
|
|
'source_ignore': ['HDMI5'],
|
|
|
|
'source_names': {'HDMI1': 'Laserdisc'},
|
|
|
|
'zone_names': {'Main_Zone': "Laser Dome"}
|
|
|
|
}
|
|
|
|
|
2016-11-16 00:56:40 -05:00
|
|
|
|
|
|
|
def sample_content(name):
|
|
|
|
"""Read content into a string from a file."""
|
|
|
|
with open('tests/components/media_player/yamaha_samples/%s' % name,
|
2016-11-18 23:05:03 +01:00
|
|
|
encoding='utf-8') as content:
|
|
|
|
return content.read()
|
2016-11-16 00:56:40 -05:00
|
|
|
|
|
|
|
|
2018-01-03 10:25:16 -08:00
|
|
|
def yamaha_player(receiver):
|
|
|
|
"""Create a YamahaDevice from a given receiver, presumably a Mock."""
|
|
|
|
zone_controller = receiver.zone_controllers()[0]
|
|
|
|
player = yamaha.YamahaDevice(receiver=zone_controller, **TEST_CONFIG)
|
|
|
|
player.build_source_list()
|
|
|
|
return player
|
|
|
|
|
|
|
|
|
2016-11-16 00:56:40 -05:00
|
|
|
class FakeYamaha(rxv.rxv.RXV):
|
|
|
|
"""Fake Yamaha receiver.
|
|
|
|
|
|
|
|
This inherits from RXV but overrides methods for testing that
|
|
|
|
would normally have hit the network. This makes it easier to
|
|
|
|
ensure that usage of the rxv library by HomeAssistant is as we'd
|
|
|
|
expect.
|
|
|
|
"""
|
2016-12-28 20:04:59 +02:00
|
|
|
|
2016-11-18 23:05:03 +01:00
|
|
|
_fake_input = 'HDMI1'
|
2016-11-16 00:56:40 -05:00
|
|
|
|
|
|
|
def _discover_features(self):
|
2016-11-18 23:05:03 +01:00
|
|
|
"""Fake the discovery feature."""
|
|
|
|
self._desc_xml = ET.fromstring(sample_content('desc.xml'))
|
2016-11-16 00:56:40 -05:00
|
|
|
|
|
|
|
@property
|
|
|
|
def input(self):
|
2017-09-23 17:15:46 +02:00
|
|
|
"""A fake input for the receiver."""
|
2016-11-16 00:56:40 -05:00
|
|
|
return self._fake_input
|
|
|
|
|
|
|
|
@input.setter
|
|
|
|
def input(self, input_name):
|
2016-11-18 23:05:03 +01:00
|
|
|
"""Set the input for the fake receiver."""
|
2016-11-16 00:56:40 -05:00
|
|
|
assert input_name in self.inputs()
|
|
|
|
self._fake_input = input_name
|
|
|
|
|
|
|
|
def inputs(self):
|
2017-09-23 17:15:46 +02:00
|
|
|
"""All inputs of the fake receiver."""
|
2016-11-16 00:56:40 -05:00
|
|
|
return {'AUDIO1': None,
|
|
|
|
'AUDIO2': None,
|
|
|
|
'AV1': None,
|
|
|
|
'AV2': None,
|
|
|
|
'AV3': None,
|
|
|
|
'AV4': None,
|
|
|
|
'AV5': None,
|
|
|
|
'AV6': None,
|
|
|
|
'AirPlay': 'AirPlay',
|
|
|
|
'HDMI1': None,
|
|
|
|
'HDMI2': None,
|
|
|
|
'HDMI3': None,
|
|
|
|
'HDMI4': None,
|
|
|
|
'HDMI5': None,
|
|
|
|
'NET RADIO': 'NET_RADIO',
|
|
|
|
'Pandora': 'Pandora',
|
|
|
|
'Rhapsody': 'Rhapsody',
|
|
|
|
'SERVER': 'SERVER',
|
|
|
|
'SiriusXM': 'SiriusXM',
|
|
|
|
'Spotify': 'Spotify',
|
|
|
|
'TUNER': 'Tuner',
|
|
|
|
'USB': 'USB',
|
|
|
|
'V-AUX': None,
|
|
|
|
'iPod (USB)': 'iPod_USB'}
|
|
|
|
|
|
|
|
|
2016-11-18 23:05:03 +01:00
|
|
|
# pylint: disable=no-member, invalid-name
|
2016-11-16 00:56:40 -05:00
|
|
|
class TestYamaha(unittest.TestCase):
|
|
|
|
"""Test the media_player yamaha module."""
|
|
|
|
|
2016-11-18 23:05:03 +01:00
|
|
|
def setUp(self):
|
2016-11-16 00:56:40 -05:00
|
|
|
"""Setup things to be run when tests are started."""
|
|
|
|
super(TestYamaha, self).setUp()
|
2017-05-26 13:12:17 -07:00
|
|
|
self.rec = FakeYamaha("http://10.0.0.0:80/YamahaRemoteControl/ctrl")
|
2018-01-03 10:25:16 -08:00
|
|
|
self.player = yamaha_player(self.rec)
|
2016-11-16 00:56:40 -05:00
|
|
|
|
|
|
|
def test_get_playback_support(self):
|
2016-12-28 20:04:59 +02:00
|
|
|
"""Test the playback."""
|
2016-11-16 00:56:40 -05:00
|
|
|
rec = self.rec
|
|
|
|
support = rec.get_playback_support()
|
|
|
|
self.assertFalse(support.play)
|
|
|
|
self.assertFalse(support.pause)
|
|
|
|
self.assertFalse(support.stop)
|
|
|
|
self.assertFalse(support.skip_f)
|
|
|
|
self.assertFalse(support.skip_r)
|
|
|
|
|
2016-11-18 23:05:03 +01:00
|
|
|
rec.input = 'NET RADIO'
|
2016-11-16 00:56:40 -05:00
|
|
|
support = rec.get_playback_support()
|
|
|
|
self.assertTrue(support.play)
|
|
|
|
self.assertFalse(support.pause)
|
|
|
|
self.assertTrue(support.stop)
|
|
|
|
self.assertFalse(support.skip_f)
|
|
|
|
self.assertFalse(support.skip_r)
|
2018-01-03 10:25:16 -08:00
|
|
|
|
|
|
|
def test_configuration_options(self):
|
|
|
|
"""Test configuration options."""
|
|
|
|
rec_name = TEST_CONFIG['name']
|
|
|
|
src_zone = 'Main_Zone'
|
|
|
|
src_zone_alt = src_zone.replace('_', ' ')
|
|
|
|
renamed_zone = TEST_CONFIG['zone_names'][src_zone]
|
|
|
|
ignored_src = TEST_CONFIG['source_ignore'][0]
|
|
|
|
renamed_src = 'HDMI1'
|
|
|
|
new_src = TEST_CONFIG['source_names'][renamed_src]
|
|
|
|
self.assertFalse(self.player.name == rec_name + ' ' + src_zone)
|
|
|
|
self.assertFalse(self.player.name == rec_name + ' ' + src_zone_alt)
|
|
|
|
self.assertTrue(self.player.name == rec_name + ' ' + renamed_zone)
|
|
|
|
|
|
|
|
self.assertFalse(ignored_src in self.player.source_list)
|
|
|
|
self.assertFalse(renamed_src in self.player.source_list)
|
|
|
|
self.assertTrue(new_src in self.player.source_list)
|