1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/ime/input_method_menu_manager.h" 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/logging.h" 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace ash { 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace ime { 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST(InputMethodMenuManagerTest, TestGetSingleton) { 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(InputMethodMenuManager::GetInstance()); 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class MockObserver : public InputMethodMenuManager::Observer { 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public: 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) MockObserver() : input_method_menu_item_changed_count_(0) {} 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual ~MockObserver() {} 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Called when the list of menu items is changed. 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void InputMethodMenuItemChanged( 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) InputMethodMenuManager* manager) OVERRIDE { 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) input_method_menu_item_changed_count_++; 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int input_method_menu_item_changed_count_; 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class InputMethodMenuManagerStatefulTest : public testing::Test{ 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public: 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) InputMethodMenuManagerStatefulTest() 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : observer_(new MockObserver()) {} 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual ~InputMethodMenuManagerStatefulTest() {} 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void SetUp() OVERRIDE { 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) menu_manager_ = InputMethodMenuManager::GetInstance(); 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) menu_manager_->AddObserver(observer_.get()); 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void TearDown() OVERRIDE { 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) menu_manager_->RemoveObserver(observer_.get()); 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) InputMethodMenuManager* menu_manager_; 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<MockObserver> observer_; 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(InputMethodMenuManagerStatefulTest, AddAndObserve) { 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(observer_->input_method_menu_item_changed_count_, 0); 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) menu_manager_->SetCurrentInputMethodMenuItemList(InputMethodMenuItemList()); 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(observer_->input_method_menu_item_changed_count_, 1); 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(InputMethodMenuManagerStatefulTest, AddAndCheckExists) { 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) InputMethodMenuItemList list; 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) list.push_back(InputMethodMenuItem("key1", "label1", false, false)); 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) list.push_back(InputMethodMenuItem("key2", "label2", false, false)); 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) menu_manager_->SetCurrentInputMethodMenuItemList(list); 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(menu_manager_->GetCurrentInputMethodMenuItemList().size(), 2U); 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ( 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) menu_manager_->GetCurrentInputMethodMenuItemList().at(0).ToString(), 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "key=key1, label=label1, " 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "is_selection_item=0, is_selection_item_checked=0"); 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ( 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) menu_manager_->GetCurrentInputMethodMenuItemList().at(1).ToString(), 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "key=key2, label=label2, " 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "is_selection_item=0, is_selection_item_checked=0"); 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(menu_manager_->HasInputMethodMenuItemForKey("key1")); 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(menu_manager_->HasInputMethodMenuItemForKey("key2")); 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(menu_manager_->HasInputMethodMenuItemForKey("key-not-exist")); 73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace ime 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace ash 77