blob: 922214633cb4df716b3cb1e2d11c113fce642763 [file] [log] [blame]
// Copyright 2023 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/companion/text_finder/text_finder_manager.h"
#include "chrome/browser/companion/text_finder/text_finder.h"
#include "chrome/browser/companion/text_finder/text_finder_manager_base_test.h"
#include "content/public/browser/page.h"
#include "content/public/browser/page_user_data.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/mojom/annotation/annotation.mojom.h"
#include "ui/gfx/geometry/rect.h"
namespace companion {
using ::testing::_;
class TextFinderManagerTest : public TextFinderManagerBaseTest {
public:
TextFinderManagerTest() = default;
~TextFinderManagerTest() override = default;
void SetUp() override { TextFinderManagerBaseTest::SetUp(); }
};
TEST_F(TextFinderManagerTest, SingleTextFinderTest) {
// Set up a text finder manager bound to the mock agent container.
MockAnnotationAgentContainer mock_agent_container;
TextFinderManager* manager =
CreateTextFinderManagerForTest(&mock_agent_container);
// Create a new text finder.
const std::string text_directive = "ab,cd";
base::OnceCallback<void(std::pair<std::string, bool>)>
finished_finding_callback = base::BindOnce(
[](std::pair<std::string, bool> text_found) { return; });
const auto id = manager->CreateTextFinder(
text_directive, std::move(finished_finding_callback));
EXPECT_TRUE(id.has_value());
EXPECT_EQ(manager->Size(), 1u);
// Remove text finder.
manager->RemoveTextFinder(id.value());
EXPECT_EQ(manager->Size(), 0u);
}
TEST_F(TextFinderManagerTest, MultiTextFindersTest) {
// Set up a text finder manager bound to the mock agent container.
MockAnnotationAgentContainer mock_agent_container;
TextFinderManager* manager =
CreateTextFinderManagerForTest(&mock_agent_container);
// Create multiple text finders.
const std::vector<std::string> text_directives = {"ab,cd", "def"};
TextFinderManager::AllDoneCallback all_done_callback = base::BindOnce(
[](const std::vector<std::pair<std::string, bool>>& text_found) {
ASSERT_EQ(text_found.size(), 2u);
// One found, one not found.
EXPECT_TRUE(text_found[0].second || text_found[1].second);
EXPECT_FALSE(text_found[0].second && text_found[1].second);
});
manager->CreateTextFinders(text_directives, std::move(all_done_callback));
EXPECT_EQ(manager->Size(), 2u);
gfx::Rect rect_1(2, 4), rect_2;
for (const auto& id_and_text_finder : manager->finder_map_) {
EXPECT_TRUE(id_and_text_finder.second->GetTextDirective() == "ab,cd" ||
id_and_text_finder.second->GetTextDirective() == "def");
if (id_and_text_finder.second->GetTextDirective() == "ab,cd") {
// Found text
id_and_text_finder.second->DidFinishAttachment(
rect_1, blink::mojom::AttachmentResult::kSuccess);
} else {
// Not found.
id_and_text_finder.second->DidFinishAttachment(
rect_2, blink::mojom::AttachmentResult::kSelectorNotMatched);
}
}
}
} // namespace companion