| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <tuple> |
| #include <vector> |
| |
| #include "base/run_loop.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "components/spellcheck/common/spellcheck_result.h" |
| #include "components/spellcheck/renderer/spellcheck_provider_test.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace { |
| |
| class SpellCheckProviderMacTest : public SpellCheckProviderTest {}; |
| |
| TEST_F(SpellCheckProviderMacTest, SingleRoundtripSuccess) { |
| FakeTextCheckingResult completion; |
| |
| provider_.RequestTextChecking( |
| u"hello ", std::make_unique<FakeTextCheckingCompletion>(&completion)); |
| EXPECT_EQ(completion.completion_count_, 0U); |
| EXPECT_EQ(provider_.text_check_requests_.size(), 1U); |
| EXPECT_EQ(provider_.pending_text_request_size(), 1U); |
| |
| const auto& text = provider_.text_check_requests_.back().first; |
| auto& callback = provider_.text_check_requests_.back().second; |
| EXPECT_EQ(text, u"hello "); |
| EXPECT_TRUE(callback); |
| |
| std::vector<SpellCheckResult> fake_results; |
| std::move(callback).Run(fake_results); |
| base::RunLoop().RunUntilIdle(); |
| |
| EXPECT_EQ(completion.completion_count_, 1U); |
| EXPECT_EQ(provider_.pending_text_request_size(), 0U); |
| |
| provider_.text_check_requests_.clear(); |
| } |
| |
| TEST_F(SpellCheckProviderMacTest, TwoRoundtripSuccess) { |
| FakeTextCheckingResult completion1; |
| provider_.RequestTextChecking( |
| u"hello ", std::make_unique<FakeTextCheckingCompletion>(&completion1)); |
| FakeTextCheckingResult completion2; |
| provider_.RequestTextChecking( |
| u"bye ", std::make_unique<FakeTextCheckingCompletion>(&completion2)); |
| |
| EXPECT_EQ(completion1.completion_count_, 0U); |
| EXPECT_EQ(completion2.completion_count_, 0U); |
| EXPECT_EQ(provider_.text_check_requests_.size(), 2U); |
| EXPECT_EQ(provider_.pending_text_request_size(), 2U); |
| |
| const auto& text1 = provider_.text_check_requests_[0].first; |
| auto& callback1 = provider_.text_check_requests_[0].second; |
| EXPECT_EQ(text1, u"hello "); |
| EXPECT_TRUE(callback1); |
| |
| const auto& text2 = provider_.text_check_requests_[1].first; |
| auto& callback2 = provider_.text_check_requests_[1].second; |
| EXPECT_EQ(text2, u"bye "); |
| EXPECT_TRUE(callback2); |
| |
| std::vector<SpellCheckResult> fake_results; |
| |
| std::move(callback1).Run(fake_results); |
| base::RunLoop().RunUntilIdle(); |
| EXPECT_EQ(completion1.completion_count_, 1U); |
| EXPECT_EQ(completion2.completion_count_, 0U); |
| EXPECT_EQ(provider_.pending_text_request_size(), 1U); |
| |
| std::move(callback2).Run(fake_results); |
| base::RunLoop().RunUntilIdle(); |
| EXPECT_EQ(completion1.completion_count_, 1U); |
| EXPECT_EQ(completion2.completion_count_, 1U); |
| EXPECT_EQ(provider_.pending_text_request_size(), 0U); |
| |
| provider_.text_check_requests_.clear(); |
| } |
| |
| } // namespace |