- add sources.
[platform/framework/web/crosswalk.git] / src / content / test / mock_keyboard.h
1 // Copyright (c) 2012 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
5 #ifndef CONTENT_TEST_MOCK_KEYBOARD_H_
6 #define CONTENT_TEST_MOCK_KEYBOARD_H_
7
8 #include <string>
9
10 #include "base/basictypes.h"
11
12 #if defined(OS_WIN)
13 #include "content/test/mock_keyboard_driver_win.h"
14 #endif
15
16 namespace content {
17
18 // A mock keyboard interface.
19 // This class defines a pseudo keyboard device, which implements mappings from
20 // a tuple (layout, key code, modifiers) to Unicode characters so that
21 // engineers can write RenderViewTest cases without taking care of such
22 // mappings. (This mapping is not trivial when using non-US keyboards.)
23 // A pseudo keyboard device consists of two parts: a platform-independent part
24 // and a platform-dependent part. This class implements the platform-independent
25 // part. The platform-dependet part is implemented in the MockKeyboardWin class.
26 // This class is usually called from RenderViewTest::SendKeyEvent().
27 class MockKeyboard {
28  public:
29   // Represents keyboard-layouts.
30   enum Layout {
31     LAYOUT_NULL,
32     LAYOUT_ARABIC,
33     LAYOUT_BULGARIAN,
34     LAYOUT_CHINESE_TRADITIONAL,
35     LAYOUT_CZECH,
36     LAYOUT_DANISH,
37     LAYOUT_GERMAN,
38     LAYOUT_GREEK,
39     LAYOUT_UNITED_STATES,
40     LAYOUT_SPANISH,
41     LAYOUT_FINNISH,
42     LAYOUT_FRENCH,
43     LAYOUT_HEBREW,
44     LAYOUT_HUNGARIAN,
45     LAYOUT_ICELANDIC,
46     LAYOUT_ITALIAN,
47     LAYOUT_JAPANESE,
48     LAYOUT_KOREAN,
49     LAYOUT_POLISH,
50     LAYOUT_PORTUGUESE_BRAZILIAN,
51     LAYOUT_ROMANIAN,
52     LAYOUT_RUSSIAN,
53     LAYOUT_CROATIAN,
54     LAYOUT_SLOVAK,
55     LAYOUT_THAI,
56     LAYOUT_SWEDISH,
57     LAYOUT_TURKISH_Q,
58     LAYOUT_VIETNAMESE,
59     LAYOUT_DEVANAGARI_INSCRIPT,
60     LAYOUT_PORTUGUESE,
61     LAYOUT_UNITED_STATES_DVORAK,
62     LAYOUT_CANADIAN_FRENCH,
63   };
64
65   // Enumerates keyboard modifiers.
66   // These modifiers explicitly distinguish left-keys and right-keys because we
67   // should emulate AltGr (right-alt) key, used by many European keyboards to
68   // input alternate graph characters.
69   enum Modifiers {
70     INVALID = -1,
71     NONE = 0,
72     LEFT_SHIFT = 1 << 0,
73     LEFT_CONTROL = 1 << 1,
74     LEFT_ALT = 1 << 2,
75     LEFT_META = 1 << 3,
76     RIGHT_SHIFT = 1 << 4,
77     RIGHT_CONTROL = 1 << 5,
78     RIGHT_ALT = 1 << 6,
79     RIGHT_META = 1 << 7,
80     KEYPAD = 1 << 8,
81     AUTOREPEAAT = 1 << 9,
82   };
83
84   MockKeyboard();
85   ~MockKeyboard();
86
87   // Retrieves Unicode characters composed from the the specified keyboard
88   // layout, key code, and modifiers, i.e. characters returned when we type
89   // specified keys on a specified layout.
90   // This function returns the length of Unicode characters filled in the
91   // |output| parameter.
92   int GetCharacters(Layout layout,
93                     int key_code,
94                     Modifiers modifiers,
95                     std::wstring* output);
96
97  private:
98   Layout keyboard_layout_;
99   Modifiers keyboard_modifiers_;
100
101 #if defined(OS_WIN)
102   MockKeyboardDriverWin driver_;
103 #endif
104
105   DISALLOW_COPY_AND_ASSIGN(MockKeyboard);
106 };
107
108 }  // namespace content
109
110 #endif  // CONTENT_TEST_MOCK_KEYBOARD_H_