| // 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 "chrome/services/pdf/pdf_progressive_searchifier.h" |
| |
| #include <stdint.h> |
| |
| #include <utility> |
| #include <vector> |
| |
| #include "base/run_loop.h" |
| #include "base/test/bind.h" |
| #include "base/test/task_environment.h" |
| #include "chrome/services/pdf/public/mojom/pdf_service.mojom.h" |
| #include "mojo/public/cpp/bindings/receiver.h" |
| #include "services/screen_ai/public/mojom/screen_ai_service.mojom.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "third_party/skia/include/core/SkBitmap.h" |
| |
| namespace pdf { |
| |
| namespace { |
| |
| class Ocr : public mojom::Ocr { |
| public: |
| mojo::PendingRemote<mojom::Ocr> CreateRemote() { |
| return receiver_.BindNewPipeAndPassRemote(); |
| } |
| |
| // mojom::Ocr |
| void PerformOcr( |
| const SkBitmap& image, |
| mojom::Ocr::PerformOcrCallback got_annotation_callback) override { |
| std::move(got_annotation_callback) |
| .Run(screen_ai::mojom::VisualAnnotation::New()); |
| } |
| |
| void Reset() { receiver_.reset(); } |
| |
| private: |
| mojo::Receiver<mojom::Ocr> receiver_{this}; |
| }; |
| |
| } // namespace |
| |
| class PdfProgressiveSearchifierTest : public testing::Test { |
| public: |
| base::test::SingleThreadTaskEnvironment task_environment_; |
| Ocr ocr_; |
| PdfProgressiveSearchifier searchifier_{ocr_.CreateRemote()}; |
| }; |
| |
| // All operations on PDF progressive searchifier should run successfully. |
| TEST_F(PdfProgressiveSearchifierTest, ProgressiveSearchifier) { |
| SkBitmap bitmap; |
| bitmap.allocN32Pixels(1, 1); |
| searchifier_.AddPage(bitmap, 0); |
| searchifier_.AddPage(bitmap, 1); |
| searchifier_.DeletePage(0); |
| searchifier_.AddPage(bitmap, 0); |
| base::RunLoop run_loop; |
| std::vector<uint8_t> result_pdf; |
| searchifier_.Save( |
| base::BindLambdaForTesting([&](const std::vector<uint8_t>& result) { |
| result_pdf = result; |
| run_loop.Quit(); |
| })); |
| run_loop.Run(); |
| EXPECT_FALSE(result_pdf.empty()); |
| } |
| |
| TEST_F(PdfProgressiveSearchifierTest, PerformOcrFailure) { |
| SkBitmap bitmap; |
| bitmap.allocN32Pixels(1, 1); |
| ocr_.Reset(); |
| searchifier_.AddPage(bitmap, 0); |
| } |
| |
| } // namespace pdf |