Index: chrome/renderer/translate_helper_unittest.cc |
=================================================================== |
--- chrome/renderer/translate_helper_unittest.cc (revision 57231) |
+++ chrome/renderer/translate_helper_unittest.cc (working copy) |
@@ -1,287 +0,0 @@ |
-// Copyright (c) 2010 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 "chrome/common/chrome_constants.h" |
-#include "chrome/renderer/translate_helper.h" |
-#include "chrome/test/render_view_test.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-using testing::AtLeast; |
-using testing::Return; |
- |
-class TestTranslateHelper : public TranslateHelper { |
- public: |
- explicit TestTranslateHelper(RenderView* render_view) |
- : TranslateHelper(render_view) { |
- } |
- |
- virtual bool DontDelayTasks() { return true; } |
- |
- MOCK_METHOD0(IsTranslateLibAvailable, bool()); |
- MOCK_METHOD0(IsTranslateLibReady, bool()); |
- MOCK_METHOD0(HasTranslationFinished, bool()); |
- MOCK_METHOD0(HasTranslationFailed, bool()); |
- MOCK_METHOD0(GetOriginalPageLanguage, std::string()); |
- MOCK_METHOD0(StartTranslation, bool()); |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(TestTranslateHelper); |
-}; |
- |
-class TranslateHelperTest : public RenderViewTest { |
- public: |
- TranslateHelperTest() {} |
- |
- protected: |
- virtual void SetUp() { |
- RenderViewTest::SetUp(); |
- translate_helper_.reset(new TestTranslateHelper(view_)); |
- } |
- |
- bool GetPageTranslatedMessage(int* page_id, |
- std::string* original_lang, |
- std::string* target_lang, |
- TranslateErrors::Type* error) { |
- const IPC::Message* message = render_thread_.sink(). |
- GetUniqueMessageMatching(ViewHostMsg_PageTranslated::ID); |
- if (!message) |
- return false; |
- Tuple4<int, std::string, std::string, TranslateErrors::Type> |
- translate_param; |
- ViewHostMsg_PageTranslated::Read(message, &translate_param); |
- if (page_id) |
- *page_id = translate_param.a; |
- if (original_lang) |
- *original_lang = translate_param.b; |
- if (target_lang) |
- *target_lang = translate_param.c; |
- if (error) |
- *error = translate_param.d; |
- return true; |
- } |
- |
- scoped_ptr<TestTranslateHelper> translate_helper_; |
-}; |
- |
-// Tests that the browser gets notified of the translation failure if the |
-// translate library fails/times-out during initialization. |
-TEST_F(TranslateHelperTest, TranslateLibNeverReady) { |
- // We make IsTranslateLibAvailable true so we don't attempt to inject the |
- // library. |
- EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) |
- .Times(AtLeast(1)) |
- .WillRepeatedly(Return(true)); |
- |
- EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) |
- .Times(AtLeast(5)) // See kMaxTranslateInitCheckAttempts in |
- // translate_helper.cc |
- .WillRepeatedly(Return(false)); |
- |
- translate_helper_->TranslatePage(view_->page_id(), "en", "fr", std::string()); |
- MessageLoop::current()->RunAllPending(); |
- |
- int page_id; |
- TranslateErrors::Type error; |
- ASSERT_TRUE(GetPageTranslatedMessage(&page_id, NULL, NULL, &error)); |
- EXPECT_EQ(view_->page_id(), page_id); |
- EXPECT_EQ(TranslateErrors::INITIALIZATION_ERROR, error); |
-} |
- |
-// Tests that the browser gets notified of the translation success when the |
-// translation succeeds. |
-TEST_F(TranslateHelperTest, TranslateSuccess) { |
- // We make IsTranslateLibAvailable true so we don't attempt to inject the |
- // library. |
- EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) |
- .Times(AtLeast(1)) |
- .WillRepeatedly(Return(true)); |
- |
- EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) |
- .WillOnce(Return(false)) |
- .WillOnce(Return(true)); |
- |
- EXPECT_CALL(*translate_helper_, StartTranslation()).WillOnce(Return(true)); |
- |
- // Succeed after few checks. |
- EXPECT_CALL(*translate_helper_, HasTranslationFailed()) |
- .WillRepeatedly(Return(false)); |
- EXPECT_CALL(*translate_helper_, HasTranslationFinished()) |
- .WillOnce(Return(false)) |
- .WillOnce(Return(false)) |
- .WillOnce(Return(true)); |
- |
- std::string original_lang("en"); |
- std::string target_lang("fr"); |
- translate_helper_->TranslatePage(view_->page_id(), original_lang, target_lang, |
- std::string()); |
- MessageLoop::current()->RunAllPending(); |
- |
- int page_id; |
- std::string received_original_lang; |
- std::string received_target_lang; |
- TranslateErrors::Type error; |
- ASSERT_TRUE(GetPageTranslatedMessage(&page_id, |
- &received_original_lang, |
- &received_target_lang, |
- &error)); |
- EXPECT_EQ(view_->page_id(), page_id); |
- EXPECT_EQ(original_lang, received_original_lang); |
- EXPECT_EQ(target_lang, received_target_lang); |
- EXPECT_EQ(TranslateErrors::NONE, error); |
-} |
- |
-// Tests that the browser gets notified of the translation failure when the |
-// translation fails. |
-TEST_F(TranslateHelperTest, TranslateFailure) { |
- // We make IsTranslateLibAvailable true so we don't attempt to inject the |
- // library. |
- EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) |
- .Times(AtLeast(1)) |
- .WillRepeatedly(Return(true)); |
- |
- EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) |
- .WillOnce(Return(true)); |
- |
- EXPECT_CALL(*translate_helper_, StartTranslation()).WillOnce(Return(true)); |
- |
- // Fail after few checks. |
- EXPECT_CALL(*translate_helper_, HasTranslationFailed()) |
- .WillOnce(Return(false)) |
- .WillOnce(Return(false)) |
- .WillOnce(Return(false)) |
- .WillOnce(Return(true)); |
- |
- EXPECT_CALL(*translate_helper_, HasTranslationFinished()) |
- .Times(AtLeast(1)) |
- .WillRepeatedly(Return(false)); |
- |
- translate_helper_->TranslatePage(view_->page_id(), "en", "fr", std::string()); |
- MessageLoop::current()->RunAllPending(); |
- |
- int page_id; |
- TranslateErrors::Type error; |
- ASSERT_TRUE(GetPageTranslatedMessage(&page_id, NULL, NULL, &error)); |
- EXPECT_EQ(view_->page_id(), page_id); |
- EXPECT_EQ(TranslateErrors::TRANSLATION_ERROR, error); |
-} |
- |
-// Tests that when the browser translate a page for which the language is |
-// undefined we query the translate element to get the language. |
-TEST_F(TranslateHelperTest, UndefinedSourceLang) { |
- // We make IsTranslateLibAvailable true so we don't attempt to inject the |
- // library. |
- EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) |
- .Times(AtLeast(1)) |
- .WillRepeatedly(Return(true)); |
- |
- EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) |
- .WillOnce(Return(true)); |
- |
- EXPECT_CALL(*translate_helper_, GetOriginalPageLanguage()) |
- .WillOnce(Return("de")); |
- |
- EXPECT_CALL(*translate_helper_, StartTranslation()).WillOnce(Return(true)); |
- EXPECT_CALL(*translate_helper_, HasTranslationFailed()) |
- .WillOnce(Return(false)); |
- EXPECT_CALL(*translate_helper_, HasTranslationFinished()) |
- .Times(AtLeast(1)) |
- .WillRepeatedly(Return(true)); |
- |
- translate_helper_->TranslatePage(view_->page_id(), |
- chrome::kUnknownLanguageCode, "fr", |
- std::string()); |
- MessageLoop::current()->RunAllPending(); |
- |
- int page_id; |
- TranslateErrors::Type error; |
- std::string original_lang; |
- std::string target_lang; |
- ASSERT_TRUE(GetPageTranslatedMessage(&page_id, &original_lang, &target_lang, |
- &error)); |
- EXPECT_EQ(view_->page_id(), page_id); |
- EXPECT_EQ("de", original_lang); |
- EXPECT_EQ("fr", target_lang); |
- EXPECT_EQ(TranslateErrors::NONE, error); |
-} |
- |
-// Tests that starting a translation while a similar one is pending does not |
-// break anything. |
-TEST_F(TranslateHelperTest, MultipleSimilarTranslations) { |
- // We make IsTranslateLibAvailable true so we don't attempt to inject the |
- // library. |
- EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) |
- .Times(AtLeast(1)) |
- .WillRepeatedly(Return(true)); |
- |
- EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) |
- .WillRepeatedly(Return(true)); |
- EXPECT_CALL(*translate_helper_, StartTranslation()) |
- .WillRepeatedly(Return(true)); |
- EXPECT_CALL(*translate_helper_, HasTranslationFailed()) |
- .WillRepeatedly(Return(false)); |
- EXPECT_CALL(*translate_helper_, HasTranslationFinished()) |
- .WillOnce(Return(true)); |
- |
- std::string original_lang("en"); |
- std::string target_lang("fr"); |
- translate_helper_->TranslatePage(view_->page_id(), original_lang, target_lang, |
- std::string()); |
- // While this is running call again TranslatePage to make sure noting bad |
- // happens. |
- translate_helper_->TranslatePage(view_->page_id(), original_lang, target_lang, |
- std::string()); |
- MessageLoop::current()->RunAllPending(); |
- |
- int page_id; |
- std::string received_original_lang; |
- std::string received_target_lang; |
- TranslateErrors::Type error; |
- ASSERT_TRUE(GetPageTranslatedMessage(&page_id, |
- &received_original_lang, |
- &received_target_lang, |
- &error)); |
- EXPECT_EQ(view_->page_id(), page_id); |
- EXPECT_EQ(original_lang, received_original_lang); |
- EXPECT_EQ(target_lang, received_target_lang); |
- EXPECT_EQ(TranslateErrors::NONE, error); |
-} |
- |
-// Tests that starting a translation while a different one is pending works. |
-TEST_F(TranslateHelperTest, MultipleDifferentTranslations) { |
- EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) |
- .Times(AtLeast(1)) |
- .WillRepeatedly(Return(true)); |
- EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) |
- .WillRepeatedly(Return(true)); |
- EXPECT_CALL(*translate_helper_, StartTranslation()) |
- .WillRepeatedly(Return(true)); |
- EXPECT_CALL(*translate_helper_, HasTranslationFailed()) |
- .WillRepeatedly(Return(false)); |
- EXPECT_CALL(*translate_helper_, HasTranslationFinished()) |
- .WillOnce(Return(true)); |
- |
- std::string original_lang("en"); |
- std::string target_lang("fr"); |
- translate_helper_->TranslatePage(view_->page_id(), original_lang, target_lang, |
- std::string()); |
- // While this is running call again TranslatePage with a new target lang. |
- std::string new_target_lang("de"); |
- translate_helper_->TranslatePage(view_->page_id(), original_lang, |
- new_target_lang, std::string()); |
- MessageLoop::current()->RunAllPending(); |
- |
- int page_id; |
- std::string received_original_lang; |
- std::string received_target_lang; |
- TranslateErrors::Type error; |
- ASSERT_TRUE(GetPageTranslatedMessage(&page_id, |
- &received_original_lang, |
- &received_target_lang, |
- &error)); |
- EXPECT_EQ(view_->page_id(), page_id); |
- EXPECT_EQ(original_lang, received_original_lang); |
- EXPECT_EQ(new_target_lang, received_target_lang); |
- EXPECT_EQ(TranslateErrors::NONE, error); |
-} |