Tasmota/lib/IRremoteESP8266-2.7.10/test/ir_Multibrackets_test.cpp

99 lines
3.2 KiB
C++

// Copyright 2020 David Conran
#include "IRac.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Tests for decodeMultibrackets().
// Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1103
TEST(TestDecodeMultibrackets, RealExample) {
IRsendTest irsend(kGpioUnused);
IRrecv irrecv(kGpioUnused);
// The 1 + ok keypress:
uint16_t rawData_1[7] = {20100, 20472, 15092, 30704, 20102, 20472, 15086};
irsend.begin();
irsend.reset();
irsend.sendRaw(rawData_1, 7, 38);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(decode_type_t::MULTIBRACKETS, irsend.capture.decode_type);
ASSERT_EQ(kMultibracketsBits, irsend.capture.bits);
EXPECT_EQ(0x87, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
// ok keypress.
const uint16_t rawData_2[11] = {
25124, 5108, 5038, 5110, 5034, 40940, 25132, 5108, 5036, 5110, 5036};
irsend.begin();
irsend.reset();
irsend.sendRaw(rawData_2, 11, 38);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(decode_type_t::MULTIBRACKETS, irsend.capture.decode_type);
ASSERT_EQ(kMultibracketsBits, irsend.capture.bits);
EXPECT_EQ(0xD4, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
}
TEST(TestDecodeMultibrackets, SyntheticExample) {
IRsendTest irsend(kGpioUnused);
IRrecv irrecv(kGpioUnused);
irsend.begin();
irsend.reset();
irsend.sendMultibrackets(0x87);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(decode_type_t::MULTIBRACKETS, irsend.capture.decode_type);
EXPECT_EQ(kMultibracketsBits, irsend.capture.bits);
EXPECT_EQ(0x87, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
// Real data is:
// uint16_t rawData[7] = {20100, 20472, 15092, 30704, 20102, 20472, 15086};
EXPECT_EQ(
"f38000d50m20000s20000m15000s30000m20000s20000m15000s30000",
irsend.outputStr());
}
TEST(TestUtils, Housekeeping) {
ASSERT_EQ("MULTIBRACKETS", typeToString(decode_type_t::MULTIBRACKETS));
ASSERT_EQ(decode_type_t::MULTIBRACKETS, strToDecodeType("MULTIBRACKETS"));
ASSERT_FALSE(hasACState(decode_type_t::MULTIBRACKETS));
ASSERT_FALSE(IRac::isProtocolSupported(decode_type_t::MULTIBRACKETS));
ASSERT_EQ(kMultibracketsBits,
IRsend::defaultBits(decode_type_t::MULTIBRACKETS));
ASSERT_EQ(kMultibracketsDefaultRepeat,
IRsend::minRepeats(decode_type_t::MULTIBRACKETS));
}
TEST(TestDecodeMultibrackets, ShortNoRepeatExample) {
IRsendTest irsend(kGpioUnused);
IRrecv irrecv(kGpioUnused);
// The 1 + ok keypress: (edited to be bare minimum)
uint16_t rawData[3] = {20100, 20472, 15092};
irsend.begin();
irsend.reset();
irsend.sendRaw(rawData, 3, 38);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(decode_type_t::MULTIBRACKETS, irsend.capture.decode_type);
ASSERT_EQ(kMultibracketsBits, irsend.capture.bits);
EXPECT_EQ(0x87, irsend.capture.value);
EXPECT_EQ(0x0, irsend.capture.address);
EXPECT_EQ(0x0, irsend.capture.command);
}