Commit 4065cf23 authored by Yuichiro Hanada's avatar Yuichiro Hanada Committed by Commit Bot

Inject FakeArcWindowDelegate to the constructor of ArcImeService.

ArcImeService provides the method, SetArcWindowDelegateForTesting() to
inject a fake instance of ArcWindowDelegate for testing.
However, the instance of ArcWindowDelegate was generated in the
constructor and used in the constructor, so that usage cannot be faked.
This CL adds a new constructor for testing to ArcImeService to fix it.

Bug: b:148193316
Test: component_unittests
Change-Id: Ia3b6c68bbc66fd4d5bc640ecdabbb707143cfff6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2224943
Commit-Queue: Yuichiro Hanada <yhanada@chromium.org>
Reviewed-by: default avatarTetsui Ohkubo <tetsui@chromium.org>
Cr-Commit-Position: refs/heads/master@{#774433}
parent 5f5d5124
......@@ -53,6 +53,7 @@ class ArcWindowDelegateImpl : public ArcImeService::ArcWindowDelegate {
~ArcWindowDelegateImpl() override = default;
bool IsInArcAppWindow(const aura::Window* window) const override {
// WMHelper is not craeted in browser_tests.
if (!exo::WMHelper::HasInstance())
return false;
aura::Window* active = exo::WMHelper::GetInstance()->GetActiveWindow();
......@@ -74,7 +75,7 @@ class ArcWindowDelegateImpl : public ArcImeService::ArcWindowDelegate {
}
void RegisterFocusObserver() override {
// WMHelper is not created in tests.
// WMHelper is not craeted in browser_tests.
if (!exo::WMHelper::HasInstance())
return;
exo::WMHelper::GetInstance()->AddFocusObserver(ime_service_);
......@@ -96,7 +97,7 @@ class ArcWindowDelegateImpl : public ArcImeService::ArcWindowDelegate {
}
bool IsImeBlocked(aura::Window* window) const override {
// WMHelper is not created in tests.
// WMHelper is not craeted in browser_tests.
if (!exo::WMHelper::HasInstance())
return false;
return exo::WMHelper::GetInstance()->IsImeBlocked(window);
......@@ -140,8 +141,15 @@ ArcImeService* ArcImeService::GetForBrowserContext(
ArcImeService::ArcImeService(content::BrowserContext* context,
ArcBridgeService* bridge_service)
: ArcImeService(context,
bridge_service,
std::make_unique<ArcWindowDelegateImpl>(this)) {}
ArcImeService::ArcImeService(content::BrowserContext* context,
ArcBridgeService* bridge_service,
std::unique_ptr<ArcWindowDelegate> delegate)
: ime_bridge_(new ArcImeBridgeImpl(this, bridge_service)),
arc_window_delegate_(new ArcWindowDelegateImpl(this)),
arc_window_delegate_(std::move(delegate)),
ime_type_(ui::TEXT_INPUT_TYPE_NONE),
ime_flags_(ui::TEXT_INPUT_FLAG_NONE),
is_personalized_learning_allowed_(false),
......@@ -177,11 +185,6 @@ void ArcImeService::SetImeBridgeForTesting(
ime_bridge_ = std::move(test_ime_bridge);
}
void ArcImeService::SetArcWindowDelegateForTesting(
std::unique_ptr<ArcWindowDelegate> delegate) {
arc_window_delegate_ = std::move(delegate);
}
ui::InputMethod* ArcImeService::GetInputMethod() {
return arc_window_delegate_->GetInputMethodForWindow(focused_arc_window_);
}
......
......@@ -49,10 +49,6 @@ class ArcImeService : public KeyedService,
// or nullptr if the browser |context| is not allowed to use ARC.
static ArcImeService* GetForBrowserContext(content::BrowserContext* context);
ArcImeService(content::BrowserContext* context,
ArcBridgeService* bridge_service);
~ArcImeService() override;
class ArcWindowDelegate {
public:
virtual ~ArcWindowDelegate() = default;
......@@ -67,13 +63,14 @@ class ArcImeService : public KeyedService,
virtual bool IsImeBlocked(aura::Window* window) const = 0;
};
ArcImeService(content::BrowserContext* context,
ArcBridgeService* bridge_service);
~ArcImeService() override;
// Injects the custom IPC bridge object for testing purpose only.
void SetImeBridgeForTesting(std::unique_ptr<ArcImeBridge> test_ime_bridge);
// Injects the custom delegate for ARC windows, for testing purpose only.
void SetArcWindowDelegateForTesting(
std::unique_ptr<ArcWindowDelegate> delegate);
// Overridden from aura::EnvObserver:
void OnWindowInitialized(aura::Window* new_window) override;
......@@ -156,6 +153,13 @@ class ArcImeService : public KeyedService,
base::Optional<double> scale_factor);
private:
friend class ArcImeServiceTest;
// Injects the custom delegate for ARC windows, for testing purpose only.
ArcImeService(content::BrowserContext* context,
ArcBridgeService* bridge_service,
std::unique_ptr<ArcWindowDelegate> delegate);
ui::InputMethod* GetInputMethod();
// Detaches from the IME associated with the |old_window|, and attaches to the
......
......@@ -210,16 +210,17 @@ class ArcImeServiceTest : public testing::Test {
private:
void SetUp() override {
arc_bridge_service_ = std::make_unique<ArcBridgeService>();
instance_ =
std::make_unique<ArcImeService>(nullptr, arc_bridge_service_.get());
fake_arc_ime_bridge_ = new FakeArcImeBridge();
instance_->SetImeBridgeForTesting(base::WrapUnique(fake_arc_ime_bridge_));
fake_input_method_ = std::make_unique<FakeInputMethod>();
auto delegate =
std::make_unique<FakeArcWindowDelegate>(fake_input_method_.get());
fake_window_delegate_ = delegate.get();
instance_ = base::WrapUnique(new ArcImeService(
nullptr, arc_bridge_service_.get(), std::move(delegate)));
fake_arc_ime_bridge_ = new FakeArcImeBridge();
instance_->SetImeBridgeForTesting(base::WrapUnique(fake_arc_ime_bridge_));
fake_window_delegate_ = new FakeArcWindowDelegate(fake_input_method_.get());
instance_->SetArcWindowDelegateForTesting(
base::WrapUnique(fake_window_delegate_));
arc_win_ = fake_window_delegate_->CreateFakeArcWindow();
}
......@@ -229,6 +230,7 @@ class ArcImeServiceTest : public testing::Test {
fake_window_delegate_ = nullptr;
fake_arc_ime_bridge_ = nullptr;
instance_.reset();
fake_input_method_.reset();
arc_bridge_service_.reset();
}
};
......
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