#include "services/device/geolocation/wifi_polling_policy.h"
#include <memory>
#include "base/memory/raw_ptr.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace device {
namespace {
const int kDefaultIntervalMillis = 200;
const int kNoChangeIntervalMillis = 300;
const int kTwoNoChangeIntervalMillis = 400;
const int kNoWifiIntervalMillis = 100;
}
class GeolocationWifiPollingPolicyTest : public testing::Test {
public:
void SetUp() override {
WifiPollingPolicy::Initialize(
std::make_unique<GenericWifiPollingPolicy<
kDefaultIntervalMillis, kNoChangeIntervalMillis,
kTwoNoChangeIntervalMillis, kNoWifiIntervalMillis>>());
polling_policy_ = WifiPollingPolicy::Get();
}
void TearDown() override {
polling_policy_ = nullptr;
WifiPollingPolicy::Shutdown();
}
protected:
raw_ptr<WifiPollingPolicy> polling_policy_ = nullptr;
};
TEST_F(GeolocationWifiPollingPolicyTest, CreateDestroy) {
EXPECT_TRUE(polling_policy_);
}
TEST_F(GeolocationWifiPollingPolicyTest, InitialIntervalZero) {
EXPECT_EQ(0, polling_policy_->InitialInterval());
int interval = polling_policy_->InitialInterval();
EXPECT_GT(interval, 0);
EXPECT_LE(interval, kDefaultIntervalMillis);
}
TEST_F(GeolocationWifiPollingPolicyTest, PollingIntervalNonZero) {
EXPECT_EQ(kDefaultIntervalMillis, polling_policy_->PollingInterval());
int interval = polling_policy_->PollingInterval();
EXPECT_GT(interval, 0);
EXPECT_LE(interval, kDefaultIntervalMillis);
}
TEST_F(GeolocationWifiPollingPolicyTest, NoWifiIntervalNonZero) {
EXPECT_EQ(kNoWifiIntervalMillis, polling_policy_->NoWifiInterval());
int interval = polling_policy_->NoWifiInterval();
EXPECT_GT(interval, 0);
EXPECT_LE(interval, kNoWifiIntervalMillis);
}
TEST_F(GeolocationWifiPollingPolicyTest, UpdatePollingIntervalOnce) {
polling_policy_->UpdatePollingInterval(false);
EXPECT_EQ(kNoChangeIntervalMillis, polling_policy_->PollingInterval());
}
TEST_F(GeolocationWifiPollingPolicyTest, UpdatePollingIntervalTwice) {
polling_policy_->UpdatePollingInterval(false);
polling_policy_->UpdatePollingInterval(false);
EXPECT_EQ(kTwoNoChangeIntervalMillis, polling_policy_->PollingInterval());
}
TEST_F(GeolocationWifiPollingPolicyTest, UpdatePollingIntervalThrice) {
polling_policy_->UpdatePollingInterval(false);
polling_policy_->UpdatePollingInterval(false);
polling_policy_->UpdatePollingInterval(false);
EXPECT_EQ(kTwoNoChangeIntervalMillis, polling_policy_->PollingInterval());
}
TEST_F(GeolocationWifiPollingPolicyTest, UpdatePollingIntervalResultsDiffer) {
polling_policy_->UpdatePollingInterval(false);
polling_policy_->UpdatePollingInterval(false);
polling_policy_->UpdatePollingInterval(true);
EXPECT_EQ(kDefaultIntervalMillis, polling_policy_->PollingInterval());
}
TEST_F(GeolocationWifiPollingPolicyTest, ShorterInterval) {
EXPECT_EQ(kDefaultIntervalMillis, polling_policy_->PollingInterval());
int interval = polling_policy_->NoWifiInterval();
EXPECT_GT(interval, 0);
EXPECT_LE(interval, kNoWifiIntervalMillis);
}
TEST_F(GeolocationWifiPollingPolicyTest, LongerInterval) {
EXPECT_EQ(kNoWifiIntervalMillis, polling_policy_->NoWifiInterval());
int interval = polling_policy_->PollingInterval();
EXPECT_GT(interval, 0);
EXPECT_LE(interval, kNoWifiIntervalMillis);
}
}