Commit dc29340a authored by komatsu@chromium.org's avatar komatsu@chromium.org

Merge IBusContorllerBase into IBusControllerImpl.

BUG=279050

Review URL: https://chromiumcodereview.appspot.com/23460003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@220508 0039d316-1c4b-4281-b951-d872f2087c98
parent b461d4b2
// Copyright (c) 2012 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 "chrome/browser/chromeos/input_method/ibus_controller_base.h"
namespace chromeos {
namespace input_method {
IBusControllerBase::IBusControllerBase() {
}
IBusControllerBase::~IBusControllerBase() {
}
void IBusControllerBase::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void IBusControllerBase::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
const InputMethodPropertyList&
IBusControllerBase::GetCurrentProperties() const {
return current_property_list_;
}
void IBusControllerBase::ClearProperties() {
current_property_list_.clear();
}
} // namespace input_method
} // namespace chromeos
// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_INPUT_METHOD_IBUS_CONTROLLER_BASE_H_
#define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_IBUS_CONTROLLER_BASE_H_
#include <utility>
#include "base/observer_list.h"
#include "chrome/browser/chromeos/input_method/ibus_controller.h"
#include "chromeos/ime/input_method_property.h"
namespace chromeos {
namespace input_method {
// The common implementation of the IBusController. This file does not depend on
// libibus, hence is unit-testable.
class IBusControllerBase : public IBusController {
public:
IBusControllerBase();
virtual ~IBusControllerBase();
// IBusController overrides. Derived classes should not override these 4
// functions.
virtual void AddObserver(Observer* observer) OVERRIDE;
virtual void RemoveObserver(Observer* observer) OVERRIDE;
virtual const InputMethodPropertyList& GetCurrentProperties() const OVERRIDE;
virtual void ClearProperties() OVERRIDE;
protected:
ObserverList<Observer> observers_;
// The value which will be returned by GetCurrentProperties(). Derived classes
// should update this variable when needed.
InputMethodPropertyList current_property_list_;
DISALLOW_COPY_AND_ASSIGN(IBusControllerBase);
};
} // namespace input_method
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_IBUS_CONTROLLER_BASE_H_
// Copyright (c) 2012 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 "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/chromeos/input_method/ibus_controller_base.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chromeos {
namespace input_method {
namespace {
// A mock class for testing SetInputMethodConfig(), AddObserver(), and
// RemoveObserver() methods in IBusControllerBase.
class TestIBusController : public IBusControllerBase {
public:
TestIBusController() {
}
virtual ~TestIBusController() {
}
// IBusController overrides:
virtual void ClearProperties() OVERRIDE {}
virtual bool ActivateInputMethodProperty(const std::string& key) OVERRIDE {
return true;
}
bool HasObservers() const {
return observers_.might_have_observers();
}
private:
DISALLOW_COPY_AND_ASSIGN(TestIBusController);
};
class TestObserver : public IBusController::Observer {
public:
// IBusController::Observer overrides:
virtual void PropertyChanged() OVERRIDE {}
};
class IBusControllerBaseTest : public testing::Test {
public:
virtual void SetUp() {
controller_.reset(new TestIBusController);
}
virtual void TearDown() {
controller_.reset();
}
protected:
scoped_ptr<TestIBusController> controller_;
};
} // namespace
TEST_F(IBusControllerBaseTest, TestAddRemoveObserver) {
TestObserver observer1;
TestObserver observer2;
TestObserver observer3;
EXPECT_FALSE(controller_->HasObservers());
controller_->AddObserver(&observer1);
EXPECT_TRUE(controller_->HasObservers());
controller_->AddObserver(&observer2);
EXPECT_TRUE(controller_->HasObservers());
controller_->RemoveObserver(&observer3); // nop
EXPECT_TRUE(controller_->HasObservers());
controller_->RemoveObserver(&observer1);
EXPECT_TRUE(controller_->HasObservers());
controller_->RemoveObserver(&observer1); // nop
EXPECT_TRUE(controller_->HasObservers());
controller_->RemoveObserver(&observer2);
EXPECT_FALSE(controller_->HasObservers());
}
TEST_F(IBusControllerBaseTest, TestGetCurrentProperties) {
EXPECT_EQ(0U, controller_->GetCurrentProperties().size());
}
} // namespace input_method
} // namespace chromeos
...@@ -212,6 +212,23 @@ bool IBusControllerImpl::ActivateInputMethodProperty(const std::string& key) { ...@@ -212,6 +212,23 @@ bool IBusControllerImpl::ActivateInputMethodProperty(const std::string& key) {
return true; return true;
} }
void IBusControllerImpl::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void IBusControllerImpl::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
const InputMethodPropertyList&
IBusControllerImpl::GetCurrentProperties() const {
return current_property_list_;
}
void IBusControllerImpl::ClearProperties() {
current_property_list_.clear();
}
void IBusControllerImpl::RegisterProperties( void IBusControllerImpl::RegisterProperties(
const IBusPropertyList& ibus_prop_list) { const IBusPropertyList& ibus_prop_list) {
current_property_list_.clear(); current_property_list_.clear();
......
...@@ -8,8 +8,10 @@ ...@@ -8,8 +8,10 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "chrome/browser/chromeos/input_method/ibus_controller_base.h" #include "base/observer_list.h"
#include "chrome/browser/chromeos/input_method/ibus_controller.h"
#include "chromeos/ime/ibus_bridge.h" #include "chromeos/ime/ibus_bridge.h"
#include "chromeos/ime/input_method_property.h"
namespace chromeos { namespace chromeos {
namespace input_method { namespace input_method {
...@@ -18,9 +20,7 @@ struct InputMethodProperty; ...@@ -18,9 +20,7 @@ struct InputMethodProperty;
typedef std::vector<InputMethodProperty> InputMethodPropertyList; typedef std::vector<InputMethodProperty> InputMethodPropertyList;
// The IBusController implementation. // The IBusController implementation.
// TODO(nona): Merge to IBusControllerBase, there is no longer reason to split class IBusControllerImpl : public IBusController,
// this class into Impl and Base.
class IBusControllerImpl : public IBusControllerBase,
public IBusPanelPropertyHandlerInterface { public IBusPanelPropertyHandlerInterface {
public: public:
IBusControllerImpl(); IBusControllerImpl();
...@@ -29,12 +29,26 @@ class IBusControllerImpl : public IBusControllerBase, ...@@ -29,12 +29,26 @@ class IBusControllerImpl : public IBusControllerBase,
// IBusController overrides: // IBusController overrides:
virtual bool ActivateInputMethodProperty(const std::string& key) OVERRIDE; virtual bool ActivateInputMethodProperty(const std::string& key) OVERRIDE;
// IBusController overrides. Derived classes should not override these 4
// functions.
virtual void AddObserver(Observer* observer) OVERRIDE;
virtual void RemoveObserver(Observer* observer) OVERRIDE;
virtual const InputMethodPropertyList& GetCurrentProperties() const OVERRIDE;
virtual void ClearProperties() OVERRIDE;
// Calls <anonymous_namespace>::FindAndUpdateProperty. This method is just for // Calls <anonymous_namespace>::FindAndUpdateProperty. This method is just for
// unit testing. // unit testing.
static bool FindAndUpdatePropertyForTesting( static bool FindAndUpdatePropertyForTesting(
const InputMethodProperty& new_prop, const InputMethodProperty& new_prop,
InputMethodPropertyList* prop_list); InputMethodPropertyList* prop_list);
protected:
ObserverList<Observer> observers_;
// The value which will be returned by GetCurrentProperties(). Derived classes
// should update this variable when needed.
InputMethodPropertyList current_property_list_;
private: private:
// IBusPanelPropertyHandlerInterface overrides: // IBusPanelPropertyHandlerInterface overrides:
virtual void RegisterProperties( virtual void RegisterProperties(
......
...@@ -18,6 +18,29 @@ bool FindAndUpdateProperty(const InputMethodProperty& new_prop, ...@@ -18,6 +18,29 @@ bool FindAndUpdateProperty(const InputMethodProperty& new_prop,
prop_list); prop_list);
} }
// A mock class for testing AddObserver() and RemoveObserver() methods
// in IBusControllerImpl.
class TestIBusController : public IBusControllerImpl {
public:
TestIBusController() {
}
virtual ~TestIBusController() {
}
bool HasObservers() const {
return observers_.might_have_observers();
}
private:
DISALLOW_COPY_AND_ASSIGN(TestIBusController);
};
class TestObserver : public IBusController::Observer {
public:
// IBusController::Observer overrides:
virtual void PropertyChanged() OVERRIDE {}
};
} // namespace } // namespace
TEST(IBusControllerImplTest, TestFindAndUpdateProperty) { TEST(IBusControllerImplTest, TestFindAndUpdateProperty) {
...@@ -49,5 +72,38 @@ TEST(IBusControllerImplTest, TestFindAndUpdateProperty) { ...@@ -49,5 +72,38 @@ TEST(IBusControllerImplTest, TestFindAndUpdateProperty) {
properties[1]); properties[1]);
} }
TEST(IBusControllerImplTest, TestAddRemoveObserver) {
IBusBridge::Initialize();
{
TestIBusController controller;
TestObserver observer1;
TestObserver observer2;
TestObserver observer3;
EXPECT_FALSE(controller.HasObservers());
controller.AddObserver(&observer1);
EXPECT_TRUE(controller.HasObservers());
controller.AddObserver(&observer2);
EXPECT_TRUE(controller.HasObservers());
controller.RemoveObserver(&observer3); // nop
EXPECT_TRUE(controller.HasObservers());
controller.RemoveObserver(&observer1);
EXPECT_TRUE(controller.HasObservers());
controller.RemoveObserver(&observer1); // nop
EXPECT_TRUE(controller.HasObservers());
controller.RemoveObserver(&observer2);
EXPECT_FALSE(controller.HasObservers());
}
IBusBridge::Shutdown();
}
TEST(IBusControllerImplTest, TestGetCurrentProperties) {
IBusBridge::Initialize();
{
IBusControllerImpl controller;
EXPECT_EQ(0U, controller.GetCurrentProperties().size());
}
IBusBridge::Shutdown();
}
} // namespace input_method } // namespace input_method
} // namespace chromeos } // namespace chromeos
...@@ -391,8 +391,6 @@ ...@@ -391,8 +391,6 @@
'browser/chromeos/input_method/hidable_area.h', 'browser/chromeos/input_method/hidable_area.h',
'browser/chromeos/input_method/ibus_controller.cc', 'browser/chromeos/input_method/ibus_controller.cc',
'browser/chromeos/input_method/ibus_controller.h', 'browser/chromeos/input_method/ibus_controller.h',
'browser/chromeos/input_method/ibus_controller_base.cc',
'browser/chromeos/input_method/ibus_controller_base.h',
'browser/chromeos/input_method/ibus_controller_impl.cc', 'browser/chromeos/input_method/ibus_controller_impl.cc',
'browser/chromeos/input_method/ibus_controller_impl.h', 'browser/chromeos/input_method/ibus_controller_impl.h',
'browser/chromeos/input_method/infolist_window_view.cc', 'browser/chromeos/input_method/infolist_window_view.cc',
......
...@@ -671,7 +671,6 @@ ...@@ -671,7 +671,6 @@
'browser/chromeos/input_method/browser_state_monitor_unittest.cc', 'browser/chromeos/input_method/browser_state_monitor_unittest.cc',
'browser/chromeos/input_method/candidate_window_controller_impl_unittest.cc', 'browser/chromeos/input_method/candidate_window_controller_impl_unittest.cc',
'browser/chromeos/input_method/candidate_window_view_unittest.cc', 'browser/chromeos/input_method/candidate_window_view_unittest.cc',
'browser/chromeos/input_method/ibus_controller_base_unittest.cc',
'browser/chromeos/input_method/ibus_controller_impl_unittest.cc', 'browser/chromeos/input_method/ibus_controller_impl_unittest.cc',
'browser/chromeos/input_method/ibus_controller_unittest.cc', 'browser/chromeos/input_method/ibus_controller_unittest.cc',
'browser/chromeos/input_method/input_method_configuration_unittest.cc', 'browser/chromeos/input_method/input_method_configuration_unittest.cc',
......
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