mirror of
https://github.com/esphome/esphome.git
synced 2026-11-09 14:45:57 +00:00
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
73 lines
2.2 KiB
C++
73 lines
2.2 KiB
C++
#include "common.h"
|
|
|
|
namespace esphome::dfrobot_sen0609::testing {
|
|
|
|
class SEN0609FrameTest : public SEN0609Test {
|
|
protected:
|
|
SEN0609FrameTest() : SEN0609Test(RunMode::RUN_MODE_SPEED_AND_DISTANCE) {}
|
|
|
|
void SetUp() override {
|
|
SEN0609Test::SetUp();
|
|
this->hub_.set_target_distance_sensor(&this->distance_);
|
|
this->hub_.set_target_speed_sensor(&this->speed_);
|
|
this->hub_.set_target_energy_sensor(&this->energy_);
|
|
}
|
|
|
|
sensor::Sensor distance_;
|
|
sensor::Sensor speed_;
|
|
sensor::Sensor energy_;
|
|
};
|
|
|
|
TEST_F(SEN0609FrameTest, PresenceFrames) {
|
|
this->feed_("$DFHPD,1, , , *\r\n");
|
|
EXPECT_TRUE(this->has_target_.state);
|
|
this->feed_("$DFHPD,0, , , *\r\n");
|
|
EXPECT_FALSE(this->has_target_.state);
|
|
}
|
|
|
|
TEST_F(SEN0609FrameTest, TargetFrame) {
|
|
this->feed_("$DFDMD,1,0,2.35,-0.40,1234,0,0*\r\n");
|
|
EXPECT_TRUE(this->has_target_.state);
|
|
EXPECT_FLOAT_EQ(this->distance_.state, 2.35f);
|
|
EXPECT_FLOAT_EQ(this->speed_.state, -0.40f);
|
|
EXPECT_FLOAT_EQ(this->energy_.state, 1234.0f);
|
|
}
|
|
|
|
TEST_F(SEN0609FrameTest, NoTargetMakesValuesUnknown) {
|
|
this->feed_("$DFDMD,1,0,2.35,-0.40,1234,0,0*\r\n");
|
|
this->feed_("$DFDMD,0,0,0,0,0,0,0*\r\n");
|
|
EXPECT_FALSE(this->has_target_.state);
|
|
EXPECT_TRUE(std::isnan(this->distance_.state));
|
|
EXPECT_TRUE(std::isnan(this->speed_.state));
|
|
EXPECT_TRUE(std::isnan(this->energy_.state));
|
|
}
|
|
|
|
TEST_F(SEN0609FrameTest, MalformedFramesAreIgnored) {
|
|
this->feed_("$DFHPD,x, , , *\r\n");
|
|
this->feed_("$DFDMD,1,0,abc,0.1,5*\r\n");
|
|
this->feed_("$DFDMD,1,0,2.0*\r\n");
|
|
this->feed_("$DFDMD,,0,2.0,0.1,5*\r\n");
|
|
EXPECT_FALSE(this->has_target_.has_state());
|
|
EXPECT_FALSE(this->distance_.has_state());
|
|
}
|
|
|
|
TEST_F(SEN0609FrameTest, FrameAfterPromptOnSameLine) {
|
|
this->feed_("DFRobot:/>$DFHPD,1, , , *\r\n");
|
|
EXPECT_TRUE(this->has_target_.state);
|
|
}
|
|
|
|
TEST_F(SEN0609FrameTest, FrameSplitAcrossReads) {
|
|
this->feed_("$DFDMD,1,0,3.");
|
|
EXPECT_FALSE(this->distance_.has_state());
|
|
this->feed_("50,0.00,77,0,0*\r\n");
|
|
EXPECT_FLOAT_EQ(this->distance_.state, 3.5f);
|
|
}
|
|
|
|
TEST_F(SEN0609FrameTest, LongLineIsDroppedAndParserRecovers) {
|
|
this->feed_(std::string(200, 'x') + "\r\n");
|
|
this->feed_("$DFHPD,1, , , *\r\n");
|
|
EXPECT_TRUE(this->has_target_.state);
|
|
}
|
|
|
|
} // namespace esphome::dfrobot_sen0609::testing
|