// Copyright 2013 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 CHROMEOS_IME_FAKE_INPUT_METHOD_DELEGATE_H_
#define CHROMEOS_IME_FAKE_INPUT_METHOD_DELEGATE_H_

#include "base/basictypes.h"
#include "base/callback.h"
#include "base/compiler_specific.h"
#include "chromeos/chromeos_export.h"
#include "chromeos/ime/input_method_delegate.h"

namespace chromeos {
namespace input_method {

class CHROMEOS_EXPORT FakeInputMethodDelegate : public InputMethodDelegate {
 public:
  typedef base::Callback<string16 (const std::string& language_code)>
      LanguageNameLocalizationCallback;
  typedef base::Callback<string16 (int resource_id)>
      GetLocalizedStringCallback;

  FakeInputMethodDelegate();
  virtual ~FakeInputMethodDelegate();

  // InputMethodDelegate implementation:
  virtual std::string GetHardwareKeyboardLayout() const OVERRIDE;
  virtual string16 GetLocalizedString(int resource_id) const OVERRIDE;
  virtual string16 GetDisplayLanguageName(
      const std::string& language_code) const OVERRIDE;

  void set_hardware_keyboard_layout(const std::string& value) {
    hardware_keyboard_layout_ = value;
  }

  void set_active_locale(const std::string& value) {
    active_locale_ = value;
  }

  void set_get_display_language_name_callback(
      const LanguageNameLocalizationCallback& callback) {
    get_display_language_name_callback_ = callback;
  }

  void set_get_localized_string_callback(
      const GetLocalizedStringCallback& callback) {
    get_localized_string_callback_ = callback;
  }

 private:
  std::string hardware_keyboard_layout_;
  std::string active_locale_;
  LanguageNameLocalizationCallback get_display_language_name_callback_;
  GetLocalizedStringCallback get_localized_string_callback_;
  DISALLOW_COPY_AND_ASSIGN(FakeInputMethodDelegate);
};

}  // namespace input_method
}  // namespace chromeos

#endif  // CHROMEOS_IME_FAKE_INPUT_METHOD_DELEGATE_H_
