diff --git a/platformio.ini b/platformio.ini index 5c6072b40..7ff42af8d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -164,5 +164,6 @@ test_build_src = yes build_src_filter = -<*> +<../src/Utils.cpp> + +<../src/helpers/AdvertDataHelpers.cpp> lib_deps = google/googletest @ 1.17.0 diff --git a/test/mocks/Arduino.h b/test/mocks/Arduino.h new file mode 100644 index 000000000..d265a16e6 --- /dev/null +++ b/test/mocks/Arduino.h @@ -0,0 +1,6 @@ +#pragma once + +#include +#include +#include +#include diff --git a/test/test_utils/test_advert_data.cpp b/test/test_utils/test_advert_data.cpp new file mode 100644 index 000000000..ef7198360 --- /dev/null +++ b/test/test_utils/test_advert_data.cpp @@ -0,0 +1,52 @@ +#include + +#include "helpers/AdvertDataHelpers.h" + +namespace { + +TEST(AdvertData, RoundTripsNameOnly) { + uint8_t app_data[MAX_ADVERT_DATA_SIZE] = {}; + AdvertDataBuilder builder(ADV_TYPE_CHAT, "alice"); + + uint8_t len = builder.encodeTo(app_data); + AdvertDataParser parser(app_data, len); + + ASSERT_TRUE(parser.isValid()); + EXPECT_EQ(ADV_TYPE_CHAT, parser.getType()); + EXPECT_TRUE(parser.hasName()); + EXPECT_STREQ("alice", parser.getName()); + EXPECT_FALSE(parser.hasLatLon()); +} + +TEST(AdvertData, RoundTripsNameAndCoordinates) { + uint8_t app_data[MAX_ADVERT_DATA_SIZE] = {}; + AdvertDataBuilder builder(ADV_TYPE_REPEATER, "node", 37.7749, -122.4194); + + uint8_t len = builder.encodeTo(app_data); + AdvertDataParser parser(app_data, len); + + ASSERT_TRUE(parser.isValid()); + EXPECT_EQ(ADV_TYPE_REPEATER, parser.getType()); + EXPECT_TRUE(parser.hasName()); + EXPECT_STREQ("node", parser.getName()); + EXPECT_TRUE(parser.hasLatLon()); + EXPECT_EQ(37774900, parser.getIntLat()); + EXPECT_EQ(-122419400, parser.getIntLon()); + EXPECT_DOUBLE_EQ(37.7749, parser.getLat()); + EXPECT_DOUBLE_EQ(-122.4194, parser.getLon()); +} + +TEST(AdvertData, RoundTripsCoordinateExtremes) { + uint8_t app_data[MAX_ADVERT_DATA_SIZE] = {}; + AdvertDataBuilder builder(ADV_TYPE_SENSOR, "edge", -90.0, 180.0); + + uint8_t len = builder.encodeTo(app_data); + AdvertDataParser parser(app_data, len); + + ASSERT_TRUE(parser.isValid()); + EXPECT_TRUE(parser.hasLatLon()); + EXPECT_EQ(-90000000, parser.getIntLat()); + EXPECT_EQ(180000000, parser.getIntLon()); +} + +} // namespace