// 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. #include #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/strings/stringprintf.h" #include "chrome/browser/chromeos/events/keyboard_driven_event_rewriter.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/events/event.h" namespace chromeos { class KeyboardDrivenEventRewriterTest : public testing::Test { public: KeyboardDrivenEventRewriterTest() {} ~KeyboardDrivenEventRewriterTest() override {} protected: std::string GetRewrittenEventAsString(ui::KeyboardCode ui_keycode, int ui_flags, ui::EventType ui_type) { ui::KeyEvent keyevent(ui_type, ui_keycode, ui_flags); scoped_ptr rewritten_event; ui::EventRewriteStatus status = rewriter_.RewriteForTesting(keyevent, &rewritten_event); return base::StringPrintf( "ui_flags=%d status=%d", rewritten_event ? rewritten_event->flags() : keyevent.flags(), status); } std::string GetExpectedResultAsString(int ui_flags, ui::EventRewriteStatus status) { return base::StringPrintf("ui_flags=%d status=%u", ui_flags, status); } KeyboardDrivenEventRewriter rewriter_; private: DISALLOW_COPY_AND_ASSIGN(KeyboardDrivenEventRewriterTest); }; TEST_F(KeyboardDrivenEventRewriterTest, PassThrough) { struct { ui::KeyboardCode ui_keycode; int ui_flags; } kTests[] = { { ui::VKEY_A, ui::EF_NONE }, { ui::VKEY_A, ui::EF_CONTROL_DOWN }, { ui::VKEY_A, ui::EF_ALT_DOWN }, { ui::VKEY_A, ui::EF_SHIFT_DOWN }, { ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN }, { ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN }, { ui::VKEY_LEFT, ui::EF_NONE }, { ui::VKEY_LEFT, ui::EF_CONTROL_DOWN }, { ui::VKEY_LEFT, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN }, { ui::VKEY_RIGHT, ui::EF_NONE }, { ui::VKEY_RIGHT, ui::EF_CONTROL_DOWN }, { ui::VKEY_RIGHT, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN }, { ui::VKEY_UP, ui::EF_NONE }, { ui::VKEY_UP, ui::EF_CONTROL_DOWN }, { ui::VKEY_UP, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN }, { ui::VKEY_DOWN, ui::EF_NONE }, { ui::VKEY_DOWN, ui::EF_CONTROL_DOWN }, { ui::VKEY_DOWN, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN }, { ui::VKEY_RETURN, ui::EF_NONE }, { ui::VKEY_RETURN, ui::EF_CONTROL_DOWN }, { ui::VKEY_RETURN, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN }, }; for (size_t i = 0; i < arraysize(kTests); ++i) { EXPECT_EQ(GetExpectedResultAsString(kTests[i].ui_flags, ui::EVENT_REWRITE_CONTINUE), GetRewrittenEventAsString(kTests[i].ui_keycode, kTests[i].ui_flags, ui::ET_KEY_PRESSED)) << "Test case " << i; } } TEST_F(KeyboardDrivenEventRewriterTest, Rewrite) { const int kModifierMask = ui::EF_SHIFT_DOWN; struct { ui::KeyboardCode ui_keycode; int ui_flags; } kTests[] = { { ui::VKEY_LEFT, kModifierMask }, { ui::VKEY_RIGHT, kModifierMask }, { ui::VKEY_UP, kModifierMask }, { ui::VKEY_DOWN, kModifierMask }, { ui::VKEY_RETURN, kModifierMask }, { ui::VKEY_F6, kModifierMask }, }; for (size_t i = 0; i < arraysize(kTests); ++i) { EXPECT_EQ(GetExpectedResultAsString(ui::EF_NONE, ui::EVENT_REWRITE_REWRITTEN), GetRewrittenEventAsString(kTests[i].ui_keycode, kTests[i].ui_flags, ui::ET_KEY_PRESSED)) << "Test case " << i; } } } // namespace chromeos