1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- // Copyright 2021 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "components/optimization_guide/core/batch_entity_metadata_task.h"
- #include "base/test/task_environment.h"
- #include "base/threading/thread_task_runner_handle.h"
- #include "components/optimization_guide/core/entity_metadata_provider.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace optimization_guide {
- namespace {
- class TestEntityMetadataProvider : public EntityMetadataProvider {
- public:
- explicit TestEntityMetadataProvider(
- scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner)
- : main_thread_task_runner_(main_thread_task_runner) {}
- ~TestEntityMetadataProvider() override = default;
- // EntityMetadataProvider:
- void GetMetadataForEntityId(
- const std::string& entity_id,
- EntityMetadataRetrievedCallback callback) override {
- main_thread_task_runner_->PostTask(
- FROM_HERE,
- base::BindOnce(
- [](const std::string& entity_id,
- EntityMetadataRetrievedCallback callback) {
- EntityMetadata metadata;
- metadata.human_readable_name = entity_id;
- std::move(callback).Run(entity_id == "nometadata"
- ? absl::nullopt
- : absl::make_optional(metadata));
- },
- entity_id, std::move(callback)));
- }
- private:
- scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
- };
- class BatchEntityMetadataTaskTest : public testing::Test {
- public:
- void SetUp() override {
- entity_metadata_provider_ = std::make_unique<TestEntityMetadataProvider>(
- task_environment_.GetMainThreadTaskRunner());
- }
- void TearDown() override { entity_metadata_provider_.reset(); }
- base::flat_map<std::string, EntityMetadata> ExecuteBatchEntityMetadataTask(
- const std::vector<std::string>& entity_ids) {
- auto task = std::make_unique<BatchEntityMetadataTask>(
- entity_metadata_provider_.get(), entity_ids);
- base::flat_map<std::string, EntityMetadata> entity_metadata_map;
- std::unique_ptr<base::RunLoop> run_loop = std::make_unique<base::RunLoop>();
- task->Execute(base::BindOnce(
- [](base::RunLoop* run_loop,
- base::flat_map<std::string, EntityMetadata>* out_entity_metadata_map,
- const base::flat_map<std::string, EntityMetadata>&
- entity_metadata_map) {
- *out_entity_metadata_map = entity_metadata_map;
- run_loop->Quit();
- },
- run_loop.get(), &entity_metadata_map));
- run_loop->Run();
- return entity_metadata_map;
- }
- private:
- base::test::TaskEnvironment task_environment_;
- std::unique_ptr<TestEntityMetadataProvider> entity_metadata_provider_;
- };
- TEST_F(BatchEntityMetadataTaskTest, Execute) {
- base::flat_map<std::string, EntityMetadata> entity_metadata_map =
- ExecuteBatchEntityMetadataTask({
- "nometadata",
- "someentity",
- });
- EXPECT_EQ(entity_metadata_map.size(), 1u);
- auto it = entity_metadata_map.find("someentity");
- ASSERT_NE(it, entity_metadata_map.end());
- EXPECT_EQ(it->second.human_readable_name, "someentity");
- }
- } // namespace
- } // namespace optimization_guide
|