ime_feature_pod_controller_unittest.cc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/system/ime/ime_feature_pod_controller.h"
  5. #include <vector>
  6. #include "ash/ime/ime_controller_impl.h"
  7. #include "ash/shell.h"
  8. #include "ash/system/unified/feature_pod_button.h"
  9. #include "ash/system/unified/unified_system_tray_controller.h"
  10. #include "ash/system/unified/unified_system_tray_model.h"
  11. #include "ash/test/ash_test_base.h"
  12. #include "base/memory/scoped_refptr.h"
  13. #include "base/strings/string_number_conversions.h"
  14. #include "base/strings/utf_string_conversions.h"
  15. namespace ash {
  16. // Tests manually control their session state.
  17. class IMEFeaturePodControllerTest : public NoSessionAshTestBase {
  18. public:
  19. IMEFeaturePodControllerTest() = default;
  20. IMEFeaturePodControllerTest(const IMEFeaturePodControllerTest&) = delete;
  21. IMEFeaturePodControllerTest& operator=(const IMEFeaturePodControllerTest&) =
  22. delete;
  23. ~IMEFeaturePodControllerTest() override = default;
  24. void SetUp() override {
  25. NoSessionAshTestBase::SetUp();
  26. tray_model_ = base::MakeRefCounted<UnifiedSystemTrayModel>(nullptr);
  27. tray_controller_ =
  28. std::make_unique<UnifiedSystemTrayController>(tray_model_.get());
  29. }
  30. void TearDown() override {
  31. button_.reset();
  32. controller_.reset();
  33. tray_controller_.reset();
  34. tray_model_.reset();
  35. NoSessionAshTestBase::TearDown();
  36. }
  37. protected:
  38. void SetUpButton() {
  39. controller_ = std::make_unique<IMEFeaturePodController>(tray_controller());
  40. button_.reset(controller_->CreateButton());
  41. }
  42. UnifiedSystemTrayController* tray_controller() {
  43. return tray_controller_.get();
  44. }
  45. FeaturePodButton* button() { return button_.get(); }
  46. // Creates |count| simulated active IMEs.
  47. void SetActiveIMECount(int count) {
  48. available_imes_.resize(count);
  49. for (int i = 0; i < count; ++i)
  50. available_imes_[i].id = base::NumberToString(i);
  51. RefreshImeController();
  52. }
  53. void RefreshImeController() {
  54. std::vector<ImeInfo> available_imes;
  55. for (const auto& ime : available_imes_)
  56. available_imes.push_back(ime);
  57. std::vector<ImeMenuItem> menu_items;
  58. for (const auto& item : menu_items_)
  59. menu_items_.push_back(item);
  60. Shell::Get()->ime_controller()->RefreshIme(
  61. current_ime_.id, std::move(available_imes), std::move(menu_items));
  62. }
  63. private:
  64. scoped_refptr<UnifiedSystemTrayModel> tray_model_;
  65. std::unique_ptr<UnifiedSystemTrayController> tray_controller_;
  66. std::unique_ptr<IMEFeaturePodController> controller_;
  67. std::unique_ptr<FeaturePodButton> button_;
  68. // IMEs
  69. ImeInfo current_ime_;
  70. std::vector<ImeInfo> available_imes_;
  71. std::vector<ImeMenuItem> menu_items_;
  72. };
  73. // Tests that if the pod button is hidden if less than 2 IMEs are present.
  74. TEST_F(IMEFeaturePodControllerTest, ButtonVisibilityIMECount) {
  75. SetUpButton();
  76. SetActiveIMECount(0);
  77. EXPECT_FALSE(button()->GetVisible());
  78. SetActiveIMECount(1);
  79. EXPECT_FALSE(button()->GetVisible());
  80. SetActiveIMECount(2);
  81. EXPECT_TRUE(button()->GetVisible());
  82. }
  83. TEST_F(IMEFeaturePodControllerTest, ButtonVisibilityImeMenuActive) {
  84. SetUpButton();
  85. Shell::Get()->ime_controller()->ShowImeMenuOnShelf(true);
  86. SetActiveIMECount(0);
  87. EXPECT_FALSE(button()->GetVisible());
  88. SetActiveIMECount(1);
  89. EXPECT_FALSE(button()->GetVisible());
  90. SetActiveIMECount(2);
  91. EXPECT_FALSE(button()->GetVisible());
  92. }
  93. TEST_F(IMEFeaturePodControllerTest, ButtonVisibilityPolicy) {
  94. SetUpButton();
  95. Shell::Get()->ime_controller()->SetImesManagedByPolicy(true);
  96. SetActiveIMECount(0);
  97. EXPECT_TRUE(button()->GetVisible());
  98. SetActiveIMECount(1);
  99. EXPECT_TRUE(button()->GetVisible());
  100. SetActiveIMECount(2);
  101. EXPECT_TRUE(button()->GetVisible());
  102. }
  103. } // namespace ash