| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/common/chrome_constants.h" | 5 #include "chrome/common/chrome_constants.h" |
| 6 #include "chrome/common/render_messages.h" | 6 #include "chrome/common/render_messages.h" |
| 7 #include "chrome/renderer/translate_helper.h" | 7 #include "chrome/renderer/translate_helper.h" |
| 8 #include "chrome/test/base/chrome_render_view_test.h" | 8 #include "chrome/test/base/chrome_render_view_test.h" |
| 9 #include "content/public/renderer/render_view.h" | 9 #include "content/public/renderer/render_view.h" |
| 10 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 | 22 |
| 23 virtual bool DontDelayTasks() { return true; } | 23 virtual bool DontDelayTasks() { return true; } |
| 24 | 24 |
| 25 void TranslatePage(int page_id, | 25 void TranslatePage(int page_id, |
| 26 const std::string& source_lang, | 26 const std::string& source_lang, |
| 27 const std::string& target_lang, | 27 const std::string& target_lang, |
| 28 const std::string& translate_script) { | 28 const std::string& translate_script) { |
| 29 OnTranslatePage(page_id, translate_script, source_lang, target_lang); | 29 OnTranslatePage(page_id, translate_script, source_lang, target_lang); |
| 30 } | 30 } |
| 31 | 31 |
| 32 void ConvertLanguageCodeSynonym(std::string* code) { | |
| 33 TranslateHelper::ConvertLanguageCodeSynonym(code); | |
| 34 } | |
| 35 | |
| 36 MOCK_METHOD0(IsTranslateLibAvailable, bool()); | 32 MOCK_METHOD0(IsTranslateLibAvailable, bool()); |
| 37 MOCK_METHOD0(IsTranslateLibReady, bool()); | 33 MOCK_METHOD0(IsTranslateLibReady, bool()); |
| 38 MOCK_METHOD0(HasTranslationFinished, bool()); | 34 MOCK_METHOD0(HasTranslationFinished, bool()); |
| 39 MOCK_METHOD0(HasTranslationFailed, bool()); | 35 MOCK_METHOD0(HasTranslationFailed, bool()); |
| 40 MOCK_METHOD0(GetOriginalPageLanguage, std::string()); | 36 MOCK_METHOD0(GetOriginalPageLanguage, std::string()); |
| 41 MOCK_METHOD0(StartTranslation, bool()); | 37 MOCK_METHOD0(StartTranslation, bool()); |
| 42 | 38 |
| 43 private: | 39 private: |
| 44 DISALLOW_COPY_AND_ASSIGN(TestTranslateHelper); | 40 DISALLOW_COPY_AND_ASSIGN(TestTranslateHelper); |
| 45 }; | 41 }; |
| 46 | 42 |
| 47 class TranslateHelperTest : public ChromeRenderViewTest { | 43 class TranslateHelperBrowserTest : public ChromeRenderViewTest { |
| 48 public: | 44 public: |
| 49 TranslateHelperTest() : translate_helper_(NULL) {} | 45 TranslateHelperBrowserTest() : translate_helper_(NULL) {} |
| 50 | 46 |
| 51 protected: | 47 protected: |
| 52 virtual void SetUp() { | 48 virtual void SetUp() { |
| 53 ChromeRenderViewTest::SetUp(); | 49 ChromeRenderViewTest::SetUp(); |
| 54 translate_helper_ = new TestTranslateHelper(view_); | 50 translate_helper_ = new TestTranslateHelper(view_); |
| 55 } | 51 } |
| 56 | 52 |
| 57 virtual void TearDown() { | 53 virtual void TearDown() { |
| 58 delete translate_helper_; | 54 delete translate_helper_; |
| 59 ChromeRenderViewTest::TearDown(); | 55 ChromeRenderViewTest::TearDown(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 79 if (error) | 75 if (error) |
| 80 *error = translate_param.d; | 76 *error = translate_param.d; |
| 81 return true; | 77 return true; |
| 82 } | 78 } |
| 83 | 79 |
| 84 TestTranslateHelper* translate_helper_; | 80 TestTranslateHelper* translate_helper_; |
| 85 }; | 81 }; |
| 86 | 82 |
| 87 // Tests that the browser gets notified of the translation failure if the | 83 // Tests that the browser gets notified of the translation failure if the |
| 88 // translate library fails/times-out during initialization. | 84 // translate library fails/times-out during initialization. |
| 89 TEST_F(TranslateHelperTest, TranslateLibNeverReady) { | 85 TEST_F(TranslateHelperBrowserTest, TranslateLibNeverReady) { |
| 90 // We make IsTranslateLibAvailable true so we don't attempt to inject the | 86 // We make IsTranslateLibAvailable true so we don't attempt to inject the |
| 91 // library. | 87 // library. |
| 92 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) | 88 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) |
| 93 .Times(AtLeast(1)) | 89 .Times(AtLeast(1)) |
| 94 .WillRepeatedly(Return(true)); | 90 .WillRepeatedly(Return(true)); |
| 95 | 91 |
| 96 EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) | 92 EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) |
| 97 .Times(AtLeast(5)) // See kMaxTranslateInitCheckAttempts in | 93 .Times(AtLeast(5)) // See kMaxTranslateInitCheckAttempts in |
| 98 // translate_helper.cc | 94 // translate_helper.cc |
| 99 .WillRepeatedly(Return(false)); | 95 .WillRepeatedly(Return(false)); |
| 100 | 96 |
| 101 translate_helper_->TranslatePage( | 97 translate_helper_->TranslatePage( |
| 102 view_->GetPageId(), "en", "fr", std::string()); | 98 view_->GetPageId(), "en", "fr", std::string()); |
| 103 MessageLoop::current()->RunUntilIdle(); | 99 MessageLoop::current()->RunUntilIdle(); |
| 104 | 100 |
| 105 int page_id; | 101 int page_id; |
| 106 TranslateErrors::Type error; | 102 TranslateErrors::Type error; |
| 107 ASSERT_TRUE(GetPageTranslatedMessage(&page_id, NULL, NULL, &error)); | 103 ASSERT_TRUE(GetPageTranslatedMessage(&page_id, NULL, NULL, &error)); |
| 108 EXPECT_EQ(view_->GetPageId(), page_id); | 104 EXPECT_EQ(view_->GetPageId(), page_id); |
| 109 EXPECT_EQ(TranslateErrors::INITIALIZATION_ERROR, error); | 105 EXPECT_EQ(TranslateErrors::INITIALIZATION_ERROR, error); |
| 110 } | 106 } |
| 111 | 107 |
| 112 // Tests that the browser gets notified of the translation success when the | 108 // Tests that the browser gets notified of the translation success when the |
| 113 // translation succeeds. | 109 // translation succeeds. |
| 114 TEST_F(TranslateHelperTest, TranslateSuccess) { | 110 TEST_F(TranslateHelperBrowserTest, TranslateSuccess) { |
| 115 // We make IsTranslateLibAvailable true so we don't attempt to inject the | 111 // We make IsTranslateLibAvailable true so we don't attempt to inject the |
| 116 // library. | 112 // library. |
| 117 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) | 113 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) |
| 118 .Times(AtLeast(1)) | 114 .Times(AtLeast(1)) |
| 119 .WillRepeatedly(Return(true)); | 115 .WillRepeatedly(Return(true)); |
| 120 | 116 |
| 121 EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) | 117 EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) |
| 122 .WillOnce(Return(false)) | 118 .WillOnce(Return(false)) |
| 123 .WillOnce(Return(true)); | 119 .WillOnce(Return(true)); |
| 124 | 120 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 147 &received_target_lang, | 143 &received_target_lang, |
| 148 &error)); | 144 &error)); |
| 149 EXPECT_EQ(view_->GetPageId(), page_id); | 145 EXPECT_EQ(view_->GetPageId(), page_id); |
| 150 EXPECT_EQ(original_lang, received_original_lang); | 146 EXPECT_EQ(original_lang, received_original_lang); |
| 151 EXPECT_EQ(target_lang, received_target_lang); | 147 EXPECT_EQ(target_lang, received_target_lang); |
| 152 EXPECT_EQ(TranslateErrors::NONE, error); | 148 EXPECT_EQ(TranslateErrors::NONE, error); |
| 153 } | 149 } |
| 154 | 150 |
| 155 // Tests that the browser gets notified of the translation failure when the | 151 // Tests that the browser gets notified of the translation failure when the |
| 156 // translation fails. | 152 // translation fails. |
| 157 TEST_F(TranslateHelperTest, TranslateFailure) { | 153 TEST_F(TranslateHelperBrowserTest, TranslateFailure) { |
| 158 // We make IsTranslateLibAvailable true so we don't attempt to inject the | 154 // We make IsTranslateLibAvailable true so we don't attempt to inject the |
| 159 // library. | 155 // library. |
| 160 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) | 156 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) |
| 161 .Times(AtLeast(1)) | 157 .Times(AtLeast(1)) |
| 162 .WillRepeatedly(Return(true)); | 158 .WillRepeatedly(Return(true)); |
| 163 | 159 |
| 164 EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) | 160 EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) |
| 165 .WillOnce(Return(true)); | 161 .WillOnce(Return(true)); |
| 166 | 162 |
| 167 EXPECT_CALL(*translate_helper_, StartTranslation()).WillOnce(Return(true)); | 163 EXPECT_CALL(*translate_helper_, StartTranslation()).WillOnce(Return(true)); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 183 | 179 |
| 184 int page_id; | 180 int page_id; |
| 185 TranslateErrors::Type error; | 181 TranslateErrors::Type error; |
| 186 ASSERT_TRUE(GetPageTranslatedMessage(&page_id, NULL, NULL, &error)); | 182 ASSERT_TRUE(GetPageTranslatedMessage(&page_id, NULL, NULL, &error)); |
| 187 EXPECT_EQ(view_->GetPageId(), page_id); | 183 EXPECT_EQ(view_->GetPageId(), page_id); |
| 188 EXPECT_EQ(TranslateErrors::TRANSLATION_ERROR, error); | 184 EXPECT_EQ(TranslateErrors::TRANSLATION_ERROR, error); |
| 189 } | 185 } |
| 190 | 186 |
| 191 // Tests that when the browser translate a page for which the language is | 187 // Tests that when the browser translate a page for which the language is |
| 192 // undefined we query the translate element to get the language. | 188 // undefined we query the translate element to get the language. |
| 193 TEST_F(TranslateHelperTest, UndefinedSourceLang) { | 189 TEST_F(TranslateHelperBrowserTest, UndefinedSourceLang) { |
| 194 // We make IsTranslateLibAvailable true so we don't attempt to inject the | 190 // We make IsTranslateLibAvailable true so we don't attempt to inject the |
| 195 // library. | 191 // library. |
| 196 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) | 192 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) |
| 197 .Times(AtLeast(1)) | 193 .Times(AtLeast(1)) |
| 198 .WillRepeatedly(Return(true)); | 194 .WillRepeatedly(Return(true)); |
| 199 | 195 |
| 200 EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) | 196 EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) |
| 201 .WillOnce(Return(true)); | 197 .WillOnce(Return(true)); |
| 202 | 198 |
| 203 EXPECT_CALL(*translate_helper_, GetOriginalPageLanguage()) | 199 EXPECT_CALL(*translate_helper_, GetOriginalPageLanguage()) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 222 ASSERT_TRUE(GetPageTranslatedMessage(&page_id, &original_lang, &target_lang, | 218 ASSERT_TRUE(GetPageTranslatedMessage(&page_id, &original_lang, &target_lang, |
| 223 &error)); | 219 &error)); |
| 224 EXPECT_EQ(view_->GetPageId(), page_id); | 220 EXPECT_EQ(view_->GetPageId(), page_id); |
| 225 EXPECT_EQ("de", original_lang); | 221 EXPECT_EQ("de", original_lang); |
| 226 EXPECT_EQ("fr", target_lang); | 222 EXPECT_EQ("fr", target_lang); |
| 227 EXPECT_EQ(TranslateErrors::NONE, error); | 223 EXPECT_EQ(TranslateErrors::NONE, error); |
| 228 } | 224 } |
| 229 | 225 |
| 230 // Tests that starting a translation while a similar one is pending does not | 226 // Tests that starting a translation while a similar one is pending does not |
| 231 // break anything. | 227 // break anything. |
| 232 TEST_F(TranslateHelperTest, MultipleSimilarTranslations) { | 228 TEST_F(TranslateHelperBrowserTest, MultipleSimilarTranslations) { |
| 233 // We make IsTranslateLibAvailable true so we don't attempt to inject the | 229 // We make IsTranslateLibAvailable true so we don't attempt to inject the |
| 234 // library. | 230 // library. |
| 235 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) | 231 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) |
| 236 .Times(AtLeast(1)) | 232 .Times(AtLeast(1)) |
| 237 .WillRepeatedly(Return(true)); | 233 .WillRepeatedly(Return(true)); |
| 238 | 234 |
| 239 EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) | 235 EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) |
| 240 .WillRepeatedly(Return(true)); | 236 .WillRepeatedly(Return(true)); |
| 241 EXPECT_CALL(*translate_helper_, StartTranslation()) | 237 EXPECT_CALL(*translate_helper_, StartTranslation()) |
| 242 .WillRepeatedly(Return(true)); | 238 .WillRepeatedly(Return(true)); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 263 &received_original_lang, | 259 &received_original_lang, |
| 264 &received_target_lang, | 260 &received_target_lang, |
| 265 &error)); | 261 &error)); |
| 266 EXPECT_EQ(view_->GetPageId(), page_id); | 262 EXPECT_EQ(view_->GetPageId(), page_id); |
| 267 EXPECT_EQ(original_lang, received_original_lang); | 263 EXPECT_EQ(original_lang, received_original_lang); |
| 268 EXPECT_EQ(target_lang, received_target_lang); | 264 EXPECT_EQ(target_lang, received_target_lang); |
| 269 EXPECT_EQ(TranslateErrors::NONE, error); | 265 EXPECT_EQ(TranslateErrors::NONE, error); |
| 270 } | 266 } |
| 271 | 267 |
| 272 // Tests that starting a translation while a different one is pending works. | 268 // Tests that starting a translation while a different one is pending works. |
| 273 TEST_F(TranslateHelperTest, MultipleDifferentTranslations) { | 269 TEST_F(TranslateHelperBrowserTest, MultipleDifferentTranslations) { |
| 274 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) | 270 EXPECT_CALL(*translate_helper_, IsTranslateLibAvailable()) |
| 275 .Times(AtLeast(1)) | 271 .Times(AtLeast(1)) |
| 276 .WillRepeatedly(Return(true)); | 272 .WillRepeatedly(Return(true)); |
| 277 EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) | 273 EXPECT_CALL(*translate_helper_, IsTranslateLibReady()) |
| 278 .WillRepeatedly(Return(true)); | 274 .WillRepeatedly(Return(true)); |
| 279 EXPECT_CALL(*translate_helper_, StartTranslation()) | 275 EXPECT_CALL(*translate_helper_, StartTranslation()) |
| 280 .WillRepeatedly(Return(true)); | 276 .WillRepeatedly(Return(true)); |
| 281 EXPECT_CALL(*translate_helper_, HasTranslationFailed()) | 277 EXPECT_CALL(*translate_helper_, HasTranslationFailed()) |
| 282 .WillRepeatedly(Return(false)); | 278 .WillRepeatedly(Return(false)); |
| 283 EXPECT_CALL(*translate_helper_, HasTranslationFinished()) | 279 EXPECT_CALL(*translate_helper_, HasTranslationFinished()) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 300 ASSERT_TRUE(GetPageTranslatedMessage(&page_id, | 296 ASSERT_TRUE(GetPageTranslatedMessage(&page_id, |
| 301 &received_original_lang, | 297 &received_original_lang, |
| 302 &received_target_lang, | 298 &received_target_lang, |
| 303 &error)); | 299 &error)); |
| 304 EXPECT_EQ(view_->GetPageId(), page_id); | 300 EXPECT_EQ(view_->GetPageId(), page_id); |
| 305 EXPECT_EQ(original_lang, received_original_lang); | 301 EXPECT_EQ(original_lang, received_original_lang); |
| 306 EXPECT_EQ(new_target_lang, received_target_lang); | 302 EXPECT_EQ(new_target_lang, received_target_lang); |
| 307 EXPECT_EQ(TranslateErrors::NONE, error); | 303 EXPECT_EQ(TranslateErrors::NONE, error); |
| 308 } | 304 } |
| 309 | 305 |
| 310 // Tests that synonym language code is converted to one used in supporting list. | |
| 311 TEST_F(TranslateHelperTest, LanguageCodeSynonyms) { | |
| 312 std::string language; | |
| 313 | |
| 314 language = std::string("nb"); | |
| 315 translate_helper_->ConvertLanguageCodeSynonym(&language); | |
| 316 EXPECT_EQ(0, language.compare("no")); | |
| 317 | |
| 318 language = std::string("he"); | |
| 319 translate_helper_->ConvertLanguageCodeSynonym(&language); | |
| 320 EXPECT_EQ(0, language.compare("iw")); | |
| 321 | |
| 322 language = std::string("jv"); | |
| 323 translate_helper_->ConvertLanguageCodeSynonym(&language); | |
| 324 EXPECT_EQ(0, language.compare("jw")); | |
| 325 | |
| 326 language = std::string("fil"); | |
| 327 translate_helper_->ConvertLanguageCodeSynonym(&language); | |
| 328 EXPECT_EQ(0, language.compare("tl")); | |
| 329 } | |
| 330 | |
| 331 // Tests that we send the right translate language message for a page and that | 306 // Tests that we send the right translate language message for a page and that |
| 332 // we respect the "no translate" meta-tag. | 307 // we respect the "no translate" meta-tag. |
| 333 TEST_F(ChromeRenderViewTest, TranslatablePage) { | 308 TEST_F(ChromeRenderViewTest, TranslatablePage) { |
| 334 // Suppress the normal delay that occurs when the page is loaded before which | 309 // Suppress the normal delay that occurs when the page is loaded before which |
| 335 // the renderer sends the page contents to the browser. | 310 // the renderer sends the page contents to the browser. |
| 336 SendContentStateImmediately(); | 311 SendContentStateImmediately(); |
| 337 | 312 |
| 338 LoadHTML("<html><body>A random page with random content.</body></html>"); | 313 LoadHTML("<html><body>A random page with random content.</body></html>"); |
| 339 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( | 314 const IPC::Message* message = render_thread_->sink().GetUniqueMessageMatching( |
| 340 ChromeViewHostMsg_TranslateLanguageDetermined::ID); | 315 ChromeViewHostMsg_TranslateLanguageDetermined::ID); |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 464 | 439 |
| 465 GoBack(GetMainFrame()->previousHistoryItem()); | 440 GoBack(GetMainFrame()->previousHistoryItem()); |
| 466 | 441 |
| 467 message = render_thread_->sink().GetUniqueMessageMatching( | 442 message = render_thread_->sink().GetUniqueMessageMatching( |
| 468 ChromeViewHostMsg_TranslateLanguageDetermined::ID); | 443 ChromeViewHostMsg_TranslateLanguageDetermined::ID); |
| 469 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); | 444 ASSERT_NE(static_cast<IPC::Message*>(NULL), message); |
| 470 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); | 445 ChromeViewHostMsg_TranslateLanguageDetermined::Read(message, ¶ms); |
| 471 EXPECT_EQ("zh", params.a); | 446 EXPECT_EQ("zh", params.a); |
| 472 render_thread_->sink().ClearMessages(); | 447 render_thread_->sink().ClearMessages(); |
| 473 } | 448 } |
| OLD | NEW |