Index: chrome/browser/ui/views/translate/translate_bubble_view_interactive_uitest.cc |
diff --git a/chrome/browser/ui/views/translate/translate_bubble_view_interactive_uitest.cc b/chrome/browser/ui/views/translate/translate_bubble_view_interactive_uitest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..dd12eda7afee7a3a4558102b5323c754e51527b8 |
--- /dev/null |
+++ b/chrome/browser/ui/views/translate/translate_bubble_view_interactive_uitest.cc |
@@ -0,0 +1,188 @@ |
+// Copyright (c) 2017 The Chromium Authors. All rights reserved. |
groby-ooo-7-16
2017/05/31 19:51:44
Why did you name this interactive_uitest instead o
Gaja
2017/06/01 12:24:02
I noticed that few bubble_view/icon_view related t
|
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include <string> |
+ |
+#include "base/macros.h" |
+#include "chrome/app/chrome_command_ids.h" |
+#include "chrome/browser/chrome_notification_types.h" |
+#include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h" |
+#include "chrome/browser/translate/chrome_translate_client.h" |
+#include "chrome/browser/translate/translate_service.h" |
+#include "chrome/browser/ui/browser_command_controller.h" |
+#include "chrome/browser/ui/browser_window.h" |
+#include "chrome/browser/ui/tabs/tab_strip_model.h" |
+#include "chrome/browser/ui/translate/translate_bubble_test_utils.h" |
+#include "chrome/test/base/in_process_browser_test.h" |
+#include "chrome/test/base/interactive_test_utils.h" |
+#include "chrome/test/base/ui_test_utils.h" |
+#include "components/translate/core/browser/translate_manager.h" |
+#include "content/public/browser/notification_service.h" |
+#include "content/public/browser/web_contents.h" |
+#include "net/test/embedded_test_server/embedded_test_server.h" |
+#include "net/url_request/test_url_fetcher_factory.h" |
+#include "net/url_request/url_request_status.h" |
+ |
+namespace { |
+ |
+static const char kDataURIPrefix[] = "data:text/html;charset=utf-8,"; |
+static const char kTestLanguageString[] = |
+ "我々は重要な、興味深いものになるが、時折状況が発生するため苦労や痛みは" |
+ "彼にいくつかの素晴らしいを調達することができます。それから、いくつかの利"; |
+} |
+ |
+class TranslateBubbleViewInteractiveTest : public InProcessBrowserTest { |
+ public: |
+ TranslateBubbleViewInteractiveTest() {} |
+ ~TranslateBubbleViewInteractiveTest() override {} |
+ void SetUpOnMainThread() override { |
+ InProcessBrowserTest::SetUpOnMainThread(); |
+ } |
+ |
+ content::WebContents* GetWebContents() { |
+ return browser()->tab_strip_model()->GetActiveWebContents(); |
+ } |
+ |
+ void SimulateURLFetch(bool success) { |
groby-ooo-7-16
2017/05/31 19:51:44
It's probably worth collecting those test function
Gaja
2017/06/01 12:24:02
OK, I will try moving it to separate file.
Yes, mo
|
+ net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); |
+ ASSERT_TRUE(fetcher); |
+ net::Error error = success ? net::OK : net::ERR_FAILED; |
+ |
+ std::string script = |
+ " var google = {};" |
+ "google.translate = (function() {" |
+ " return {" |
+ " TranslateService: function() {" |
+ " return {" |
+ " isAvailable : function() {" |
+ " return true;" |
+ " }," |
+ " restore : function() {" |
+ " return;" |
+ " }," |
+ " getDetectedLanguage : function() {" |
+ " return \"ja\";" |
+ " }," |
+ " translatePage : function(originalLang, targetLang," |
+ " onTranslateProgress) {" |
+ " document.getElementsByTagName(\"body\")[0].innerHTML = '" + |
+ std::string(kTestLanguageString) + |
+ " ';" |
+ " onTranslateProgress(100, true, false);" |
+ " }" |
+ " };" |
+ " }" |
+ " };" |
+ "})();" |
+ "cr.googleTranslate.onTranslateElementLoad();"; |
+ |
+ fetcher->set_url(fetcher->GetOriginalURL()); |
+ fetcher->set_status(net::URLRequestStatus::FromError(error)); |
+ fetcher->set_response_code(success ? 200 : 500); |
+ fetcher->SetResponseString(script); |
+ fetcher->delegate()->OnURLFetchComplete(fetcher); |
+ } |
+ |
+ private: |
+ net::TestURLFetcherFactory url_fetcher_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TranslateBubbleViewInteractiveTest); |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(TranslateBubbleViewInteractiveTest, TranslateSuccess) { |
+ ASSERT_TRUE(embedded_test_server()->Start()); |
+ ASSERT_TRUE(TranslateService::IsTranslateBubbleEnabled()); |
+ |
+ translate::TranslateManager::SetIgnoreMissingKeyForTesting(true); |
groby-ooo-7-16
2017/05/31 19:51:44
You probably want to do that in the SetUp code - i
Gaja
2017/06/01 12:24:02
Acknowledged.
|
+ |
+ GURL url( |
+ std::string(kDataURIPrefix) + |
+ // Add Japanese characters to ensure the translate bar |
+ // will appear. |
+ "我々は重要な、興味深いものになるが、時折状況が発生するため苦労や痛みは" |
+ "彼にいくつかの素晴らしいを調達することができます。それから、いくつかの" |
+ "利"); |
+ |
+ // Set up an observer to be able to wait for the bubble to be shown. |
groby-ooo-7-16
2017/05/31 19:51:44
Since this is shared across tests, might belong on
Gaja
2017/06/01 12:24:02
Acknowledged.
|
+ content::Source<content::WebContents> source(GetWebContents()); |
+ content::WindowedNotificationObserver language_detected_signal( |
+ chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, source); |
+ |
+ ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), url)); |
+ |
+ // Wait for the translate bubble to appear. |
+ language_detected_signal.Wait(); |
+ |
+ // Verify current translate step. |
+ const TranslateBubbleModel* model = |
+ translate::test_utils::GetCurrentModel(browser()); |
+ ASSERT_NE(nullptr, model); |
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE, |
+ model->GetViewState()); |
+ |
+ translate::test_utils::PressTranslate(browser()); |
+ |
+ // Verify current translate step after pressing translate button. |
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_TRANSLATING, |
+ model->GetViewState()); |
+ |
+ // Wait for translation. |
+ content::WindowedNotificationObserver translation_observer( |
groby-ooo-7-16
2017/05/31 19:51:44
This is probably sharable too
Gaja
2017/06/01 12:24:02
Acknowledged.
|
+ chrome::NOTIFICATION_PAGE_TRANSLATED, |
+ content::NotificationService::AllSources()); |
+ |
+ // Simulate the translate script being retrieved. |
+ // Pass fake google.translate lib as the translate script. |
+ SimulateURLFetch(true); |
+ |
+ // Simulate the render notifying the translation has been done. |
+ translation_observer.Wait(); |
+ |
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE, |
+ model->GetViewState()); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(TranslateBubbleViewInteractiveTest, TranslateError) { |
+ ASSERT_TRUE(embedded_test_server()->Start()); |
+ ASSERT_TRUE(TranslateService::IsTranslateBubbleEnabled()); |
+ |
+ translate::TranslateManager::SetIgnoreMissingKeyForTesting(true); |
+ |
+ // Set up an observer to be able to wait for the bubble to be shown. |
+ content::Source<content::WebContents> source(GetWebContents()); |
+ content::WindowedNotificationObserver language_detected_signal( |
+ chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, source); |
+ |
+ ASSERT_NO_FATAL_FAILURE( |
+ ui_test_utils::NavigateToURL(browser(), GURL("about:blank"))); |
+ |
+ // Wait for the language detection. |
+ language_detected_signal.Wait(); |
+ |
+ content::ContextMenuParams params; |
groby-ooo-7-16
2017/05/31 19:51:44
You might want to use translate::test_utils::Press
Gaja
2017/06/01 12:24:02
As I observed, for about:blank case, the translate
|
+ TestRenderViewContextMenu menu(GetWebContents()->GetMainFrame(), params); |
+ menu.Init(); |
+ menu.ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
+ |
+ // Verify current translate step. |
+ const TranslateBubbleModel* model = |
+ translate::test_utils::GetCurrentModel(browser()); |
+ ASSERT_NE(nullptr, model); |
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_TRANSLATING, |
+ model->GetViewState()); |
+ |
+ // Wait for translation. |
+ content::WindowedNotificationObserver translation_observer( |
+ chrome::NOTIFICATION_PAGE_TRANSLATED, |
+ content::NotificationService::AllSources()); |
+ |
+ // Simulate the translate script being retrieved. |
+ // Pass fake google.translate lib as the translate script. |
+ SimulateURLFetch(true); |
+ |
+ // Simulate the render notifying the translation has been done. |
+ translation_observer.Wait(); |
+ |
+ EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ERROR, model->GetViewState()); |
+} |