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") {
}
}
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") {
testonly = true
sources = [
......@@ -269,6 +274,7 @@ test("ios_web_view_unittests") {
"internal/web_view_web_client_unittest.mm",
]
sources += ios_web_view_sources
sources += ios_web_view_test_sources
deps = [
"test:test_support",
......
......@@ -15,7 +15,7 @@
#import "ios/web/public/test/fakes/test_web_state.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/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"
#import "ios/web_view/public/cwv_translation_controller_delegate.h"
#import "ios/web_view/public/cwv_translation_policy.h"
......@@ -46,10 +46,10 @@ class CWVTranslationControllerTest : public PlatformTest {
CRWTestJSInjectionReceiver* injection_receiver =
[[CRWTestJSInjectionReceiver alloc] init];
web_state_.SetJSInjectionReceiver(injection_receiver);
WebViewTranslateClient::CreateForWebState(&web_state_);
translate_client_ = WebViewTranslateClient::FromWebState(&web_state_);
translate_client_ = std::make_unique<FakeWebViewTranslateClient>(
&web_state_, /*page_lang=*/"en");
translation_controller_ = [[CWVTranslationController alloc]
initWithTranslateClient:translate_client_];
initWithTranslateClient:translate_client_.get()];
translate_prefs_ = translate_client_->GetTranslatePrefs();
translate_prefs_->ResetToDefaults();
}
......@@ -67,8 +67,8 @@ class CWVTranslationControllerTest : public PlatformTest {
web::TestWebThreadBundle web_thread_bundle_;
WebViewBrowserState browser_state_;
std::unique_ptr<FakeWebViewTranslateClient> translate_client_;
web::TestWebState web_state_;
WebViewTranslateClient* translate_client_;
CWVTranslationController* translation_controller_;
std::unique_ptr<translate::TranslatePrefs> translate_prefs_;
};
......@@ -175,4 +175,28 @@ TEST_F(CWVTranslationControllerTest, ReadPageHostPolicy) {
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
// 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
}
// Performs translation from |source_lang| to |target_lang|.
// |trigged_from_menu| indicates if a direct result of user interaction.
void TranslatePage(const std::string& source_lang,
const std::string& target_lang,
bool triggered_from_menu);
// |trigged_from_menu| indicates if a direct result of user.
// Marked virtual to allow for testing.
virtual void TranslatePage(const std::string& source_lang,
const std::string& target_lang,
bool triggered_from_menu);
// Reverts previous translations back to original language.
void RevertTranslation();
// Marked virtual to allow for testing.
virtual void RevertTranslation();
// TranslateClient implementation.
translate::IOSTranslateDriver* GetTranslateDriver() override;
......@@ -80,12 +82,13 @@ class WebViewTranslateClient
bool IsTranslatableURL(const GURL& url) override;
void ShowReportLanguageDetectionErrorUI(const GURL& report_url) override;
private:
friend class web::WebStateUserData<WebViewTranslateClient>;
protected:
// The lifetime of WebViewTranslateClient is managed by WebStateUserData.
explicit WebViewTranslateClient(web::WebState* web_state);
private:
friend class web::WebStateUserData<WebViewTranslateClient>;
// web::WebStateObserver implementation.
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