def test_extended_ack():
    """Test extended ack."""
    callbacks = MockCallbacks()
    callbacks.callbackvalue1 = "Callback 1"
    callbacks.callbackvalue2 = "Callback 2"
    message_callbacks = MessageCallback()
    address = '1a2b3c'

    template_ext_ack = ExtendedSend.template(address, acknak=MESSAGE_ACK)
    template_std_ack = StandardSend.template(address, acknak=MESSAGE_ACK)

    message_callbacks.add(template_ext_ack, callbacks.callbackvalue1)
    message_callbacks.add(template_std_ack, callbacks.callbackvalue2)
    extmsg = ExtendedSend(address,
                          COMMAND_LIGHT_ON_0X11_NONE, {'d1': 0x02},
                          cmd2=0xff,
                          acknak=MESSAGE_ACK)
    stdmsg = StandardSend(address,
                          COMMAND_LIGHT_ON_0X11_NONE,
                          cmd2=0xff,
                          acknak=MESSAGE_ACK)
    result1 = message_callbacks.get_callbacks_from_message(extmsg)
    result2 = message_callbacks.get_callbacks_from_message(stdmsg)

    assert result2 == [callbacks.callbackvalue2]
    assert result1 == [callbacks.callbackvalue1]
def test_messagecallback_acknak():
    """Test messagecallback acknak."""
    callbacks = MessageCallback()
    callbacktest1 = "test callback 1"
    callbacktest2 = "test callback 2"
    callbacktest3 = "test callback 3"
    callbacktest4 = "test callback 4"
    address = '1a2b3c'

    template_address = StandardSend.template(address=address)
    template_address_ack = StandardSend.template(address=address,
                                                 acknak=MESSAGE_ACK)
    template_empty = StandardSend.template()
    template_nak = StandardSend.template(acknak=MESSAGE_NAK)
    callbacks.add(template_address, callbacktest1)
    callbacks.add(template_address_ack, callbacktest2)
    callbacks.add(template_empty, callbacktest3)
    callbacks.add(template_nak, callbacktest4)

    msg1 = StandardSend(address, COMMAND_LIGHT_ON_0X11_NONE, cmd2=0xcd)
    msg2 = StandardSend('222222', COMMAND_LIGHT_ON_0X11_NONE, cmd2=0xff)
    msg3 = StandardSend('333333',
                        COMMAND_LIGHT_ON_0X11_NONE,
                        cmd2=0xff,
                        acknak=MESSAGE_NAK)
    msg4 = StandardSend('444444',
                        COMMAND_LIGHT_ON_0X11_NONE,
                        cmd2=0xff,
                        acknak=MESSAGE_ACK)

    _LOGGER.debug('Getting callbacks for message 1')
    callback1 = callbacks.get_callbacks_from_message(msg1)
    _LOGGER.debug('Getting callbacks for message 2')
    callback2 = callbacks.get_callbacks_from_message(msg2)
    _LOGGER.debug('Getting callbacks for message 3')
    callback3 = callbacks.get_callbacks_from_message(msg3)
    _LOGGER.debug('Getting callbacks for message 4')
    callback4 = callbacks.get_callbacks_from_message(msg4)

    assert len(callback1) == 4
    assert len(callback2) == 2
    assert len(callback3) == 2
    assert len(callback4) == 1
def test_delete_callback():
    """Test delete callback."""
    callbacks = MessageCallback()
    callbacktest1 = "test callback 1"
    callbacktest2 = "test callback 2"
    callbacktest3 = "test callback 3"

    callbacks.add(StandardSend.template(), callbacktest1)
    callbacks.add(StandardSend.template(), callbacktest2)
    callbacks.add(StandardSend.template(acknak=MESSAGE_NAK), callbacktest3)

    msg = StandardSend('333333', COMMAND_LIGHT_ON_0X11_NONE, cmd2=0xff,
                       acknak=MESSAGE_NAK)

    callback_list = callbacks.get_callbacks_from_message(msg)
    assert len(callback_list) == 3

    callbacks.remove(StandardSend.template(), callbacktest2)
    callback_list = callbacks.get_callbacks_from_message(msg)
    assert len(callback_list) == 2