// 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 CONTENT_TEST_MOCK_KEYBOARD_H_
#define CONTENT_TEST_MOCK_KEYBOARD_H_
#include <string>
#include "base/basictypes.h"
#if defined(OS_WIN)
#include "content/test/mock_keyboard_driver_win.h"
#endif
namespace content {
// A mock keyboard interface.
// This class defines a pseudo keyboard device, which implements mappings from
// a tuple (layout, key code, modifiers) to Unicode characters so that
// engineers can write RenderViewTest cases without taking care of such
// mappings. (This mapping is not trivial when using non-US keyboards.)
// A pseudo keyboard device consists of two parts: a platform-independent part
// and a platform-dependent part. This class implements the platform-independent
// part. The platform-dependet part is implemented in the MockKeyboardWin class.
// This class is usually called from RenderViewTest::SendKeyEvent().
class MockKeyboard {
public:
// Represents keyboard-layouts.
enum Layout {
LAYOUT_NULL,
LAYOUT_ARABIC,
LAYOUT_BULGARIAN,
LAYOUT_CHINESE_TRADITIONAL,
LAYOUT_CZECH,
LAYOUT_DANISH,
LAYOUT_GERMAN,
LAYOUT_GREEK,
LAYOUT_UNITED_STATES,
LAYOUT_SPANISH,
LAYOUT_FINNISH,
LAYOUT_FRENCH,
LAYOUT_HEBREW,
LAYOUT_HUNGARIAN,
LAYOUT_ICELANDIC,
LAYOUT_ITALIAN,
LAYOUT_JAPANESE,
LAYOUT_KOREAN,
LAYOUT_POLISH,
LAYOUT_PORTUGUESE_BRAZILIAN,
LAYOUT_ROMANIAN,
LAYOUT_RUSSIAN,
LAYOUT_CROATIAN,
LAYOUT_SLOVAK,
LAYOUT_THAI,
LAYOUT_SWEDISH,
LAYOUT_TURKISH_Q,
LAYOUT_VIETNAMESE,
LAYOUT_DEVANAGARI_INSCRIPT,
LAYOUT_PORTUGUESE,
LAYOUT_UNITED_STATES_DVORAK,
LAYOUT_CANADIAN_FRENCH,
};
// Enumerates keyboard modifiers.
// These modifiers explicitly distinguish left-keys and right-keys because we
// should emulate AltGr (right-alt) key, used by many European keyboards to
// input alternate graph characters.
enum Modifiers {
INVALID = -1,
NONE = 0,
LEFT_SHIFT = 1 << 0,
LEFT_CONTROL = 1 << 1,
LEFT_ALT = 1 << 2,
LEFT_META = 1 << 3,
RIGHT_SHIFT = 1 << 4,
RIGHT_CONTROL = 1 << 5,
RIGHT_ALT = 1 << 6,
RIGHT_META = 1 << 7,
KEYPAD = 1 << 8,
AUTOREPEAAT = 1 << 9,
};
MockKeyboard();
~MockKeyboard();
// Retrieves Unicode characters composed from the the specified keyboard
// layout, key code, and modifiers, i.e. characters returned when we type
// specified keys on a specified layout.
// This function returns the length of Unicode characters filled in the
// |output| parameter.
int GetCharacters(Layout layout,
int key_code,
Modifiers modifiers,
std::wstring* output);
private:
Layout keyboard_layout_;
Modifiers keyboard_modifiers_;
#if defined(OS_WIN)
MockKeyboardDriverWin driver_;
#endif
DISALLOW_COPY_AND_ASSIGN(MockKeyboard);
};
} // namespace content
#endif // CONTENT_TEST_MOCK_KEYBOARD_H_