blob: 2618896b9fea823244254fb38e9323c9859f82e9 [file] [log] [blame]
// 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.
#include "ash/system/ime/ime_feature_pod_controller.h"
#include <vector>
#include "ash/shell.h"
#include "ash/ime/ime_controller.h"
#include "ash/system/unified/feature_pod_button.h"
#include "ash/system/unified/unified_system_tray_controller.h"
#include "ash/system/unified/unified_system_tray_model.h"
#include "ash/test/ash_test_base.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
namespace ash {
// Tests manually control their session state.
class IMEFeaturePodControllerTest : public NoSessionAshTestBase {
public:
IMEFeaturePodControllerTest() = default;
~IMEFeaturePodControllerTest() override = default;
void SetUp() override {
NoSessionAshTestBase::SetUp();
tray_model_ = std::make_unique<UnifiedSystemTrayModel>();
tray_controller_ =
std::make_unique<UnifiedSystemTrayController>(tray_model_.get());
}
void TearDown() override {
button_.reset();
controller_.reset();
tray_controller_.reset();
tray_model_.reset();
NoSessionAshTestBase::TearDown();
}
protected:
void SetUpButton() {
controller_ =
std::make_unique<IMEFeaturePodController>(tray_controller());
button_.reset(controller_->CreateButton());
}
UnifiedSystemTrayController* tray_controller() {
return tray_controller_.get();
}
FeaturePodButton* button() { return button_.get(); }
// Creates |count| simulated active IMEs.
void SetActiveIMECount(int count) {
available_imes_.resize(count);
for (int i = 0; i < count; ++i)
available_imes_[i].id = base::IntToString(i);
RefreshImeController();
}
void RefreshImeController() {
std::vector<mojom::ImeInfoPtr> available_ime_ptrs;
for (const auto& ime : available_imes_)
available_ime_ptrs.push_back(ime.Clone());
std::vector<mojom::ImeMenuItemPtr> menu_item_ptrs;
for (const auto& item : menu_items_)
menu_item_ptrs.push_back(item.Clone());
Shell::Get()->ime_controller()->RefreshIme(current_ime_.id,
std::move(available_ime_ptrs),
std::move(menu_item_ptrs));
}
private:
std::unique_ptr<UnifiedSystemTrayModel> tray_model_;
std::unique_ptr<UnifiedSystemTrayController> tray_controller_;
std::unique_ptr<IMEFeaturePodController> controller_;
std::unique_ptr<FeaturePodButton> button_;
// IMEs
mojom::ImeInfo current_ime_;
std::vector<mojom::ImeInfo> available_imes_;
std::vector<mojom::ImeMenuItem> menu_items_;
DISALLOW_COPY_AND_ASSIGN(IMEFeaturePodControllerTest);
};
// Tests that if the pod button is hidden if less than 2 IMEs are present.
TEST_F(IMEFeaturePodControllerTest, ButtonVisibilityIMECount) {
SetUpButton();
SetActiveIMECount(0);
EXPECT_FALSE(button()->visible());
SetActiveIMECount(1);
EXPECT_FALSE(button()->visible());
SetActiveIMECount(2);
EXPECT_TRUE(button()->visible());
}
TEST_F(IMEFeaturePodControllerTest, ButtonVisibilityImeMenuActive) {
SetUpButton();
Shell::Get()->ime_controller()->ShowImeMenuOnShelf(true);
SetActiveIMECount(0);
EXPECT_FALSE(button()->visible());
SetActiveIMECount(1);
EXPECT_FALSE(button()->visible());
SetActiveIMECount(2);
EXPECT_FALSE(button()->visible());
}
TEST_F(IMEFeaturePodControllerTest, ButtonVisibilityPolicy) {
SetUpButton();
Shell::Get()->ime_controller()->SetImesManagedByPolicy(true);
SetActiveIMECount(0);
EXPECT_TRUE(button()->visible());
SetActiveIMECount(1);
EXPECT_TRUE(button()->visible());
SetActiveIMECount(2);
EXPECT_TRUE(button()->visible());
}
} // namespace ash