Add support for the renaming of Yamaha Receiver Zones via configuration file. Added a test to cover the change, plus previously untested options. (#11402)

This commit is contained in:
Dave Finlay 2018-01-03 10:25:16 -08:00 committed by Pascal Vizeli
parent f314b6cb6c
commit bb2191b2b0
2 changed files with 46 additions and 4 deletions

View File

@ -27,6 +27,7 @@ SUPPORT_YAMAHA = SUPPORT_VOLUME_SET | SUPPORT_VOLUME_MUTE | \
CONF_SOURCE_NAMES = 'source_names'
CONF_SOURCE_IGNORE = 'source_ignore'
CONF_ZONE_NAMES = 'zone_names'
CONF_ZONE_IGNORE = 'zone_ignore'
DEFAULT_NAME = 'Yamaha Receiver'
@ -40,6 +41,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Optional(CONF_ZONE_IGNORE, default=[]):
vol.All(cv.ensure_list, [cv.string]),
vol.Optional(CONF_SOURCE_NAMES, default={}): {cv.string: cv.string},
vol.Optional(CONF_ZONE_NAMES, default={}): {cv.string: cv.string},
})
@ -57,6 +59,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
source_ignore = config.get(CONF_SOURCE_IGNORE)
source_names = config.get(CONF_SOURCE_NAMES)
zone_ignore = config.get(CONF_ZONE_IGNORE)
zone_names = config.get(CONF_ZONE_NAMES)
if discovery_info is not None:
name = discovery_info.get('name')
@ -84,14 +87,16 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
if receiver.zone not in zone_ignore:
hass.data[KNOWN].add(receiver.ctrl_url)
add_devices([
YamahaDevice(name, receiver, source_ignore, source_names)
YamahaDevice(name, receiver, source_ignore,
source_names, zone_names)
], True)
class YamahaDevice(MediaPlayerDevice):
"""Representation of a Yamaha device."""
def __init__(self, name, receiver, source_ignore, source_names):
def __init__(self, name, receiver, source_ignore,
source_names, zone_names):
"""Initialize the Yamaha Receiver."""
self._receiver = receiver
self._muted = False
@ -101,6 +106,7 @@ class YamahaDevice(MediaPlayerDevice):
self._source_list = None
self._source_ignore = source_ignore or []
self._source_names = source_names or {}
self._zone_names = zone_names or {}
self._reverse_mapping = None
self._playback_support = None
self._is_playback_supported = False
@ -148,9 +154,10 @@ class YamahaDevice(MediaPlayerDevice):
def name(self):
"""Return the name of the device."""
name = self._name
if self._zone != "Main_Zone":
zone_name = self._zone_names.get(self._zone, self._zone)
if zone_name != "Main_Zone":
# Zone will be one of Main_Zone, Zone_2, Zone_3
name += " " + self._zone.replace('_', ' ')
name += " " + zone_name.replace('_', ' ')
return name
@property

View File

@ -4,6 +4,15 @@ import xml.etree.ElementTree as ET
import rxv
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"}
}
def sample_content(name):
"""Read content into a string from a file."""
@ -12,6 +21,14 @@ def sample_content(name):
return content.read()
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
class FakeYamaha(rxv.rxv.RXV):
"""Fake Yamaha receiver.
@ -74,6 +91,7 @@ class TestYamaha(unittest.TestCase):
"""Setup things to be run when tests are started."""
super(TestYamaha, self).setUp()
self.rec = FakeYamaha("http://10.0.0.0:80/YamahaRemoteControl/ctrl")
self.player = yamaha_player(self.rec)
def test_get_playback_support(self):
"""Test the playback."""
@ -92,3 +110,20 @@ class TestYamaha(unittest.TestCase):
self.assertTrue(support.stop)
self.assertFalse(support.skip_f)
self.assertFalse(support.skip_r)
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)