blob: 843f768a9170f398e246e8c1f0bf88383ec53805 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/performance_manager/public/voting/optional_voting_channel.h"
#include "components/performance_manager/test_support/voting.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace performance_manager {
namespace {
using TestVote = voting::Vote<void, int, 0>;
using TestVotingChannel = voting::VotingChannel<TestVote>;
using TestVotingChannelFactory = voting::VotingChannelFactory<TestVote>;
using TestOptionalVotingChannel = voting::OptionalVotingChannel<TestVote>;
using DummyVoteObserver = voting::test::DummyVoteObserver<TestVote>;
// Some dummy contexts.
const void* kDummyContext1 = reinterpret_cast<const void*>(0xDEADBEEF);
static const char kReason[] = "reason";
} // namespace
TEST(OptionalVotingChannelTest, UpstreamingWorks) {
DummyVoteObserver observer;
TestOptionalVotingChannel voting_channel(observer.BuildVotingChannel());
voting::VoterId<TestVote> voter_id = voting_channel.voter_id();
EXPECT_FALSE(observer.HasVote(voter_id, kDummyContext1));
voting_channel.SubmitVote(kDummyContext1, TestVote(0, kReason));
EXPECT_TRUE(observer.HasVote(voter_id, kDummyContext1));
voting_channel.ChangeVote(kDummyContext1, TestVote(1, kReason));
EXPECT_TRUE(observer.HasVote(voter_id, kDummyContext1, 1, kReason));
voting_channel.ChangeVote(kDummyContext1, TestVote(0, kReason));
EXPECT_TRUE(observer.HasVote(voter_id, kDummyContext1));
voting_channel.InvalidateVote(kDummyContext1);
EXPECT_FALSE(observer.HasVote(voter_id, kDummyContext1));
}
TEST(OptionalVotingChannelTest, OptionalVoteNotUpstreamed) {
DummyVoteObserver observer;
TestOptionalVotingChannel voting_channel(observer.BuildVotingChannel());
voting::VoterId<TestVote> voter_id = voting_channel.voter_id();
EXPECT_FALSE(observer.HasVote(voter_id, kDummyContext1));
voting_channel.SubmitVote(kDummyContext1, std::nullopt);
EXPECT_FALSE(observer.HasVote(voter_id, kDummyContext1));
voting_channel.ChangeVote(kDummyContext1, TestVote(1, kReason));
EXPECT_TRUE(observer.HasVote(voter_id, kDummyContext1, 1, kReason));
voting_channel.ChangeVote(kDummyContext1, std::nullopt);
EXPECT_FALSE(observer.HasVote(voter_id, kDummyContext1));
voting_channel.InvalidateVote(kDummyContext1);
EXPECT_FALSE(observer.HasVote(voter_id, kDummyContext1));
}
} // namespace performance_manager