blob: a1dd66a012be4828df6185544466856a56db31ae [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// WARNING: THIS FILE IS MACHINE GENERATED. DO NOT EDIT.
// Generated from the banjo.examples.protocolvector banjo file
#pragma once
#include <tuple>
#include <vector>
#include <banjo/examples/protocolvector/cpp/banjo.h>
#include <lib/mock-function/mock-function.h>
namespace ddk {
// This class mocks a device by providing a vector_of_vectors_protocol_t.
// Users can set expectations on how the protocol ops are called and what values they return. After
// the test, use VerifyAndClear to reset the object and verify that all expectations were satisfied.
// See the following example test:
//
// ddk::MockVectorOfVectors vector_of_vectors;
//
// /* Set some expectations on the device by calling vector_of_vectors.Expect... methods. */
//
// SomeDriver dut(vector_of_vectors.GetProto());
//
// EXPECT_OK(dut.SomeMethod());
// ASSERT_NO_FATAL_FAILURES(vector_of_vectors.VerifyAndClear());
//
// Note that users must provide the equality operator for struct types, for example:
// bool operator==(const a_struct_type& lhs, const a_struct_type& rhs)
class MockVectorOfVectors : ddk::VectorOfVectorsProtocol<MockVectorOfVectors> {
public:
MockVectorOfVectors() : proto_{&vector_of_vectors_protocol_ops_, this} {}
virtual ~MockVectorOfVectors() {}
const vector_of_vectors_protocol_t* GetProto() const { return &proto_; }
virtual MockVectorOfVectors& ExpectBool(std::vector<bool> b, std::vector<bool> out_b) {
mock_bool_.ExpectCall({std::move(out_b)}, std::move(b));
return *this;
}
virtual MockVectorOfVectors& ExpectInt8(std::vector<int8_t> i8, std::vector<int8_t> out_i8) {
mock_int8_.ExpectCall({std::move(out_i8)}, std::move(i8));
return *this;
}
virtual MockVectorOfVectors& ExpectInt16(std::vector<int16_t> i16, std::vector<int16_t> out_i16) {
mock_int16_.ExpectCall({std::move(out_i16)}, std::move(i16));
return *this;
}
virtual MockVectorOfVectors& ExpectInt32(std::vector<int32_t> i32, std::vector<int32_t> out_i32) {
mock_int32_.ExpectCall({std::move(out_i32)}, std::move(i32));
return *this;
}
virtual MockVectorOfVectors& ExpectInt64(std::vector<int64_t> i64, std::vector<int64_t> out_i64) {
mock_int64_.ExpectCall({std::move(out_i64)}, std::move(i64));
return *this;
}
virtual MockVectorOfVectors& ExpectUint8(std::vector<uint8_t> u8, std::vector<uint8_t> out_u8) {
mock_uint8_.ExpectCall({std::move(out_u8)}, std::move(u8));
return *this;
}
virtual MockVectorOfVectors& ExpectUint16(std::vector<uint16_t> u16, std::vector<uint16_t> out_u16) {
mock_uint16_.ExpectCall({std::move(out_u16)}, std::move(u16));
return *this;
}
virtual MockVectorOfVectors& ExpectUint32(std::vector<uint32_t> u32, std::vector<uint32_t> out_u32) {
mock_uint32_.ExpectCall({std::move(out_u32)}, std::move(u32));
return *this;
}
virtual MockVectorOfVectors& ExpectUint64(std::vector<uint64_t> u64, std::vector<uint64_t> out_u64) {
mock_uint64_.ExpectCall({std::move(out_u64)}, std::move(u64));
return *this;
}
virtual MockVectorOfVectors& ExpectFloat32(std::vector<float> f32, std::vector<float> out_f32) {
mock_float32_.ExpectCall({std::move(out_f32)}, std::move(f32));
return *this;
}
virtual MockVectorOfVectors& ExpectFloat64(std::vector<double> u64, std::vector<double> out_f64) {
mock_float64_.ExpectCall({std::move(out_f64)}, std::move(u64));
return *this;
}
virtual MockVectorOfVectors& ExpectHandle(std::vector<zx_handle_t> u64, std::vector<zx_handle_t> out_f64) {
mock_handle_.ExpectCall({std::move(out_f64)}, std::move(u64));
return *this;
}
void VerifyAndClear() {
mock_bool_.VerifyAndClear();
mock_int8_.VerifyAndClear();
mock_int16_.VerifyAndClear();
mock_int32_.VerifyAndClear();
mock_int64_.VerifyAndClear();
mock_uint8_.VerifyAndClear();
mock_uint16_.VerifyAndClear();
mock_uint32_.VerifyAndClear();
mock_uint64_.VerifyAndClear();
mock_float32_.VerifyAndClear();
mock_float64_.VerifyAndClear();
mock_handle_.VerifyAndClear();
}
virtual void VectorOfVectorsBool(const bool* b_list, size_t b_count, bool* out_b_list, size_t b_count, size_t* out_b_actual) {
std::tuple<std::vector<bool>> ret = mock_bool_.Call(std::vector<bool>(b_list, b_list + b_count));
*out_b_actual = std::min<size_t>(std::get<0>(ret).size(), b_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_b_actual, out_b_list);
}
virtual void VectorOfVectorsInt8(const int8_t* i8_list, size_t i8_count, int8_t* out_i8_list, size_t i8_count, size_t* out_i8_actual) {
std::tuple<std::vector<int8_t>> ret = mock_int8_.Call(std::vector<int8_t>(i8_list, i8_list + i8_count));
*out_i8_actual = std::min<size_t>(std::get<0>(ret).size(), i8_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_i8_actual, out_i8_list);
}
virtual void VectorOfVectorsInt16(const int16_t* i16_list, size_t i16_count, int16_t* out_i16_list, size_t i16_count, size_t* out_i16_actual) {
std::tuple<std::vector<int16_t>> ret = mock_int16_.Call(std::vector<int16_t>(i16_list, i16_list + i16_count));
*out_i16_actual = std::min<size_t>(std::get<0>(ret).size(), i16_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_i16_actual, out_i16_list);
}
virtual void VectorOfVectorsInt32(const int32_t* i32_list, size_t i32_count, int32_t* out_i32_list, size_t i32_count, size_t* out_i32_actual) {
std::tuple<std::vector<int32_t>> ret = mock_int32_.Call(std::vector<int32_t>(i32_list, i32_list + i32_count));
*out_i32_actual = std::min<size_t>(std::get<0>(ret).size(), i32_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_i32_actual, out_i32_list);
}
virtual void VectorOfVectorsInt64(const int64_t* i64_list, size_t i64_count, int64_t* out_i64_list, size_t i64_count, size_t* out_i64_actual) {
std::tuple<std::vector<int64_t>> ret = mock_int64_.Call(std::vector<int64_t>(i64_list, i64_list + i64_count));
*out_i64_actual = std::min<size_t>(std::get<0>(ret).size(), i64_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_i64_actual, out_i64_list);
}
virtual void VectorOfVectorsUint8(const uint8_t* u8_list, size_t u8_count, uint8_t* out_u8_list, size_t u8_count, size_t* out_u8_actual) {
std::tuple<std::vector<uint8_t>> ret = mock_uint8_.Call(std::vector<uint8_t>(u8_list, u8_list + u8_count));
*out_u8_actual = std::min<size_t>(std::get<0>(ret).size(), u8_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_u8_actual, out_u8_list);
}
virtual void VectorOfVectorsUint16(const uint16_t* u16_list, size_t u16_count, uint16_t* out_u16_list, size_t u16_count, size_t* out_u16_actual) {
std::tuple<std::vector<uint16_t>> ret = mock_uint16_.Call(std::vector<uint16_t>(u16_list, u16_list + u16_count));
*out_u16_actual = std::min<size_t>(std::get<0>(ret).size(), u16_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_u16_actual, out_u16_list);
}
virtual void VectorOfVectorsUint32(const uint32_t* u32_list, size_t u32_count, uint32_t* out_u32_list, size_t u32_count, size_t* out_u32_actual) {
std::tuple<std::vector<uint32_t>> ret = mock_uint32_.Call(std::vector<uint32_t>(u32_list, u32_list + u32_count));
*out_u32_actual = std::min<size_t>(std::get<0>(ret).size(), u32_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_u32_actual, out_u32_list);
}
virtual void VectorOfVectorsUint64(const uint64_t* u64_list, size_t u64_count, uint64_t* out_u64_list, size_t u64_count, size_t* out_u64_actual) {
std::tuple<std::vector<uint64_t>> ret = mock_uint64_.Call(std::vector<uint64_t>(u64_list, u64_list + u64_count));
*out_u64_actual = std::min<size_t>(std::get<0>(ret).size(), u64_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_u64_actual, out_u64_list);
}
virtual void VectorOfVectorsFloat32(const float* f32_list, size_t f32_count, float* out_f32_list, size_t f32_count, size_t* out_f32_actual) {
std::tuple<std::vector<float>> ret = mock_float32_.Call(std::vector<float>(f32_list, f32_list + f32_count));
*out_f32_actual = std::min<size_t>(std::get<0>(ret).size(), f32_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_f32_actual, out_f32_list);
}
virtual void VectorOfVectorsFloat64(const double* u64_list, size_t u64_count, double* out_f64_list, size_t f64_count, size_t* out_f64_actual) {
std::tuple<std::vector<double>> ret = mock_float64_.Call(std::vector<double>(u64_list, u64_list + u64_count));
*out_f64_actual = std::min<size_t>(std::get<0>(ret).size(), f64_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_f64_actual, out_f64_list);
}
virtual void VectorOfVectorsHandle(const zx_handle_t* u64_list, size_t u64_count, zx_handle_t* out_f64_list, size_t f64_count, size_t* out_f64_actual) {
std::tuple<std::vector<zx_handle_t>> ret = mock_handle_.Call(std::vector<zx_handle_t>(u64_list, u64_list + u64_count));
*out_f64_actual = std::min<size_t>(std::get<0>(ret).size(), f64_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_f64_actual, out_f64_list);
}
mock_function::MockFunction<std::tuple<std::vector<bool>>, std::vector<bool>>& mock_bool() { return mock_bool_; }
mock_function::MockFunction<std::tuple<std::vector<int8_t>>, std::vector<int8_t>>& mock_int8() { return mock_int8_; }
mock_function::MockFunction<std::tuple<std::vector<int16_t>>, std::vector<int16_t>>& mock_int16() { return mock_int16_; }
mock_function::MockFunction<std::tuple<std::vector<int32_t>>, std::vector<int32_t>>& mock_int32() { return mock_int32_; }
mock_function::MockFunction<std::tuple<std::vector<int64_t>>, std::vector<int64_t>>& mock_int64() { return mock_int64_; }
mock_function::MockFunction<std::tuple<std::vector<uint8_t>>, std::vector<uint8_t>>& mock_uint8() { return mock_uint8_; }
mock_function::MockFunction<std::tuple<std::vector<uint16_t>>, std::vector<uint16_t>>& mock_uint16() { return mock_uint16_; }
mock_function::MockFunction<std::tuple<std::vector<uint32_t>>, std::vector<uint32_t>>& mock_uint32() { return mock_uint32_; }
mock_function::MockFunction<std::tuple<std::vector<uint64_t>>, std::vector<uint64_t>>& mock_uint64() { return mock_uint64_; }
mock_function::MockFunction<std::tuple<std::vector<float>>, std::vector<float>>& mock_float32() { return mock_float32_; }
mock_function::MockFunction<std::tuple<std::vector<double>>, std::vector<double>>& mock_float64() { return mock_float64_; }
mock_function::MockFunction<std::tuple<std::vector<zx_handle_t>>, std::vector<zx_handle_t>>& mock_handle() { return mock_handle_; }
protected:
mock_function::MockFunction<std::tuple<std::vector<bool>>, std::vector<bool>> mock_bool_;
mock_function::MockFunction<std::tuple<std::vector<int8_t>>, std::vector<int8_t>> mock_int8_;
mock_function::MockFunction<std::tuple<std::vector<int16_t>>, std::vector<int16_t>> mock_int16_;
mock_function::MockFunction<std::tuple<std::vector<int32_t>>, std::vector<int32_t>> mock_int32_;
mock_function::MockFunction<std::tuple<std::vector<int64_t>>, std::vector<int64_t>> mock_int64_;
mock_function::MockFunction<std::tuple<std::vector<uint8_t>>, std::vector<uint8_t>> mock_uint8_;
mock_function::MockFunction<std::tuple<std::vector<uint16_t>>, std::vector<uint16_t>> mock_uint16_;
mock_function::MockFunction<std::tuple<std::vector<uint32_t>>, std::vector<uint32_t>> mock_uint32_;
mock_function::MockFunction<std::tuple<std::vector<uint64_t>>, std::vector<uint64_t>> mock_uint64_;
mock_function::MockFunction<std::tuple<std::vector<float>>, std::vector<float>> mock_float32_;
mock_function::MockFunction<std::tuple<std::vector<double>>, std::vector<double>> mock_float64_;
mock_function::MockFunction<std::tuple<std::vector<zx_handle_t>>, std::vector<zx_handle_t>> mock_handle_;
private:
const vector_of_vectors_protocol_t proto_;
};
// This class mocks a device by providing a vector_protocol_t.
// Users can set expectations on how the protocol ops are called and what values they return. After
// the test, use VerifyAndClear to reset the object and verify that all expectations were satisfied.
// See the following example test:
//
// ddk::MockVector vector;
//
// /* Set some expectations on the device by calling vector.Expect... methods. */
//
// SomeDriver dut(vector.GetProto());
//
// EXPECT_OK(dut.SomeMethod());
// ASSERT_NO_FATAL_FAILURES(vector.VerifyAndClear());
//
// Note that users must provide the equality operator for struct types, for example:
// bool operator==(const a_struct_type& lhs, const a_struct_type& rhs)
class MockVector : ddk::VectorProtocol<MockVector> {
public:
MockVector() : proto_{&vector_protocol_ops_, this} {}
virtual ~MockVector() {}
const vector_protocol_t* GetProto() const { return &proto_; }
virtual MockVector& ExpectBool(std::vector<bool> b, std::vector<bool> out_b) {
mock_bool_.ExpectCall({std::move(out_b)}, std::move(b));
return *this;
}
virtual MockVector& ExpectInt8(std::vector<int8_t> i8, std::vector<int8_t> out_i8) {
mock_int8_.ExpectCall({std::move(out_i8)}, std::move(i8));
return *this;
}
virtual MockVector& ExpectInt16(std::vector<int16_t> i16, std::vector<int16_t> out_i16) {
mock_int16_.ExpectCall({std::move(out_i16)}, std::move(i16));
return *this;
}
virtual MockVector& ExpectInt32(std::vector<int32_t> i32, std::vector<int32_t> out_i32) {
mock_int32_.ExpectCall({std::move(out_i32)}, std::move(i32));
return *this;
}
virtual MockVector& ExpectInt64(std::vector<int64_t> i64, std::vector<int64_t> out_i64) {
mock_int64_.ExpectCall({std::move(out_i64)}, std::move(i64));
return *this;
}
virtual MockVector& ExpectUint8(std::vector<uint8_t> u8, std::vector<uint8_t> out_u8) {
mock_uint8_.ExpectCall({std::move(out_u8)}, std::move(u8));
return *this;
}
virtual MockVector& ExpectUint16(std::vector<uint16_t> u16, std::vector<uint16_t> out_u16) {
mock_uint16_.ExpectCall({std::move(out_u16)}, std::move(u16));
return *this;
}
virtual MockVector& ExpectUint32(std::vector<uint32_t> u32, std::vector<uint32_t> out_u32) {
mock_uint32_.ExpectCall({std::move(out_u32)}, std::move(u32));
return *this;
}
virtual MockVector& ExpectUint64(std::vector<uint64_t> u64, std::vector<uint64_t> out_u64) {
mock_uint64_.ExpectCall({std::move(out_u64)}, std::move(u64));
return *this;
}
virtual MockVector& ExpectFloat32(std::vector<float> f32, std::vector<float> out_f32) {
mock_float32_.ExpectCall({std::move(out_f32)}, std::move(f32));
return *this;
}
virtual MockVector& ExpectFloat64(std::vector<double> u64, std::vector<double> out_f64) {
mock_float64_.ExpectCall({std::move(out_f64)}, std::move(u64));
return *this;
}
virtual MockVector& ExpectHandle(std::vector<zx_handle_t> u64, std::vector<zx_handle_t> out_f64) {
mock_handle_.ExpectCall({std::move(out_f64)}, std::move(u64));
return *this;
}
void VerifyAndClear() {
mock_bool_.VerifyAndClear();
mock_int8_.VerifyAndClear();
mock_int16_.VerifyAndClear();
mock_int32_.VerifyAndClear();
mock_int64_.VerifyAndClear();
mock_uint8_.VerifyAndClear();
mock_uint16_.VerifyAndClear();
mock_uint32_.VerifyAndClear();
mock_uint64_.VerifyAndClear();
mock_float32_.VerifyAndClear();
mock_float64_.VerifyAndClear();
mock_handle_.VerifyAndClear();
}
virtual void VectorBool(const bool* b_list, size_t b_count, bool* out_b_list, size_t b_count, size_t* out_b_actual) {
std::tuple<std::vector<bool>> ret = mock_bool_.Call(std::vector<bool>(b_list, b_list + b_count));
*out_b_actual = std::min<size_t>(std::get<0>(ret).size(), b_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_b_actual, out_b_list);
}
virtual void VectorInt8(const int8_t* i8_list, size_t i8_count, int8_t* out_i8_list, size_t i8_count, size_t* out_i8_actual) {
std::tuple<std::vector<int8_t>> ret = mock_int8_.Call(std::vector<int8_t>(i8_list, i8_list + i8_count));
*out_i8_actual = std::min<size_t>(std::get<0>(ret).size(), i8_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_i8_actual, out_i8_list);
}
virtual void VectorInt16(const int16_t* i16_list, size_t i16_count, int16_t* out_i16_list, size_t i16_count, size_t* out_i16_actual) {
std::tuple<std::vector<int16_t>> ret = mock_int16_.Call(std::vector<int16_t>(i16_list, i16_list + i16_count));
*out_i16_actual = std::min<size_t>(std::get<0>(ret).size(), i16_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_i16_actual, out_i16_list);
}
virtual void VectorInt32(const int32_t* i32_list, size_t i32_count, int32_t* out_i32_list, size_t i32_count, size_t* out_i32_actual) {
std::tuple<std::vector<int32_t>> ret = mock_int32_.Call(std::vector<int32_t>(i32_list, i32_list + i32_count));
*out_i32_actual = std::min<size_t>(std::get<0>(ret).size(), i32_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_i32_actual, out_i32_list);
}
virtual void VectorInt64(const int64_t* i64_list, size_t i64_count, int64_t* out_i64_list, size_t i64_count, size_t* out_i64_actual) {
std::tuple<std::vector<int64_t>> ret = mock_int64_.Call(std::vector<int64_t>(i64_list, i64_list + i64_count));
*out_i64_actual = std::min<size_t>(std::get<0>(ret).size(), i64_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_i64_actual, out_i64_list);
}
virtual void VectorUint8(const uint8_t* u8_list, size_t u8_count, uint8_t* out_u8_list, size_t u8_count, size_t* out_u8_actual) {
std::tuple<std::vector<uint8_t>> ret = mock_uint8_.Call(std::vector<uint8_t>(u8_list, u8_list + u8_count));
*out_u8_actual = std::min<size_t>(std::get<0>(ret).size(), u8_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_u8_actual, out_u8_list);
}
virtual void VectorUint16(const uint16_t* u16_list, size_t u16_count, uint16_t* out_u16_list, size_t u16_count, size_t* out_u16_actual) {
std::tuple<std::vector<uint16_t>> ret = mock_uint16_.Call(std::vector<uint16_t>(u16_list, u16_list + u16_count));
*out_u16_actual = std::min<size_t>(std::get<0>(ret).size(), u16_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_u16_actual, out_u16_list);
}
virtual void VectorUint32(const uint32_t* u32_list, size_t u32_count, uint32_t* out_u32_list, size_t u32_count, size_t* out_u32_actual) {
std::tuple<std::vector<uint32_t>> ret = mock_uint32_.Call(std::vector<uint32_t>(u32_list, u32_list + u32_count));
*out_u32_actual = std::min<size_t>(std::get<0>(ret).size(), u32_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_u32_actual, out_u32_list);
}
virtual void VectorUint64(const uint64_t* u64_list, size_t u64_count, uint64_t* out_u64_list, size_t u64_count, size_t* out_u64_actual) {
std::tuple<std::vector<uint64_t>> ret = mock_uint64_.Call(std::vector<uint64_t>(u64_list, u64_list + u64_count));
*out_u64_actual = std::min<size_t>(std::get<0>(ret).size(), u64_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_u64_actual, out_u64_list);
}
virtual void VectorFloat32(const float* f32_list, size_t f32_count, float* out_f32_list, size_t f32_count, size_t* out_f32_actual) {
std::tuple<std::vector<float>> ret = mock_float32_.Call(std::vector<float>(f32_list, f32_list + f32_count));
*out_f32_actual = std::min<size_t>(std::get<0>(ret).size(), f32_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_f32_actual, out_f32_list);
}
virtual void VectorFloat64(const double* u64_list, size_t u64_count, double* out_f64_list, size_t f64_count, size_t* out_f64_actual) {
std::tuple<std::vector<double>> ret = mock_float64_.Call(std::vector<double>(u64_list, u64_list + u64_count));
*out_f64_actual = std::min<size_t>(std::get<0>(ret).size(), f64_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_f64_actual, out_f64_list);
}
virtual void VectorHandle(const zx_handle_t* u64_list, size_t u64_count, zx_handle_t* out_f64_list, size_t f64_count, size_t* out_f64_actual) {
std::tuple<std::vector<zx_handle_t>> ret = mock_handle_.Call(std::vector<zx_handle_t>(u64_list, u64_list + u64_count));
*out_f64_actual = std::min<size_t>(std::get<0>(ret).size(), f64_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_f64_actual, out_f64_list);
}
mock_function::MockFunction<std::tuple<std::vector<bool>>, std::vector<bool>>& mock_bool() { return mock_bool_; }
mock_function::MockFunction<std::tuple<std::vector<int8_t>>, std::vector<int8_t>>& mock_int8() { return mock_int8_; }
mock_function::MockFunction<std::tuple<std::vector<int16_t>>, std::vector<int16_t>>& mock_int16() { return mock_int16_; }
mock_function::MockFunction<std::tuple<std::vector<int32_t>>, std::vector<int32_t>>& mock_int32() { return mock_int32_; }
mock_function::MockFunction<std::tuple<std::vector<int64_t>>, std::vector<int64_t>>& mock_int64() { return mock_int64_; }
mock_function::MockFunction<std::tuple<std::vector<uint8_t>>, std::vector<uint8_t>>& mock_uint8() { return mock_uint8_; }
mock_function::MockFunction<std::tuple<std::vector<uint16_t>>, std::vector<uint16_t>>& mock_uint16() { return mock_uint16_; }
mock_function::MockFunction<std::tuple<std::vector<uint32_t>>, std::vector<uint32_t>>& mock_uint32() { return mock_uint32_; }
mock_function::MockFunction<std::tuple<std::vector<uint64_t>>, std::vector<uint64_t>>& mock_uint64() { return mock_uint64_; }
mock_function::MockFunction<std::tuple<std::vector<float>>, std::vector<float>>& mock_float32() { return mock_float32_; }
mock_function::MockFunction<std::tuple<std::vector<double>>, std::vector<double>>& mock_float64() { return mock_float64_; }
mock_function::MockFunction<std::tuple<std::vector<zx_handle_t>>, std::vector<zx_handle_t>>& mock_handle() { return mock_handle_; }
protected:
mock_function::MockFunction<std::tuple<std::vector<bool>>, std::vector<bool>> mock_bool_;
mock_function::MockFunction<std::tuple<std::vector<int8_t>>, std::vector<int8_t>> mock_int8_;
mock_function::MockFunction<std::tuple<std::vector<int16_t>>, std::vector<int16_t>> mock_int16_;
mock_function::MockFunction<std::tuple<std::vector<int32_t>>, std::vector<int32_t>> mock_int32_;
mock_function::MockFunction<std::tuple<std::vector<int64_t>>, std::vector<int64_t>> mock_int64_;
mock_function::MockFunction<std::tuple<std::vector<uint8_t>>, std::vector<uint8_t>> mock_uint8_;
mock_function::MockFunction<std::tuple<std::vector<uint16_t>>, std::vector<uint16_t>> mock_uint16_;
mock_function::MockFunction<std::tuple<std::vector<uint32_t>>, std::vector<uint32_t>> mock_uint32_;
mock_function::MockFunction<std::tuple<std::vector<uint64_t>>, std::vector<uint64_t>> mock_uint64_;
mock_function::MockFunction<std::tuple<std::vector<float>>, std::vector<float>> mock_float32_;
mock_function::MockFunction<std::tuple<std::vector<double>>, std::vector<double>> mock_float64_;
mock_function::MockFunction<std::tuple<std::vector<zx_handle_t>>, std::vector<zx_handle_t>> mock_handle_;
private:
const vector_protocol_t proto_;
};
// This class mocks a device by providing a vector2_protocol_t.
// Users can set expectations on how the protocol ops are called and what values they return. After
// the test, use VerifyAndClear to reset the object and verify that all expectations were satisfied.
// See the following example test:
//
// ddk::MockVector2 vector2;
//
// /* Set some expectations on the device by calling vector2.Expect... methods. */
//
// SomeDriver dut(vector2.GetProto());
//
// EXPECT_OK(dut.SomeMethod());
// ASSERT_NO_FATAL_FAILURES(vector2.VerifyAndClear());
//
// Note that users must provide the equality operator for struct types, for example:
// bool operator==(const a_struct_type& lhs, const a_struct_type& rhs)
class MockVector2 : ddk::Vector2Protocol<MockVector2> {
public:
MockVector2() : proto_{&vector2_protocol_ops_, this} {}
virtual ~MockVector2() {}
const vector2_protocol_t* GetProto() const { return &proto_; }
virtual MockVector2& ExpectBool(std::vector<bool> b, std::vector<bool> out_b) {
mock_bool_.ExpectCall({std::move(out_b)}, std::move(b));
return *this;
}
virtual MockVector2& ExpectInt8(std::vector<int8_t> i8, std::vector<int8_t> out_i8) {
mock_int8_.ExpectCall({std::move(out_i8)}, std::move(i8));
return *this;
}
virtual MockVector2& ExpectInt16(std::vector<int16_t> i16, std::vector<int16_t> out_i16) {
mock_int16_.ExpectCall({std::move(out_i16)}, std::move(i16));
return *this;
}
virtual MockVector2& ExpectInt32(std::vector<int32_t> i32, std::vector<int32_t> out_i32) {
mock_int32_.ExpectCall({std::move(out_i32)}, std::move(i32));
return *this;
}
virtual MockVector2& ExpectInt64(std::vector<int64_t> i64, std::vector<int64_t> out_i64) {
mock_int64_.ExpectCall({std::move(out_i64)}, std::move(i64));
return *this;
}
virtual MockVector2& ExpectUint8(std::vector<uint8_t> u8, std::vector<uint8_t> out_u8) {
mock_uint8_.ExpectCall({std::move(out_u8)}, std::move(u8));
return *this;
}
virtual MockVector2& ExpectUint16(std::vector<uint16_t> u16, std::vector<uint16_t> out_u16) {
mock_uint16_.ExpectCall({std::move(out_u16)}, std::move(u16));
return *this;
}
virtual MockVector2& ExpectUint32(std::vector<uint32_t> u32, std::vector<uint32_t> out_u32) {
mock_uint32_.ExpectCall({std::move(out_u32)}, std::move(u32));
return *this;
}
virtual MockVector2& ExpectUint64(std::vector<uint64_t> u64, std::vector<uint64_t> out_u64) {
mock_uint64_.ExpectCall({std::move(out_u64)}, std::move(u64));
return *this;
}
virtual MockVector2& ExpectFloat32(std::vector<float> f32, std::vector<float> out_f32) {
mock_float32_.ExpectCall({std::move(out_f32)}, std::move(f32));
return *this;
}
virtual MockVector2& ExpectFloat64(std::vector<double> u64, std::vector<double> out_f64) {
mock_float64_.ExpectCall({std::move(out_f64)}, std::move(u64));
return *this;
}
virtual MockVector2& ExpectHandle(std::vector<zx_handle_t> u64, std::vector<zx_handle_t> out_f64) {
mock_handle_.ExpectCall({std::move(out_f64)}, std::move(u64));
return *this;
}
void VerifyAndClear() {
mock_bool_.VerifyAndClear();
mock_int8_.VerifyAndClear();
mock_int16_.VerifyAndClear();
mock_int32_.VerifyAndClear();
mock_int64_.VerifyAndClear();
mock_uint8_.VerifyAndClear();
mock_uint16_.VerifyAndClear();
mock_uint32_.VerifyAndClear();
mock_uint64_.VerifyAndClear();
mock_float32_.VerifyAndClear();
mock_float64_.VerifyAndClear();
mock_handle_.VerifyAndClear();
}
virtual void Vector2Bool(const bool* b_list, size_t b_count, bool* out_b_list, size_t b_count, size_t* out_b_actual) {
std::tuple<std::vector<bool>> ret = mock_bool_.Call(std::vector<bool>(b_list, b_list + b_count));
*out_b_actual = std::min<size_t>(std::get<0>(ret).size(), b_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_b_actual, out_b_list);
}
virtual void Vector2Int8(const int8_t* i8_list, size_t i8_count, int8_t* out_i8_list, size_t i8_count, size_t* out_i8_actual) {
std::tuple<std::vector<int8_t>> ret = mock_int8_.Call(std::vector<int8_t>(i8_list, i8_list + i8_count));
*out_i8_actual = std::min<size_t>(std::get<0>(ret).size(), i8_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_i8_actual, out_i8_list);
}
virtual void Vector2Int16(const int16_t* i16_list, size_t i16_count, int16_t* out_i16_list, size_t i16_count, size_t* out_i16_actual) {
std::tuple<std::vector<int16_t>> ret = mock_int16_.Call(std::vector<int16_t>(i16_list, i16_list + i16_count));
*out_i16_actual = std::min<size_t>(std::get<0>(ret).size(), i16_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_i16_actual, out_i16_list);
}
virtual void Vector2Int32(const int32_t* i32_list, size_t i32_count, int32_t* out_i32_list, size_t i32_count, size_t* out_i32_actual) {
std::tuple<std::vector<int32_t>> ret = mock_int32_.Call(std::vector<int32_t>(i32_list, i32_list + i32_count));
*out_i32_actual = std::min<size_t>(std::get<0>(ret).size(), i32_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_i32_actual, out_i32_list);
}
virtual void Vector2Int64(const int64_t* i64_list, size_t i64_count, int64_t* out_i64_list, size_t i64_count, size_t* out_i64_actual) {
std::tuple<std::vector<int64_t>> ret = mock_int64_.Call(std::vector<int64_t>(i64_list, i64_list + i64_count));
*out_i64_actual = std::min<size_t>(std::get<0>(ret).size(), i64_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_i64_actual, out_i64_list);
}
virtual void Vector2Uint8(const uint8_t* u8_list, size_t u8_count, uint8_t* out_u8_list, size_t u8_count, size_t* out_u8_actual) {
std::tuple<std::vector<uint8_t>> ret = mock_uint8_.Call(std::vector<uint8_t>(u8_list, u8_list + u8_count));
*out_u8_actual = std::min<size_t>(std::get<0>(ret).size(), u8_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_u8_actual, out_u8_list);
}
virtual void Vector2Uint16(const uint16_t* u16_list, size_t u16_count, uint16_t* out_u16_list, size_t u16_count, size_t* out_u16_actual) {
std::tuple<std::vector<uint16_t>> ret = mock_uint16_.Call(std::vector<uint16_t>(u16_list, u16_list + u16_count));
*out_u16_actual = std::min<size_t>(std::get<0>(ret).size(), u16_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_u16_actual, out_u16_list);
}
virtual void Vector2Uint32(const uint32_t* u32_list, size_t u32_count, uint32_t* out_u32_list, size_t u32_count, size_t* out_u32_actual) {
std::tuple<std::vector<uint32_t>> ret = mock_uint32_.Call(std::vector<uint32_t>(u32_list, u32_list + u32_count));
*out_u32_actual = std::min<size_t>(std::get<0>(ret).size(), u32_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_u32_actual, out_u32_list);
}
virtual void Vector2Uint64(const uint64_t* u64_list, size_t u64_count, uint64_t* out_u64_list, size_t u64_count, size_t* out_u64_actual) {
std::tuple<std::vector<uint64_t>> ret = mock_uint64_.Call(std::vector<uint64_t>(u64_list, u64_list + u64_count));
*out_u64_actual = std::min<size_t>(std::get<0>(ret).size(), u64_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_u64_actual, out_u64_list);
}
virtual void Vector2Float32(const float* f32_list, size_t f32_count, float* out_f32_list, size_t f32_count, size_t* out_f32_actual) {
std::tuple<std::vector<float>> ret = mock_float32_.Call(std::vector<float>(f32_list, f32_list + f32_count));
*out_f32_actual = std::min<size_t>(std::get<0>(ret).size(), f32_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_f32_actual, out_f32_list);
}
virtual void Vector2Float64(const double* u64_list, size_t u64_count, double* out_f64_list, size_t f64_count, size_t* out_f64_actual) {
std::tuple<std::vector<double>> ret = mock_float64_.Call(std::vector<double>(u64_list, u64_list + u64_count));
*out_f64_actual = std::min<size_t>(std::get<0>(ret).size(), f64_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_f64_actual, out_f64_list);
}
virtual void Vector2Handle(const zx_handle_t* u64_list, size_t u64_count, zx_handle_t* out_f64_list, size_t f64_count, size_t* out_f64_actual) {
std::tuple<std::vector<zx_handle_t>> ret = mock_handle_.Call(std::vector<zx_handle_t>(u64_list, u64_list + u64_count));
*out_f64_actual = std::min<size_t>(std::get<0>(ret).size(), f64_count);
std::move(std::get<0>(ret).begin(), std::get<0>(ret).begin() + *out_f64_actual, out_f64_list);
}
mock_function::MockFunction<std::tuple<std::vector<bool>>, std::vector<bool>>& mock_bool() { return mock_bool_; }
mock_function::MockFunction<std::tuple<std::vector<int8_t>>, std::vector<int8_t>>& mock_int8() { return mock_int8_; }
mock_function::MockFunction<std::tuple<std::vector<int16_t>>, std::vector<int16_t>>& mock_int16() { return mock_int16_; }
mock_function::MockFunction<std::tuple<std::vector<int32_t>>, std::vector<int32_t>>& mock_int32() { return mock_int32_; }
mock_function::MockFunction<std::tuple<std::vector<int64_t>>, std::vector<int64_t>>& mock_int64() { return mock_int64_; }
mock_function::MockFunction<std::tuple<std::vector<uint8_t>>, std::vector<uint8_t>>& mock_uint8() { return mock_uint8_; }
mock_function::MockFunction<std::tuple<std::vector<uint16_t>>, std::vector<uint16_t>>& mock_uint16() { return mock_uint16_; }
mock_function::MockFunction<std::tuple<std::vector<uint32_t>>, std::vector<uint32_t>>& mock_uint32() { return mock_uint32_; }
mock_function::MockFunction<std::tuple<std::vector<uint64_t>>, std::vector<uint64_t>>& mock_uint64() { return mock_uint64_; }
mock_function::MockFunction<std::tuple<std::vector<float>>, std::vector<float>>& mock_float32() { return mock_float32_; }
mock_function::MockFunction<std::tuple<std::vector<double>>, std::vector<double>>& mock_float64() { return mock_float64_; }
mock_function::MockFunction<std::tuple<std::vector<zx_handle_t>>, std::vector<zx_handle_t>>& mock_handle() { return mock_handle_; }
protected:
mock_function::MockFunction<std::tuple<std::vector<bool>>, std::vector<bool>> mock_bool_;
mock_function::MockFunction<std::tuple<std::vector<int8_t>>, std::vector<int8_t>> mock_int8_;
mock_function::MockFunction<std::tuple<std::vector<int16_t>>, std::vector<int16_t>> mock_int16_;
mock_function::MockFunction<std::tuple<std::vector<int32_t>>, std::vector<int32_t>> mock_int32_;
mock_function::MockFunction<std::tuple<std::vector<int64_t>>, std::vector<int64_t>> mock_int64_;
mock_function::MockFunction<std::tuple<std::vector<uint8_t>>, std::vector<uint8_t>> mock_uint8_;
mock_function::MockFunction<std::tuple<std::vector<uint16_t>>, std::vector<uint16_t>> mock_uint16_;
mock_function::MockFunction<std::tuple<std::vector<uint32_t>>, std::vector<uint32_t>> mock_uint32_;
mock_function::MockFunction<std::tuple<std::vector<uint64_t>>, std::vector<uint64_t>> mock_uint64_;
mock_function::MockFunction<std::tuple<std::vector<float>>, std::vector<float>> mock_float32_;
mock_function::MockFunction<std::tuple<std::vector<double>>, std::vector<double>> mock_float64_;
mock_function::MockFunction<std::tuple<std::vector<zx_handle_t>>, std::vector<zx_handle_t>> mock_handle_;
private:
const vector2_protocol_t proto_;
};
} // namespace ddk