// Copyright 2018 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.

#ifndef UI_BASE_ACCELERATORS_TEST_ACCELERATOR_TARGET_H_
#define UI_BASE_ACCELERATORS_TEST_ACCELERATOR_TARGET_H_

#include "ui/base/accelerators/accelerator.h"

namespace ui {

// AcceleratorTarget implementation suitable for tests. Tracks calls to
// AcceleratorPressed() and allows for configuration of values returned by
// various functions.
class TestAcceleratorTarget : public AcceleratorTarget {
 public:
  // |accelerator_pressed_result| is used as the return value for
  // AcceleratorPressed().
  explicit TestAcceleratorTarget(bool accelerator_pressed_result = true);
  ~TestAcceleratorTarget() override;

  void set_can_handle_accelerators(bool can_handle_accelerators) {
    can_handle_accelerators_ = can_handle_accelerators;
  }

  int accelerator_count() const { return accelerator_count_; }
  int accelerator_repeat_count() const { return accelerator_repeat_count_; }

  // Returns the number of times AcceleratorPressed() was called with an
  // accelerator whose repeat value was false.
  int accelerator_non_repeat_count() const {
    return accelerator_count_ - accelerator_repeat_count_;
  }

  void ResetCounts();

  // AcceleratorTarget:
  bool AcceleratorPressed(const ui::Accelerator& accelerator) override;
  bool CanHandleAccelerators() const override;

 private:
  // Number of times AcceleratorPressed() was called.
  int accelerator_count_ = 0;

  // Number of times AcceleratorPressed() was called and Accelerator::IsRepeat()
  // was true.
  int accelerator_repeat_count_ = 0;

  // Return value of AcceleratorPressed().
  const bool accelerator_pressed_result_;

  // Return value of CanHandleAccelerators().
  bool can_handle_accelerators_ = true;

  DISALLOW_COPY_AND_ASSIGN(TestAcceleratorTarget);
};

};  // namespace ui

#endif  // UI_BASE_ACCELERATORS_TEST_ACCELERATOR_TARGET_H_
