| @@ -64,6 +64,7 @@ class DenonAVR(object,basic.LineReceiver): | |||
| self._speakera = None | |||
| self._speakerb = None | |||
| self._z2mute = None | |||
| self._input = None | |||
| self._zm = None | |||
| self._ms = None | |||
| @@ -97,7 +98,10 @@ class DenonAVR(object,basic.LineReceiver): | |||
| def setter(self, arg): | |||
| arg = settrans(arg) | |||
| if arg != getattr(self, attrname): | |||
| self._sendcmd(cmd, args[arg]) | |||
| try: | |||
| self._sendcmd(cmd, args[arg]) | |||
| except KeyError: | |||
| raise ValueError(arg) | |||
| return property(getter, setter, doc=doc) | |||
| @@ -108,6 +112,7 @@ class DenonAVR(object,basic.LineReceiver): | |||
| return self._ms | |||
| power = _magic('PW', '_power', bool, { True: 'ON', False: 'STANDBY' }, 'Power status, True if on') | |||
| input = _magic('SI', '_input', str, { x:x for x in ('PHONO', 'TUNER', 'CD', 'V.AUX', 'DVD', 'TV', 'SAT/CBL', 'DVR', ) }, 'Power status, True if on') | |||
| mute = _magic('MU', '_mute', bool, { True: 'ON', False: 'OFF' }, 'Mute speakers, True speakers are muted (no sound)') | |||
| zm = _magic('ZM', '_zm', bool, { True: 'ON', False: 'OFF' }, 'Main Zone On, True if on') | |||
| z2mute = _magic('Z2MU', '_z2mute', bool, { True: 'ON', False: 'OFF' }, 'Mute Zone 2 speakers, True speakers are muted (no sound)') | |||
| @@ -199,6 +204,10 @@ class DenonAVR(object,basic.LineReceiver): | |||
| def proc_MS(self, arg): | |||
| self._ms = arg | |||
| def proc_SI(self, arg): | |||
| self._input = arg | |||
| self._notify('input') | |||
| def proc_PS(self, arg): | |||
| if arg == 'FRONT A': | |||
| self._speakera = True | |||
| @@ -440,6 +449,11 @@ class TestMethods(unittest.TestCase): | |||
| efun.assert_called_once_with('zm') | |||
| efun.reset_mock() | |||
| avr.proc_SI('TUNER') | |||
| efun.assert_called_once_with('input') | |||
| efun.reset_mock() | |||
| avr.unregister(efun) | |||
| avr.proc_PW('ON') | |||
| @@ -586,3 +600,39 @@ class TestMethods(unittest.TestCase): | |||
| avr.vol = 0 | |||
| self.assertRaises(ValueError, setattr, avr, 'vol', 82) | |||
| def test_proc_SI(self): | |||
| avr = self.avr | |||
| avr.proc_SI('PHONO') | |||
| self.assertEqual(avr.input, 'PHONO') | |||
| avr.proc_SI('TUNER') | |||
| self.assertEqual(avr.input, 'TUNER') | |||
| @mock.patch('yadenon.DenonAVR.sendLine') | |||
| def test_input(self, sendline): | |||
| avr = self.avr | |||
| avr.input = 'PHONO' | |||
| sendline.assert_any_call('SIPHONO') | |||
| # Verify the transition doesn't happen | |||
| self.assertIsNone(avr.input) | |||
| # till we get notification | |||
| avr.proc_SI('PHONO') | |||
| self.assertEqual(avr.input, 'PHONO') | |||
| avr.input = 'TUNER' | |||
| sendline.assert_any_call('SITUNER') | |||
| avr.input = 'CD' | |||
| avr.input = 'V.AUX' | |||
| avr.input = 'DVD' | |||
| avr.input = 'TV' | |||
| avr.input = 'SAT/CBL' | |||
| avr.input = 'DVR' | |||
| self.assertRaises(ValueError, setattr, avr, 'input', 'bogus') | |||
| self.assertRaises(ValueError, setattr, avr, 'input', True) | |||
| self.assertRaises(ValueError, setattr, avr, 'input', 34) | |||