Home | History | Annotate | Download | only in events
      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);
     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
    116