chromium/chromecast/device/bluetooth/le/mock_le_scan_manager.h

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

#ifndef CHROMECAST_DEVICE_BLUETOOTH_LE_MOCK_LE_SCAN_MANAGER_H_
#define CHROMECAST_DEVICE_BLUETOOTH_LE_MOCK_LE_SCAN_MANAGER_H_

#include <vector>

#include "base/memory/scoped_refptr.h"
#include "base/task/single_thread_task_runner.h"
#include "chromecast/device/bluetooth/le/le_scan_manager.h"
#include "chromecast/device/bluetooth/le/scan_filter.h"
#include "testing/gmock/include/gmock/gmock.h"

namespace chromecast {
namespace bluetooth {

class MockLeScanManager : public LeScanManager {
 public:
  class MockScanHandle : public ScanHandle {
   public:
    MockScanHandle() = default;
    ~MockScanHandle() override = default;
  };

  MockLeScanManager();
  ~MockLeScanManager() override;

  void AddObserver(Observer* o) override {
    DCHECK(o && !observer_);
    observer_ = o;
  }
  void RemoveObserver(Observer* o) override {
    DCHECK(o && o == observer_);
    observer_ = nullptr;
  }

  MOCK_METHOD(void,
              Initialize,
              (scoped_refptr<base::SingleThreadTaskRunner> io_task_runner),
              (override));
  MOCK_METHOD(void, Finalize, (), (override));
  MOCK_METHOD(std::unique_ptr<ScanHandle>, RequestScan, ());
  void RequestScan(RequestScanCallback cb) override {
    std::move(cb).Run(RequestScan());
  }

  MOCK_METHOD(std::vector<LeScanResult>,
              GetScanResults,
              (std::optional<ScanFilter> scan_filter));
  void GetScanResults(GetScanResultsCallback cb,
                      std::optional<ScanFilter> scan_filter) override {
    std::move(cb).Run(GetScanResults(std::move(scan_filter)));
  }
  MOCK_METHOD(void, ClearScanResults, (), (override));

  Observer* observer_ = nullptr;
};

}  // namespace bluetooth
}  // namespace chromecast

#endif  // CHROMECAST_DEVICE_BLUETOOTH_LE_MOCK_LE_SCAN_MANAGER_H_