コード例 #1
0
    def test_write_characteristic_read_only(self):
        accessories = Accessories()

        result = asyncio.get_event_loop().run_until_complete(
            accessories.write_characteristic([{
                'aid': 1,
                'iid': 2,
                'value': 'test_value'
            }]))

        self.assertEqual(result, [{
            'aid': 1,
            'iid': 2,
            'status': -70404,
        }])
コード例 #2
0
    def test_write_characteristic(self):
        accessory = Accessory(name='PyHAP',
                              model='PyHAP1,1',
                              manufacturer='PyHAP',
                              hardware_revision='0')
        service = LightbulbService()

        bool_characteristic = On(False)
        int_characteristic = Brightness(8)
        float_characteristic = Hue(5.0)

        service.add_characteristic(bool_characteristic)
        service.add_characteristic(int_characteristic)
        service.add_characteristic(float_characteristic)

        accessories = Accessories()
        accessory.add_service(service)
        accessories.add(accessory)

        # bool characteristic
        callback = AsyncMock()
        bool_characteristic.callback = callback

        self.assertEqual(bool_characteristic.value, False)
        result = asyncio.get_event_loop().run_until_complete(
            accessories.write_characteristic([{
                'aid': 2,
                'iid': 10,
                'value': True
            }]))
        callback.assert_called_once_with(True)
        self.assertEqual(result, [])
        self.assertEqual(bool_characteristic.value, True)

        # int characteristic write
        callback = AsyncMock()
        int_characteristic.callback = callback

        self.assertEqual(int_characteristic.value, 8)
        result = asyncio.get_event_loop().run_until_complete(
            accessories.write_characteristic([{
                'aid': 2,
                'iid': 11,
                'value': 12
            }]))
        callback.assert_called_once_with(12)
        self.assertEqual(result, [])
        self.assertEqual(int_characteristic.value, 12)

        # float characteristic write
        callback = AsyncMock()
        float_characteristic.callback = callback

        self.assertEqual(float_characteristic.value, 5.0)
        result = asyncio.get_event_loop().run_until_complete(
            accessories.write_characteristic([{
                'aid': 2,
                'iid': 12,
                'value': 7.0
            }]))
        callback.assert_called_once_with(7.0)
        self.assertEqual(result, [])
        self.assertEqual(float_characteristic.value, 7.0)

        # None value during write, leave previous value
        previous_value = bool_characteristic.value
        result = asyncio.get_event_loop().run_until_complete(
            accessories.write_characteristic([{
                'aid': 2,
                'iid': 10
            }]))
        self.assertEqual(result, [])
        self.assertEqual(bool_characteristic.value, previous_value)
        bool_characteristic.value = previous_value

        # None callback
        bool_characteristic.callback = None
        result = asyncio.get_event_loop().run_until_complete(
            accessories.write_characteristic([{
                'aid': 2,
                'iid': 10,
                'value': True
            }]))
        self.assertEqual(result, [])

        # Exception in callback
        bool_characteristic.callback = exception_callback
        result = asyncio.get_event_loop().run_until_complete(
            accessories.write_characteristic([{
                'aid': 2,
                'iid': 10,
                'value': True
            }]))
        self.assertEqual(result, [{
            'aid': 2,
            'iid': 10,
            'status': -70402,
        }])