Commit 1989dbe1 authored by John Z Wu's avatar John Z Wu Committed by Commit Bot

Unit tests for remaining CWVTranslationController methods.

Bug: 770983
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Change-Id: I237fe77422971a18476d85b60c1ad67d60aa39bd
Reviewed-on: https://chromium-review.googlesource.com/963643
Commit-Queue: John Wu <jzw@chromium.org>
Reviewed-by: default avatarEugene But <eugenebut@chromium.org>
Reviewed-by: default avatarHiroshi Ichikawa <ichikawa@chromium.org>
Cr-Commit-Position: refs/heads/master@{#543492}
parent f0902d4c
...@@ -255,6 +255,11 @@ ios_framework_bundle("web_view") { ...@@ -255,6 +255,11 @@ ios_framework_bundle("web_view") {
} }
} }
ios_web_view_test_sources = [
"internal/translate/fake_web_view_translate_client.h",
"internal/translate/fake_web_view_translate_client.mm",
]
test("ios_web_view_unittests") { test("ios_web_view_unittests") {
testonly = true testonly = true
sources = [ sources = [
...@@ -269,6 +274,7 @@ test("ios_web_view_unittests") { ...@@ -269,6 +274,7 @@ test("ios_web_view_unittests") {
"internal/web_view_web_client_unittest.mm", "internal/web_view_web_client_unittest.mm",
] ]
sources += ios_web_view_sources sources += ios_web_view_sources
sources += ios_web_view_test_sources
deps = [ deps = [
"test:test_support", "test:test_support",
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#import "ios/web/public/test/fakes/test_web_state.h" #import "ios/web/public/test/fakes/test_web_state.h"
#include "ios/web/public/test/test_web_thread_bundle.h" #include "ios/web/public/test/test_web_thread_bundle.h"
#import "ios/web_view/internal/translate/cwv_translation_language_internal.h" #import "ios/web_view/internal/translate/cwv_translation_language_internal.h"
#import "ios/web_view/internal/translate/web_view_translate_client.h" #import "ios/web_view/internal/translate/fake_web_view_translate_client.h"
#include "ios/web_view/internal/web_view_browser_state.h" #include "ios/web_view/internal/web_view_browser_state.h"
#import "ios/web_view/public/cwv_translation_controller_delegate.h" #import "ios/web_view/public/cwv_translation_controller_delegate.h"
#import "ios/web_view/public/cwv_translation_policy.h" #import "ios/web_view/public/cwv_translation_policy.h"
...@@ -46,10 +46,10 @@ class CWVTranslationControllerTest : public PlatformTest { ...@@ -46,10 +46,10 @@ class CWVTranslationControllerTest : public PlatformTest {
CRWTestJSInjectionReceiver* injection_receiver = CRWTestJSInjectionReceiver* injection_receiver =
[[CRWTestJSInjectionReceiver alloc] init]; [[CRWTestJSInjectionReceiver alloc] init];
web_state_.SetJSInjectionReceiver(injection_receiver); web_state_.SetJSInjectionReceiver(injection_receiver);
WebViewTranslateClient::CreateForWebState(&web_state_); translate_client_ = std::make_unique<FakeWebViewTranslateClient>(
translate_client_ = WebViewTranslateClient::FromWebState(&web_state_); &web_state_, /*page_lang=*/"en");
translation_controller_ = [[CWVTranslationController alloc] translation_controller_ = [[CWVTranslationController alloc]
initWithTranslateClient:translate_client_]; initWithTranslateClient:translate_client_.get()];
translate_prefs_ = translate_client_->GetTranslatePrefs(); translate_prefs_ = translate_client_->GetTranslatePrefs();
translate_prefs_->ResetToDefaults(); translate_prefs_->ResetToDefaults();
} }
...@@ -67,8 +67,8 @@ class CWVTranslationControllerTest : public PlatformTest { ...@@ -67,8 +67,8 @@ class CWVTranslationControllerTest : public PlatformTest {
web::TestWebThreadBundle web_thread_bundle_; web::TestWebThreadBundle web_thread_bundle_;
WebViewBrowserState browser_state_; WebViewBrowserState browser_state_;
std::unique_ptr<FakeWebViewTranslateClient> translate_client_;
web::TestWebState web_state_; web::TestWebState web_state_;
WebViewTranslateClient* translate_client_;
CWVTranslationController* translation_controller_; CWVTranslationController* translation_controller_;
std::unique_ptr<translate::TranslatePrefs> translate_prefs_; std::unique_ptr<translate::TranslatePrefs> translate_prefs_;
}; };
...@@ -175,4 +175,28 @@ TEST_F(CWVTranslationControllerTest, ReadPageHostPolicy) { ...@@ -175,4 +175,28 @@ TEST_F(CWVTranslationControllerTest, ReadPageHostPolicy) {
EXPECT_NSEQ(nil, policy.language); EXPECT_NSEQ(nil, policy.language);
} }
// Tests CWVTranslationController translate page and revert methods.
TEST_F(CWVTranslationControllerTest, TranslatePageAndRevert) {
NSArray* langs = translation_controller_.supportedLanguages.allObjects;
CWVTranslationLanguage* from_lang = langs.firstObject;
CWVTranslationLanguage* to_lang = langs.lastObject;
std::string from_code = base::SysNSStringToUTF8(from_lang.languageCode);
std::string to_code = base::SysNSStringToUTF8(to_lang.languageCode);
[translation_controller_ translatePageFromLanguage:from_lang
toLanguage:to_lang
userInitiated:YES];
EXPECT_EQ(to_code, translate_client_->GetCurrentLang());
TranslatePageInvocation invocation =
translate_client_->GetLastTraslatePageInvocation();
EXPECT_EQ(from_code, invocation.source_lang);
EXPECT_EQ(to_code, invocation.target_lang);
EXPECT_TRUE(invocation.triggered_from_menu);
[translation_controller_ revertTranslation];
EXPECT_EQ(translate_client_->GetPageLang(),
translate_client_->GetCurrentLang());
}
} // namespace ios_web_view } // namespace ios_web_view
// Copyright 2018 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.
#ifndef IOS_WEB_VIEW_INTERNAL_TRANSLATE_FAKE_WEB_VIEW_TRANSLATE_CLIENT_H_
#define IOS_WEB_VIEW_INTERNAL_TRANSLATE_FAKE_WEB_VIEW_TRANSLATE_CLIENT_H_
#include <string>
#import "ios/web_view/internal/translate/web_view_translate_client.h"
namespace ios_web_view {
// Contains the list of parameters passed to |TranslatePage|.
struct TranslatePageInvocation {
std::string source_lang;
std::string target_lang;
bool triggered_from_menu;
};
// Fake translate client used in unit tests.
class FakeWebViewTranslateClient : public WebViewTranslateClient {
public:
// |page_lang| The original language of the page.
explicit FakeWebViewTranslateClient(web::WebState* web_state,
std::string page_lang);
~FakeWebViewTranslateClient() override;
// WebViewTranslateClient implementation.
void TranslatePage(const std::string& source_lang,
const std::string& target_lang,
bool triggered_from_menu) override;
void RevertTranslation() override;
// Getters for ivars used for testing.
std::string GetPageLang() { return page_lang_; }
std::string GetCurrentLang() { return current_lang_; }
TranslatePageInvocation GetLastTraslatePageInvocation() {
return last_translate_page_invocation_;
}
private:
std::string page_lang_;
TranslatePageInvocation last_translate_page_invocation_;
std::string current_lang_;
};
} // namespace ios_web_view
#endif // IOS_WEB_VIEW_INTERNAL_TRANSLATE_FAKE_WEB_VIEW_TRANSLATE_CLIENT_H_
// Copyright 2018 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.
#import "ios/web_view/internal/translate/fake_web_view_translate_client.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace ios_web_view {
FakeWebViewTranslateClient::FakeWebViewTranslateClient(web::WebState* web_state,
std::string page_lang)
: WebViewTranslateClient(web_state),
page_lang_(page_lang),
current_lang_(page_lang){};
FakeWebViewTranslateClient::~FakeWebViewTranslateClient(){};
void FakeWebViewTranslateClient::TranslatePage(const std::string& source_lang,
const std::string& target_lang,
bool triggered_from_menu) {
last_translate_page_invocation_.source_lang = source_lang;
last_translate_page_invocation_.target_lang = target_lang;
last_translate_page_invocation_.triggered_from_menu = triggered_from_menu;
current_lang_ = target_lang;
}
void FakeWebViewTranslateClient::RevertTranslation() {
current_lang_ = page_lang_;
}
} // namespace ios_web_view
...@@ -52,13 +52,15 @@ class WebViewTranslateClient ...@@ -52,13 +52,15 @@ class WebViewTranslateClient
} }
// Performs translation from |source_lang| to |target_lang|. // Performs translation from |source_lang| to |target_lang|.
// |trigged_from_menu| indicates if a direct result of user interaction. // |trigged_from_menu| indicates if a direct result of user.
void TranslatePage(const std::string& source_lang, // Marked virtual to allow for testing.
const std::string& target_lang, virtual void TranslatePage(const std::string& source_lang,
bool triggered_from_menu); const std::string& target_lang,
bool triggered_from_menu);
// Reverts previous translations back to original language. // Reverts previous translations back to original language.
void RevertTranslation(); // Marked virtual to allow for testing.
virtual void RevertTranslation();
// TranslateClient implementation. // TranslateClient implementation.
translate::IOSTranslateDriver* GetTranslateDriver() override; translate::IOSTranslateDriver* GetTranslateDriver() override;
...@@ -80,12 +82,13 @@ class WebViewTranslateClient ...@@ -80,12 +82,13 @@ class WebViewTranslateClient
bool IsTranslatableURL(const GURL& url) override; bool IsTranslatableURL(const GURL& url) override;
void ShowReportLanguageDetectionErrorUI(const GURL& report_url) override; void ShowReportLanguageDetectionErrorUI(const GURL& report_url) override;
private: protected:
friend class web::WebStateUserData<WebViewTranslateClient>;
// The lifetime of WebViewTranslateClient is managed by WebStateUserData. // The lifetime of WebViewTranslateClient is managed by WebStateUserData.
explicit WebViewTranslateClient(web::WebState* web_state); explicit WebViewTranslateClient(web::WebState* web_state);
private:
friend class web::WebStateUserData<WebViewTranslateClient>;
// web::WebStateObserver implementation. // web::WebStateObserver implementation.
void WebStateDestroyed(web::WebState* web_state) override; void WebStateDestroyed(web::WebState* web_state) override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment