chromium/ash/drag_drop/mock_drag_drop_observer.h

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_DRAG_DROP_MOCK_DRAG_DROP_OBSERVER_H_
#define ASH_DRAG_DROP_MOCK_DRAG_DROP_OBSERVER_H_

#include "base/scoped_observation.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "ui/aura/client/drag_drop_client_observer.h"

namespace aura::client {
class DragDropClient;
}  // namespace aura::client

namespace ui {
namespace mojom {
enum class DragOperation;
}  // namespace mojom

class DropTargetEvent;
}  // namespace ui

namespace ash {

// A mock observer on drag-and-drop events. Used for testing only.
class MockDragDropObserver : public aura::client::DragDropClientObserver {
 public:
  explicit MockDragDropObserver(aura::client::DragDropClient* client);
  MockDragDropObserver(const MockDragDropObserver&) = delete;
  MockDragDropObserver& operator=(const MockDragDropObserver&) = delete;
  ~MockDragDropObserver() override;

  // aura::client::DragDropClientObserver:
  MOCK_METHOD(void, OnDragStarted, (), (override));
  MOCK_METHOD(void,
              OnDragUpdated,
              (const ui::DropTargetEvent& event),
              (override));
  MOCK_METHOD(void,
              OnDragCompleted,
              (const ui::DropTargetEvent& event),
              (override));
  MOCK_METHOD(void, OnDragCancelled, (), (override));
  MOCK_METHOD(void, OnDropCompleted, (ui::mojom::DragOperation), (override));

 private:
  base::ScopedObservation<aura::client::DragDropClient,
                          aura::client::DragDropClientObserver>
      observation_{this};
};

}  // namespace ash

#endif  // ASH_DRAG_DROP_MOCK_DRAG_DROP_OBSERVER_H_