// Copyright (c) 2013 The Chromium OS 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 LIBBRILLO_BRILLO_UDEV_MOCK_UDEV_H_
#define LIBBRILLO_BRILLO_UDEV_MOCK_UDEV_H_

#include <memory>

#include <brillo/brillo_export.h>
#include <brillo/udev/udev.h>
#include <brillo/udev/udev_device.h>
#include <brillo/udev/udev_enumerate.h>
#include <brillo/udev/udev_monitor.h>
#include <gmock/gmock.h>

namespace brillo {

class BRILLO_EXPORT MockUdev : public Udev {
 public:
  MockUdev() : Udev(nullptr) {}
  ~MockUdev() override = default;

  MOCK_METHOD(std::unique_ptr<UdevDevice>,
              CreateDeviceFromSysPath,
              (const char*),
              (override));
  MOCK_METHOD(std::unique_ptr<UdevDevice>,
              CreateDeviceFromDeviceNumber,
              (char, dev_t),
              (override));
  MOCK_METHOD(std::unique_ptr<UdevDevice>,
              CreateDeviceFromSubsystemSysName,
              (const char*, const char*),
              (override));
  MOCK_METHOD(std::unique_ptr<UdevEnumerate>, CreateEnumerate, (), (override));
  MOCK_METHOD(std::unique_ptr<UdevMonitor>,
              CreateMonitorFromNetlink,
              (const char*),
              (override));

 private:
  DISALLOW_COPY_AND_ASSIGN(MockUdev);
};

}  // namespace brillo

#endif  // LIBBRILLO_BRILLO_UDEV_MOCK_UDEV_H_
