Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / events / keyboard_driven_event_rewriter_unittest.cc
1 // Copyright 2013 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 #include <string>
6
7 #include "base/basictypes.h"
8 #include "base/compiler_specific.h"
9 #include "base/strings/stringprintf.h"
10 #include "chrome/browser/chromeos/events/keyboard_driven_event_rewriter.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/events/event.h"
13
14 namespace chromeos {
15
16 class KeyboardDrivenEventRewriterTest : public testing::Test {
17  public:
18   KeyboardDrivenEventRewriterTest() {}
19
20   virtual ~KeyboardDrivenEventRewriterTest() {}
21
22  protected:
23   std::string GetRewrittenEventAsString(ui::KeyboardCode ui_keycode,
24                                         int ui_flags,
25                                         ui::EventType ui_type) {
26     ui::KeyEvent keyevent(ui_type, ui_keycode, ui_flags, false);
27     scoped_ptr<ui::Event> rewritten_event;
28     ui::EventRewriteStatus status =
29         rewriter_.RewriteForTesting(keyevent, &rewritten_event);
30     return base::StringPrintf(
31         "ui_flags=%d status=%d",
32         rewritten_event ? rewritten_event->flags() : keyevent.flags(),
33         status);
34   }
35
36   std::string GetExpectedResultAsString(int ui_flags,
37                                         ui::EventRewriteStatus status) {
38     return base::StringPrintf("ui_flags=%d status=%u", ui_flags, status);
39   }
40
41   KeyboardDrivenEventRewriter rewriter_;
42
43  private:
44   DISALLOW_COPY_AND_ASSIGN(KeyboardDrivenEventRewriterTest);
45 };
46
47 TEST_F(KeyboardDrivenEventRewriterTest, PassThrough) {
48   struct {
49     ui::KeyboardCode ui_keycode;
50     int ui_flags;
51   } kTests[] = {
52     { ui::VKEY_A, ui::EF_NONE },
53     { ui::VKEY_A, ui::EF_CONTROL_DOWN },
54     { ui::VKEY_A, ui::EF_ALT_DOWN },
55     { ui::VKEY_A, ui::EF_SHIFT_DOWN },
56     { ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN },
57     { ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN },
58
59     { ui::VKEY_LEFT, ui::EF_NONE },
60     { ui::VKEY_LEFT, ui::EF_CONTROL_DOWN },
61     { ui::VKEY_LEFT, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN },
62
63     { ui::VKEY_RIGHT, ui::EF_NONE },
64     { ui::VKEY_RIGHT, ui::EF_CONTROL_DOWN },
65     { ui::VKEY_RIGHT, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN },
66
67     { ui::VKEY_UP, ui::EF_NONE },
68     { ui::VKEY_UP, ui::EF_CONTROL_DOWN },
69     { ui::VKEY_UP, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN },
70
71     { ui::VKEY_DOWN, ui::EF_NONE },
72     { ui::VKEY_DOWN, ui::EF_CONTROL_DOWN },
73     { ui::VKEY_DOWN, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN },
74
75     { ui::VKEY_RETURN, ui::EF_NONE },
76     { ui::VKEY_RETURN, ui::EF_CONTROL_DOWN },
77     { ui::VKEY_RETURN, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN },
78   };
79
80   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTests); ++i) {
81     EXPECT_EQ(GetExpectedResultAsString(kTests[i].ui_flags,
82                                         ui::EVENT_REWRITE_CONTINUE),
83               GetRewrittenEventAsString(kTests[i].ui_keycode,
84                                         kTests[i].ui_flags,
85                                         ui::ET_KEY_PRESSED))
86     << "Test case " << i;
87   }
88 }
89
90 TEST_F(KeyboardDrivenEventRewriterTest, Rewrite) {
91   const int kModifierMask = ui::EF_SHIFT_DOWN;
92
93   struct {
94     ui::KeyboardCode ui_keycode;
95     int ui_flags;
96   } kTests[] = {
97     { ui::VKEY_LEFT, kModifierMask },
98     { ui::VKEY_RIGHT, kModifierMask },
99     { ui::VKEY_UP, kModifierMask },
100     { ui::VKEY_DOWN, kModifierMask },
101     { ui::VKEY_RETURN, kModifierMask },
102     { ui::VKEY_F6, kModifierMask },
103   };
104
105   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTests); ++i) {
106     EXPECT_EQ(GetExpectedResultAsString(ui::EF_NONE,
107                                         ui::EVENT_REWRITE_REWRITTEN),
108               GetRewrittenEventAsString(kTests[i].ui_keycode,
109                                         kTests[i].ui_flags,
110                                         ui::ET_KEY_PRESSED))
111     << "Test case " << i;
112   }
113 }
114
115 }  // namespace chromeos