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

#include "services/device/public/cpp/test/mock_usb_mojo_device.h"

#include <utility>

namespace device {

MockUsbMojoDevice::~MockUsbMojoDevice() {}

MockUsbMojoDevice::MockUsbMojoDevice() {}

void MockUsbMojoDevice::IsochronousTransferIn(
    uint8_t endpoint_number,
    const std::vector<uint32_t>& packet_lengths,
    uint32_t timeout,
    IsochronousTransferInCallback callback) {
  std::vector<mojom::UsbIsochronousPacket> packets =
      IsochronousTransferInInternal(endpoint_number, packet_lengths, timeout);
  std::vector<mojom::UsbIsochronousPacketPtr> packet_ptrs;
  size_t total_length = 0;
  packet_ptrs.reserve(packets.size());
  for (const auto& packet : packets) {
    total_length += packet.length;
    packet_ptrs.push_back(packet.Clone());
  }
  std::move(callback).Run(std::vector<uint8_t>(total_length),
                          std::move(packet_ptrs));
}

void MockUsbMojoDevice::IsochronousTransferOut(
    uint8_t endpoint_number,
    base::span<const uint8_t> data,
    const std::vector<uint32_t>& packet_lengths,
    uint32_t timeout,
    IsochronousTransferOutCallback callback) {
  std::vector<mojom::UsbIsochronousPacket> packets =
      IsochronousTransferOutInternal(endpoint_number, data, packet_lengths,
                                     timeout);
  std::vector<mojom::UsbIsochronousPacketPtr> packet_ptrs;
  packet_ptrs.reserve(packets.size());
  for (const auto& packet : packets) {
    packet_ptrs.push_back(packet.Clone());
  }
  std::move(callback).Run(std::move(packet_ptrs));
}

}  // namespace device
