示例#1
0
TEST(FlagStatus, negative_lock_clear) {
  FlagStatus flagStatus;

  {
    Vector_ModifierFlag v;
    v.push_back(ModifierFlag::COMMAND_L);
    v.push_back(ModifierFlag::FN);
    v.push_back(ModifierFlag::SHIFT_L);
    flagStatus.negative_lock_increase(v);
    EXPECT_EQ(Flags(0), flagStatus.makeFlags());

    flagStatus.increase(v);
    EXPECT_EQ(Flags(0), flagStatus.makeFlags());

    flagStatus.increase(v);
    EXPECT_EQ(ModifierFlag::COMMAND_L | ModifierFlag::FN | ModifierFlag::SHIFT_L, flagStatus.makeFlags());

    flagStatus.reset();
    EXPECT_EQ(Flags(0), flagStatus.makeFlags());

    flagStatus.increase(v);
    EXPECT_EQ(Flags(0), flagStatus.makeFlags());

    flagStatus.negative_lock_clear();
    EXPECT_EQ(ModifierFlag::COMMAND_L | ModifierFlag::FN | ModifierFlag::SHIFT_L, flagStatus.makeFlags());
  }
}
示例#2
0
TEST(FlagStatus, sticky_clear) {
  FlagStatus flagStatus;

  {
    Vector_ModifierFlag v;
    v.push_back(ModifierFlag::COMMAND_L);
    v.push_back(ModifierFlag::FN);
    v.push_back(ModifierFlag::SHIFT_L);
    flagStatus.sticky_increase(v);
    EXPECT_EQ(ModifierFlag::COMMAND_L | ModifierFlag::FN | ModifierFlag::SHIFT_L, flagStatus.makeFlags());
  }

  flagStatus.sticky_clear();
  EXPECT_EQ(Flags(0), flagStatus.makeFlags());
}
示例#3
0
TEST(FlagStatus, sticky_increase) {
  FlagStatus flagStatus;

  // Do nothing with ModifierFlag::NONE.
  flagStatus.sticky_increase(ModifierFlag::NONE);
  EXPECT_EQ(Flags(0), flagStatus.makeFlags());

  {
    Vector_ModifierFlag v;
    v.push_back(ModifierFlag::COMMAND_L);
    v.push_back(ModifierFlag::FN);
    flagStatus.sticky_increase(v);
    EXPECT_EQ(Flags(ModifierFlag::COMMAND_L | ModifierFlag::FN), flagStatus.makeFlags());
  }

  flagStatus.sticky_decrease(ModifierFlag::COMMAND_L);
  EXPECT_EQ(Flags(ModifierFlag::FN), flagStatus.makeFlags());
}
示例#4
0
TEST(FlagStatus, increase) {
  {
    FlagStatus flagStatus;

    // Do nothing with ModifierFlag::NONE.
    flagStatus.increase(ModifierFlag::NONE);
    EXPECT_EQ(Flags(0), flagStatus.makeFlags());

    flagStatus.increase(ModifierFlag::SHIFT_L);
    EXPECT_EQ(Flags(ModifierFlag::SHIFT_L), flagStatus.makeFlags());

    {
      Vector_ModifierFlag v;
      v.push_back(ModifierFlag::COMMAND_L);
      v.push_back(ModifierFlag::CONTROL_L);
      flagStatus.increase(v);
      EXPECT_EQ(Flags(ModifierFlag::COMMAND_L | ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L), flagStatus.makeFlags());
    }

    flagStatus.increase(ModifierFlag::NONE);
    EXPECT_EQ(Flags(ModifierFlag::COMMAND_L | ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L), flagStatus.makeFlags());
  }

  {
    FlagStatus flagStatus;
    Vector_ModifierFlag v;
    v.push_back(ModifierFlag::COMMAND_L);
    v.push_back(ModifierFlag::CONTROL_L);
    flagStatus.increase(ModifierFlag::SHIFT_L, v);
    EXPECT_EQ(Flags(ModifierFlag::COMMAND_L | ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L), flagStatus.makeFlags());
  }
  {
    FlagStatus flagStatus;
    Vector_ModifierFlag v;
    v.push_back(ModifierFlag::COMMAND_L);
    v.push_back(ModifierFlag::CONTROL_L);
    flagStatus.increase(ModifierFlag::COMMAND_L, v);
    EXPECT_EQ(Flags(ModifierFlag::COMMAND_L | ModifierFlag::CONTROL_L), flagStatus.makeFlags());
    flagStatus.decrease(v);
    EXPECT_EQ(Flags(0), flagStatus.makeFlags());
  }
}
示例#5
0
TEST(FlagStatus, lock_clear) {
  FlagStatus flagStatus;

  {
    Vector_ModifierFlag v;
    v.push_back(ModifierFlag::COMMAND_L);
    v.push_back(ModifierFlag::FN);
    v.push_back(ModifierFlag::SHIFT_L);
    flagStatus.lock_increase(v);
    EXPECT_EQ(ModifierFlag::COMMAND_L | ModifierFlag::FN | ModifierFlag::SHIFT_L, flagStatus.makeFlags());
  }
  {
    flagStatus.increase(ModifierFlag::CAPSLOCK);
    EXPECT_EQ(ModifierFlag::CAPSLOCK | ModifierFlag::COMMAND_L | ModifierFlag::FN | ModifierFlag::SHIFT_L,
              flagStatus.makeFlags());
  }

  flagStatus.lock_clear();
  EXPECT_EQ(Flags(0), flagStatus.makeFlags());
}
示例#6
0
TEST(FlagStatus, decrease) {
  FlagStatus flagStatus;

  {
    Vector_ModifierFlag v;
    v.push_back(ModifierFlag::COMMAND_L);
    v.push_back(ModifierFlag::CONTROL_L);
    flagStatus.increase(v);
    EXPECT_EQ(Flags(ModifierFlag::COMMAND_L | ModifierFlag::CONTROL_L), flagStatus.makeFlags());
  }

  flagStatus.decrease(ModifierFlag::CONTROL_L);
  EXPECT_EQ(Flags(ModifierFlag::COMMAND_L), flagStatus.makeFlags());
}
示例#7
0
void FlagStatus::subtract(const FlagStatus& other, Vector_ModifierFlag& modifierFlags) const {
  modifierFlags.clear();

  if (item_.size() == other.item_.size()) {
    for (size_t i = 0; i < item_.size(); ++i) {
      int sum1 = item_[i].sum(true);
      int sum2 = other.item_[i].sum(true);
      if (sum1 > sum2) {
        for (int j = 0; j < sum1 - sum2; ++j) {
          modifierFlags.push_back(item_[i].flag_);
        }
      }
    }
  }
}
示例#8
0
TEST(FlagStatus, temporary_decrease) {
  FlagStatus flagStatus;

  {
    Vector_ModifierFlag v;
    v.push_back(ModifierFlag::COMMAND_L);
    v.push_back(ModifierFlag::CONTROL_L);
    flagStatus.increase(v);
    EXPECT_EQ(Flags(ModifierFlag::COMMAND_L | ModifierFlag::CONTROL_L), flagStatus.makeFlags());
  }

  flagStatus.temporary_decrease(ModifierFlag::CONTROL_L);
  EXPECT_EQ(Flags(ModifierFlag::COMMAND_L), flagStatus.makeFlags());

  // temporary_increase will reset by flagStatus.set
  flagStatus.set(KeyCode::COMMAND_L, Flags(ModifierFlag::COMMAND_L));
  EXPECT_EQ(Flags(ModifierFlag::COMMAND_L | ModifierFlag::CONTROL_L), flagStatus.makeFlags());
}
示例#9
0
TEST(Generic, changePressingState) {
  {
    FromEvent fe(KeyCode::RETURN);
    EXPECT_EQ(false, fe.isPressing());

    // ----------------------------------------
    // Without Flags
    // (For example, "change return to tab".)
    {
      FlagStatus currentFlags;
      Vector_ModifierFlag fromFlags;

      EXPECT_EQ(true, fe.changePressingState(*down_return, currentFlags, fromFlags));
      EXPECT_EQ(true, fe.isPressing());

      EXPECT_EQ(true, fe.changePressingState(*up_return, currentFlags, fromFlags));
      EXPECT_EQ(false, fe.isPressing());

      // Another event does not modify state
      EXPECT_EQ(false, fe.changePressingState(*down_shift, currentFlags, fromFlags));
      EXPECT_EQ(false, fe.isPressing());
      EXPECT_EQ(false, fe.changePressingState(*up_shift, currentFlags, fromFlags));
      EXPECT_EQ(false, fe.isPressing());
    }

    // ----------------------------------------
    // Set currentFlags
    // (For example, "change return to tab".)
    {
      Flags f(ModifierFlag::SHIFT_L);
      FlagStatus currentFlags(f);
      Vector_ModifierFlag fromFlags;

      EXPECT_EQ(true, fe.changePressingState(*down_return, currentFlags, fromFlags));
      EXPECT_EQ(true, fe.isPressing());

      EXPECT_EQ(true, fe.changePressingState(*up_return, currentFlags, fromFlags));
      EXPECT_EQ(false, fe.isPressing());
    }

    // ----------------------------------------
    // Set fromFlags
    // (For example, "change shift-return to tab".)
    {
      FlagStatus currentFlags;
      Vector_ModifierFlag fromFlags;
      fromFlags.push_back(ModifierFlag::SHIFT_L);

      // Does not change state if currentFlags lacks flags.
      EXPECT_EQ(false, fe.changePressingState(*down_return, currentFlags, fromFlags));
      EXPECT_EQ(false, fe.isPressing());

      EXPECT_EQ(false, fe.changePressingState(*up_return, currentFlags, fromFlags));
      EXPECT_EQ(false, fe.isPressing());
    }
    {
      Flags f(ModifierFlag::SHIFT_L);
      FlagStatus currentFlags(f);
      Vector_ModifierFlag fromFlags;
      fromFlags.push_back(ModifierFlag::SHIFT_L);

      EXPECT_EQ(true, fe.changePressingState(*down_return, currentFlags, fromFlags));
      EXPECT_EQ(true, fe.isPressing());

      EXPECT_EQ(true, fe.changePressingState(*up_return, currentFlags, fromFlags));
      EXPECT_EQ(false, fe.isPressing());
    }
    {
      Flags f(ModifierFlag::SHIFT_L);
      FlagStatus currentFlags(f);
      Vector_ModifierFlag fromFlags;
      fromFlags.push_back(ModifierFlag::SHIFT_L);

      EXPECT_EQ(true, fe.changePressingState(*down_return, currentFlags, fromFlags));
      EXPECT_EQ(true, fe.isPressing());

      // Change state even if currentFlags lacks flags when key is pressing.
      // This behavior is necessary for this case.
      // - shift down
      // - return down (shift-return is pressed.)
      // - shift up
      // - return up (shift-return is released.)
      currentFlags.reset();
      EXPECT_EQ(true, fe.changePressingState(*up_return, currentFlags, fromFlags));
      EXPECT_EQ(false, fe.isPressing());
      // return false if call changePressingState once again.
      EXPECT_EQ(false, fe.changePressingState(*up_return, currentFlags, fromFlags));
    }
  }
  {
    FromEvent fe(KeyCode::SPACE);
    FlagStatus currentFlags;
    Vector_ModifierFlag fromFlags;
    EXPECT_EQ(false, fe.changePressingState(*down_return, currentFlags, fromFlags));
    EXPECT_EQ(false, fe.changePressingState(*up_return, currentFlags, fromFlags));
  }
  {
    FromEvent fe(KeyCode::SHIFT_L);
    Flags f(ModifierFlag::SHIFT_L);
    FlagStatus currentFlags(f);
    Vector_ModifierFlag fromFlags;
    EXPECT_EQ(true, fe.changePressingState(*down_shift, currentFlags, fromFlags));
    EXPECT_EQ(true, fe.isPressing());

    currentFlags.reset();
    EXPECT_EQ(true, fe.changePressingState(*up_shift, currentFlags, fromFlags));
    EXPECT_EQ(false, fe.isPressing());
  }
  // multiple times
  {
    FromEvent fe(KeyCode::RETURN);
    FlagStatus currentFlags;
    Vector_ModifierFlag fromFlags;
    EXPECT_EQ(false, fe.changePressingState(*up_return, currentFlags, fromFlags));
    EXPECT_EQ(true, fe.changePressingState(*down_return, currentFlags, fromFlags));
    EXPECT_EQ(true, fe.changePressingState(*down_return, currentFlags, fromFlags));
    EXPECT_EQ(true, fe.changePressingState(*up_return, currentFlags, fromFlags));
    EXPECT_EQ(true, fe.changePressingState(*up_return, currentFlags, fromFlags));
    EXPECT_EQ(false, fe.changePressingState(*up_return, currentFlags, fromFlags));
  }
}
示例#10
0
TEST(FlagStatus, isOn) {
  {
    FlagStatus flagStatus;

    {
      Vector_ModifierFlag modifierFlags;
      EXPECT_TRUE(flagStatus.isOn(modifierFlags));
    }
    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag(ModifierFlag::ZERO));
      EXPECT_TRUE(flagStatus.isOn(modifierFlags));
    }
    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::NONE);
      EXPECT_TRUE(flagStatus.isOn(modifierFlags));
    }
    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::NONE);
      modifierFlags.push_back(ModifierFlag::ZERO);
      EXPECT_TRUE(flagStatus.isOn(modifierFlags));
    }
  }

  {
    FlagStatus flagStatus;
    flagStatus.increase(ModifierFlag::SHIFT_L);

    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::SHIFT_L);
      EXPECT_TRUE(flagStatus.isOn(modifierFlags));
    }
    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::SHIFT_L);
      modifierFlags.push_back(ModifierFlag::NONE);
      EXPECT_TRUE(flagStatus.isOn(modifierFlags));
    }
    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::SHIFT_R);
      EXPECT_FALSE(flagStatus.isOn(modifierFlags));
    }
    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::SHIFT_L);
      modifierFlags.push_back(ModifierFlag::ZERO);
      EXPECT_TRUE(flagStatus.isOn(modifierFlags));
    }
  }

  {
    FlagStatus flagStatus;
    flagStatus.increase(ModifierFlag::SHIFT_L);
    flagStatus.increase(ModifierFlag::ZERO);

    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::SHIFT_L);
      EXPECT_TRUE(flagStatus.isOn(modifierFlags));
    }
    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::SHIFT_L);
      modifierFlags.push_back(ModifierFlag::NONE);
      EXPECT_TRUE(flagStatus.isOn(modifierFlags));
    }
    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::SHIFT_R);
      EXPECT_FALSE(flagStatus.isOn(modifierFlags));
    }
    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::SHIFT_L);
      modifierFlags.push_back(ModifierFlag::ZERO);
      EXPECT_TRUE(flagStatus.isOn(modifierFlags));
    }
    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::SHIFT_L);
      modifierFlags.push_back(ModifierFlag::ZERO);
      modifierFlags.push_back(ModifierFlag::NONE);
      EXPECT_TRUE(flagStatus.isOn(modifierFlags));
    }
  }

  {
    FlagStatus flagStatus;
    flagStatus.increase(ModifierFlag::SHIFT_L);
    flagStatus.increase(ModifierFlag::CONTROL_R);
    flagStatus.increase(ModifierFlag::COMMAND_R);

    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::SHIFT_L);
      EXPECT_TRUE(flagStatus.isOn(modifierFlags));
    }
    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::SHIFT_L);
      modifierFlags.push_back(ModifierFlag::NONE);
      EXPECT_FALSE(flagStatus.isOn(modifierFlags));
    }
    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::SHIFT_R);
      EXPECT_FALSE(flagStatus.isOn(modifierFlags));
    }
    {
      Vector_ModifierFlag modifierFlags;
      modifierFlags.push_back(ModifierFlag::SHIFT_L);
      modifierFlags.push_back(ModifierFlag::CONTROL_R);
      modifierFlags.push_back(ModifierFlag::COMMAND_R);
      modifierFlags.push_back(ModifierFlag::NONE);
      EXPECT_TRUE(flagStatus.isOn(modifierFlags));
    }
  }
}