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.
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"
16 class KeyboardDrivenEventRewriterTest
: public testing::Test
{
18 KeyboardDrivenEventRewriterTest() {}
20 ~KeyboardDrivenEventRewriterTest() override
{}
23 std::string
GetRewrittenEventAsString(ui::KeyboardCode ui_keycode
,
25 ui::EventType ui_type
) {
26 ui::KeyEvent
keyevent(ui_type
, ui_keycode
, ui_flags
);
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(),
36 std::string
GetExpectedResultAsString(int ui_flags
,
37 ui::EventRewriteStatus status
) {
38 return base::StringPrintf("ui_flags=%d status=%u", ui_flags
, status
);
41 KeyboardDrivenEventRewriter rewriter_
;
44 DISALLOW_COPY_AND_ASSIGN(KeyboardDrivenEventRewriterTest
);
47 TEST_F(KeyboardDrivenEventRewriterTest
, PassThrough
) {
49 ui::KeyboardCode ui_keycode
;
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
},
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
},
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
},
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
},
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
},
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
},
80 for (size_t i
= 0; i
< arraysize(kTests
); ++i
) {
81 EXPECT_EQ(GetExpectedResultAsString(kTests
[i
].ui_flags
,
82 ui::EVENT_REWRITE_CONTINUE
),
83 GetRewrittenEventAsString(kTests
[i
].ui_keycode
,
90 TEST_F(KeyboardDrivenEventRewriterTest
, Rewrite
) {
91 const int kModifierMask
= ui::EF_SHIFT_DOWN
;
94 ui::KeyboardCode ui_keycode
;
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
},
105 for (size_t i
= 0; i
< arraysize(kTests
); ++i
) {
106 EXPECT_EQ(GetExpectedResultAsString(ui::EF_NONE
,
107 ui::EVENT_REWRITE_REWRITTEN
),
108 GetRewrittenEventAsString(kTests
[i
].ui_keycode
,
111 << "Test case " << i
;
115 } // namespace chromeos