// Copyright 2014 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_EVENTS_TEST_MOTION_EVENT_TEST_UTILS_H_
#define UI_EVENTS_TEST_MOTION_EVENT_TEST_UTILS_H_

#include <string>
#include <vector>

#include "base/basictypes.h"
#include "base/time/time.h"
#include "ui/events/gesture_detection/motion_event_generic.h"
#include "ui/gfx/geometry/point_f.h"

namespace ui {
namespace test {

struct MockMotionEvent : public MotionEventGeneric {
  enum { TOUCH_MAJOR = 10 };

  MockMotionEvent();
  explicit MockMotionEvent(Action action);
  MockMotionEvent(Action action, base::TimeTicks time, float x, float y);
  MockMotionEvent(Action action,
                  base::TimeTicks time,
                  float x0,
                  float y0,
                  float x1,
                  float y1);
  MockMotionEvent(Action action,
                  base::TimeTicks time,
                  float x0,
                  float y0,
                  float x1,
                  float y1,
                  float x2,
                  float y2);
  MockMotionEvent(Action action,
                  base::TimeTicks time,
                  const std::vector<gfx::PointF>& positions);
  MockMotionEvent(const MockMotionEvent& other);

  ~MockMotionEvent() override;

  // Utility methods.
  MockMotionEvent& PressPoint(float x, float y);
  MockMotionEvent& MovePoint(size_t index, float x, float y);
  MockMotionEvent& ReleasePoint();
  MockMotionEvent& CancelPoint();
  MockMotionEvent& SetTouchMajor(float new_touch_major);
  MockMotionEvent& SetRawOffset(float raw_offset_x, float raw_offset_y);
  MockMotionEvent& SetToolType(size_t index, ToolType tool_type);
  MockMotionEvent& SetPrimaryPointerId(int id);

 private:
  void PushPointer(float x, float y);
  void UpdatePointersAndID();
};

std::string ToString(const MotionEvent& event);

}  // namespace test
}  // namespace ui

#endif  // UI_EVENTS_TEST_MOTION_EVENT_TEST_UTILS_H_
