mirror of
https://github.com/home-assistant/core.git
synced 2025-07-20 03:37:07 +00:00
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:
parent
f314b6cb6c
commit
bb2191b2b0
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user