#include "ProtocolNexaTest.h"
#include "service/ProtocolNexa.h"

CPPUNIT_TEST_SUITE_REGISTRATION (ProtocolNexaTest);

class ProtocolNexaTest::PrivateData {
public:
	ProtocolNexa *protocol;
};

void ProtocolNexaTest :: setUp (void) {
	d = new PrivateData;
	d->protocol = new ProtocolNexa();
}

void ProtocolNexaTest :: tearDown (void) {
	delete d->protocol;
	delete d;
}

void ProtocolNexaTest :: decodeDataTest (void) {
	CPPUNIT_ASSERT_EQUAL_MESSAGE(
		"Arctech Codeswitch A1 ON",
		std::string("class:command;protocol:arctech;model:codeswitch;house:A;unit:1;method:turnon;"),
		d->protocol->decodeData(ControllerMessage("protocol:arctech;model:codeswitch;data:0xE00;"))
	);
	CPPUNIT_ASSERT_EQUAL_MESSAGE(
		"Arctech Codeswitch A1 OFF",
		std::string("class:command;protocol:arctech;model:codeswitch;house:A;unit:1;method:turnoff;"),
		d->protocol->decodeData(ControllerMessage("protocol:arctech;model:codeswitch;data:0x600;"))
	);
	CPPUNIT_ASSERT_EQUAL_MESSAGE(
		"Arctech Selflearning 1329110 1 ON",
		std::string("class:command;protocol:arctech;model:selflearning;house:1329110;unit:1;group:0;method:turnon;"),
		d->protocol->decodeData(ControllerMessage("protocol:arctech;model:selflearning;data:0x511F590;"))
	);
	CPPUNIT_ASSERT_EQUAL_MESSAGE(
		"Arctech Selflearning 1329110 1 OFF",
		std::string("class:command;protocol:arctech;model:selflearning;house:1329110;unit:1;group:0;method:turnoff;"),
		d->protocol->decodeData(ControllerMessage("protocol:arctech;model:selflearning;data:0x511F580;"))
	);
}
