blob: 9d3b9e80f8eb476294ee5dc949938be97e7b5848 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/dips/dips_utils.h"
#include "base/time/time.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using ::testing::Eq;
using ::testing::Pair;
TEST(TimestampRangeTest, UpdateTimestampRangeEmpty) {
const base::Time time = base::Time::FromDoubleT(1);
TimestampRange range;
EXPECT_TRUE(UpdateTimestampRange(range, time));
EXPECT_EQ(range.value(), std::make_pair(time, time));
}
TEST(TimestampRangeTest, UpdateTimestampRange_SetLast) {
const base::Time time1 = base::Time::FromDoubleT(1);
const base::Time time2 = base::Time::FromDoubleT(2);
const base::Time time3 = base::Time::FromDoubleT(3);
TimestampRange range = {{time1, time2}};
EXPECT_TRUE(UpdateTimestampRange(range, time3));
EXPECT_EQ(range.value(), std::make_pair(time1, time3));
}
TEST(TimestampRangeTest, UpdateTimestampRange_SetFirst) {
const base::Time time1 = base::Time::FromDoubleT(1);
const base::Time time2 = base::Time::FromDoubleT(2);
const base::Time time3 = base::Time::FromDoubleT(3);
TimestampRange range = {{time2, time3}};
EXPECT_TRUE(UpdateTimestampRange(range, time1));
EXPECT_EQ(range.value(), std::make_pair(time1, time3));
}
TEST(TimestampRangeTest, UpdateTimestampRange_Unmodified) {
const base::Time time1 = base::Time::FromDoubleT(1);
const base::Time time2 = base::Time::FromDoubleT(2);
const base::Time time3 = base::Time::FromDoubleT(3);
TimestampRange range = {{time1, time3}};
EXPECT_FALSE(UpdateTimestampRange(range, time2));
EXPECT_EQ(range.value(), std::make_pair(time1, time3));
}
TEST(TimestampRangeTest, IsNullOrWithin_BothEmpty) {
EXPECT_TRUE(IsNullOrWithin(/*inner=*/{}, /*outer=*/{}));
}
TEST(TimestampRangeTest, IsNullOrWithin_NothingWithinEmptyOuter) {
TimestampRange inner = {
{base::Time::FromDoubleT(1), base::Time::FromDoubleT(1)}};
TimestampRange outer = {};
EXPECT_FALSE(IsNullOrWithin(inner, outer));
}
TEST(TimestampRangeTest, IsNullOrWithin_EmptyInnerWithin) {
TimestampRange inner = {};
TimestampRange outer = {
{base::Time::FromDoubleT(1), base::Time::FromDoubleT(1)}};
EXPECT_TRUE(IsNullOrWithin(inner, outer));
}
TEST(TimestampRangeTest, IsNullOrWithin_ChecksLowerBound) {
TimestampRange outer = {
{base::Time::FromDoubleT(2), base::Time::FromDoubleT(5)}};
TimestampRange starts_on_time = {
{base::Time::FromDoubleT(3), base::Time::FromDoubleT(4)}};
TimestampRange starts_too_early = {
{base::Time::FromDoubleT(1), base::Time::FromDoubleT(4)}};
EXPECT_FALSE(IsNullOrWithin(starts_too_early, outer));
EXPECT_TRUE(IsNullOrWithin(starts_on_time, outer));
}
TEST(TimestampRangeTest, IsNullOrWithin_ChecksUpperBound) {
TimestampRange outer = {
{base::Time::FromDoubleT(2), base::Time::FromDoubleT(5)}};
TimestampRange ends_in_time = {
{base::Time::FromDoubleT(3), base::Time::FromDoubleT(4)}};
TimestampRange ends_too_late = {
{base::Time::FromDoubleT(3), base::Time::FromDoubleT(10)}};
EXPECT_TRUE(IsNullOrWithin(ends_in_time, outer));
EXPECT_FALSE(IsNullOrWithin(ends_too_late, outer));
}
TEST(TimestampRangeTest, IsNullOrWithin_AllowsEquals) {
TimestampRange range = {
{base::Time::FromDoubleT(1), base::Time::FromDoubleT(1)}};
EXPECT_TRUE(IsNullOrWithin(range, range));
}
TEST(BucketizeBounceDelayTest, BucketizeBounceDelay) {
// any TimeDelta in (-inf, 1s) should return 0
EXPECT_EQ(0, BucketizeBounceDelay(base::Days(-1)));
EXPECT_EQ(0, BucketizeBounceDelay(base::Milliseconds(0)));
EXPECT_EQ(0, BucketizeBounceDelay(base::Milliseconds(999)));
// anything in [1s, 2s) should return 1
EXPECT_EQ(1, BucketizeBounceDelay(base::Milliseconds(1000)));
EXPECT_EQ(1, BucketizeBounceDelay(base::Milliseconds(1999)));
// similarly for [2s, 3s)
EXPECT_EQ(2, BucketizeBounceDelay(base::Milliseconds(2000)));
EXPECT_EQ(2, BucketizeBounceDelay(base::Milliseconds(2999)));
// ...
EXPECT_EQ(9, BucketizeBounceDelay(base::Milliseconds(9999)));
// anything in [10s, inf) should return 10
EXPECT_EQ(10, BucketizeBounceDelay(base::Milliseconds(10000)));
EXPECT_EQ(10, BucketizeBounceDelay(base::Milliseconds(10001)));
EXPECT_EQ(10, BucketizeBounceDelay(base::Days(1)));
}