mirror of
https://github.com/esphome/esphome.git
synced 2026-08-29 17:16:45 +00:00
60 lines
1.9 KiB
C++
60 lines
1.9 KiB
C++
#include <gtest/gtest.h>
|
|
|
|
#include <cstdint>
|
|
|
|
#include "esphome/components/ble_device_base/ble_hub.h"
|
|
|
|
namespace esphome::ble_device_base::testing {
|
|
|
|
// Pins the request_scan_mode() contract: the base default refuses (so hubs
|
|
// without a mode switch — and out-of-tree trackers — keep building and
|
|
// callers report the real state), while an overriding hub both honors the
|
|
// request and applies it.
|
|
namespace {
|
|
|
|
class DefaultHub : public BLEHub {
|
|
public:
|
|
void register_listener(ESPBTDeviceListener *listener) override {}
|
|
void set_raw_advertisement_callback(RawAdvertisementCallback callback) override {}
|
|
HubCapabilities get_capabilities() const override { return {false, false, false}; }
|
|
void get_adapter_mac(uint8_t out[6]) override {}
|
|
bool scan_running() override { return false; }
|
|
// Backed by real state so "changes nothing" is observable: a base default
|
|
// that silently mutated the hub would flip this and fail the assertion.
|
|
bool scan_active() override { return this->active_; }
|
|
|
|
protected:
|
|
bool active_{true};
|
|
};
|
|
|
|
class SwitchingHub : public DefaultHub {
|
|
public:
|
|
HubCapabilities get_capabilities() const override { return {true, false, false}; }
|
|
bool request_scan_mode(bool active) override {
|
|
this->active_ = active;
|
|
return true;
|
|
}
|
|
};
|
|
|
|
} // namespace
|
|
|
|
TEST(BLEHubScanModeRequest, DefaultRefusesAndChangesNothing) {
|
|
DefaultHub hub;
|
|
EXPECT_TRUE(hub.scan_active());
|
|
EXPECT_FALSE(hub.request_scan_mode(false));
|
|
// Refused, not applied-and-reported-false: the state is untouched.
|
|
EXPECT_TRUE(hub.scan_active());
|
|
EXPECT_FALSE(hub.request_scan_mode(true));
|
|
EXPECT_TRUE(hub.scan_active());
|
|
}
|
|
|
|
TEST(BLEHubScanModeRequest, OverrideHonorsAndApplies) {
|
|
SwitchingHub hub;
|
|
EXPECT_TRUE(hub.request_scan_mode(true));
|
|
EXPECT_TRUE(hub.scan_active());
|
|
EXPECT_TRUE(hub.request_scan_mode(false));
|
|
EXPECT_FALSE(hub.scan_active());
|
|
}
|
|
|
|
} // namespace esphome::ble_device_base::testing
|