mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-08 07:33:33 +00:00
Make Wire tests more strict w.r.t. expectations
This changes Wire tests to produces errors on "uninteresting calls" and flushes mock expectations on client/server flushes so that we control 100% of the order of calls. BUG=941543 Change-Id: I6eabc79dde2abb564e54df90c5c0e615fd4496c6 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/6040 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Kai Ninomiya <kainino@chromium.org>
This commit is contained in:
parent
1ba2cb8589
commit
d754fb2034
@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
#include "mock_dawn.h"
|
#include "mock_dawn.h"
|
||||||
|
|
||||||
|
using namespace testing;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
{% for type in by_category["object"] %}
|
{% for type in by_category["object"] %}
|
||||||
{% for method in native_methods(type) if len(method.arguments) < 10 %}
|
{% for method in native_methods(type) if len(method.arguments) < 10 %}
|
||||||
@ -128,3 +130,9 @@ void ProcTableAsClass::CallFenceOnCompletionCallback(DawnFence fence,
|
|||||||
|
|
||||||
MockProcTable::MockProcTable() {
|
MockProcTable::MockProcTable() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MockProcTable::IgnoreAllReleaseCalls() {
|
||||||
|
{% for type in by_category["object"] %}
|
||||||
|
EXPECT_CALL(*this, {{as_MethodSuffix(type.name, Name("release"))}}(_)).Times(AnyNumber());
|
||||||
|
{% endfor %}
|
||||||
|
}
|
||||||
|
@ -101,6 +101,8 @@ class MockProcTable : public ProcTableAsClass {
|
|||||||
public:
|
public:
|
||||||
MockProcTable();
|
MockProcTable();
|
||||||
|
|
||||||
|
void IgnoreAllReleaseCalls();
|
||||||
|
|
||||||
{% for type in by_category["object"] %}
|
{% for type in by_category["object"] %}
|
||||||
{% for method in type.methods if len(method.arguments) < 10 %}
|
{% for method in type.methods if len(method.arguments) < 10 %}
|
||||||
MOCK_METHOD{{len(method.arguments) + 1}}(
|
MOCK_METHOD{{len(method.arguments) + 1}}(
|
||||||
|
@ -40,8 +40,6 @@ TEST_F(WireArgumentTests, ValueArgument) {
|
|||||||
|
|
||||||
EXPECT_CALL(api, ComputePassEncoderDispatch(apiPass, 1, 2, 3)).Times(1);
|
EXPECT_CALL(api, ComputePassEncoderDispatch(apiPass, 1, 2, 3)).Times(1);
|
||||||
|
|
||||||
EXPECT_CALL(api, CommandEncoderRelease(apiEncoder));
|
|
||||||
EXPECT_CALL(api, ComputePassEncoderRelease(apiPass));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,8 +70,6 @@ TEST_F(WireArgumentTests, ValueArrayArgument) {
|
|||||||
EXPECT_CALL(api,
|
EXPECT_CALL(api,
|
||||||
ComputePassEncoderSetPushConstants(apiPass, DAWN_SHADER_STAGE_BIT_VERTEX, 0, 4,
|
ComputePassEncoderSetPushConstants(apiPass, DAWN_SHADER_STAGE_BIT_VERTEX, 0, 4,
|
||||||
ResultOf(CheckPushConstantValues, Eq(true))));
|
ResultOf(CheckPushConstantValues, Eq(true))));
|
||||||
EXPECT_CALL(api, CommandEncoderRelease(apiEncoder));
|
|
||||||
EXPECT_CALL(api, ComputePassEncoderRelease(apiPass));
|
|
||||||
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
@ -168,8 +164,6 @@ TEST_F(WireArgumentTests, CStringArgument) {
|
|||||||
return desc->vertexStage->entryPoint == std::string("main");
|
return desc->vertexStage->entryPoint == std::string("main");
|
||||||
})))
|
})))
|
||||||
.WillOnce(Return(nullptr));
|
.WillOnce(Return(nullptr));
|
||||||
EXPECT_CALL(api, ShaderModuleRelease(apiVsModule));
|
|
||||||
EXPECT_CALL(api, PipelineLayoutRelease(apiLayout));
|
|
||||||
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
@ -196,9 +190,6 @@ TEST_F(WireArgumentTests, ObjectAsValueArgument) {
|
|||||||
dawnCommandEncoderCopyBufferToBuffer(cmdBufEncoder, buffer, 0, buffer, 4, 4);
|
dawnCommandEncoderCopyBufferToBuffer(cmdBufEncoder, buffer, 0, buffer, 4, 4);
|
||||||
EXPECT_CALL(api, CommandEncoderCopyBufferToBuffer(apiEncoder, apiBuffer, 0, apiBuffer, 4, 4));
|
EXPECT_CALL(api, CommandEncoderCopyBufferToBuffer(apiEncoder, apiBuffer, 0, apiBuffer, 4, 4));
|
||||||
|
|
||||||
EXPECT_CALL(api, CommandEncoderRelease(apiEncoder));
|
|
||||||
EXPECT_CALL(api, BufferRelease(apiBuffer));
|
|
||||||
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,8 +213,6 @@ TEST_F(WireArgumentTests, ObjectsAsPointerArgument) {
|
|||||||
apiCmdBufs[i] = api.GetNewCommandBuffer();
|
apiCmdBufs[i] = api.GetNewCommandBuffer();
|
||||||
EXPECT_CALL(api, CommandEncoderFinish(apiCmdBufEncoder))
|
EXPECT_CALL(api, CommandEncoderFinish(apiCmdBufEncoder))
|
||||||
.WillOnce(Return(apiCmdBufs[i]));
|
.WillOnce(Return(apiCmdBufs[i]));
|
||||||
EXPECT_CALL(api, CommandEncoderRelease(apiCmdBufEncoder));
|
|
||||||
EXPECT_CALL(api, CommandBufferRelease(apiCmdBufs[i]));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create queue
|
// Create queue
|
||||||
@ -239,7 +228,6 @@ TEST_F(WireArgumentTests, ObjectsAsPointerArgument) {
|
|||||||
return cmdBufs[0] == apiCmdBufs[0] && cmdBufs[1] == apiCmdBufs[1];
|
return cmdBufs[0] == apiCmdBufs[0] && cmdBufs[1] == apiCmdBufs[1];
|
||||||
})));
|
})));
|
||||||
|
|
||||||
EXPECT_CALL(api, QueueRelease(apiQueue));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -302,7 +290,6 @@ TEST_F(WireArgumentTests, StructureOfObjectArrayArgument) {
|
|||||||
})))
|
})))
|
||||||
.WillOnce(Return(nullptr));
|
.WillOnce(Return(nullptr));
|
||||||
|
|
||||||
EXPECT_CALL(api, BindGroupLayoutRelease(apiBgl));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -339,7 +326,6 @@ TEST_F(WireArgumentTests, StructureOfStructureArrayArgument) {
|
|||||||
})))
|
})))
|
||||||
.WillOnce(Return(apiBgl));
|
.WillOnce(Return(apiBgl));
|
||||||
|
|
||||||
EXPECT_CALL(api, BindGroupLayoutRelease(apiBgl));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,6 @@ TEST_F(WireBasicTests, CallForwarded) {
|
|||||||
EXPECT_CALL(api, DeviceCreateCommandEncoder(apiDevice))
|
EXPECT_CALL(api, DeviceCreateCommandEncoder(apiDevice))
|
||||||
.WillOnce(Return(apiCmdBufEncoder));
|
.WillOnce(Return(apiCmdBufEncoder));
|
||||||
|
|
||||||
EXPECT_CALL(api, CommandEncoderRelease(apiCmdBufEncoder));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,8 +47,6 @@ TEST_F(WireBasicTests, CreateThenCall) {
|
|||||||
DawnCommandBuffer apiCmdBuf = api.GetNewCommandBuffer();
|
DawnCommandBuffer apiCmdBuf = api.GetNewCommandBuffer();
|
||||||
EXPECT_CALL(api, CommandEncoderFinish(apiCmdBufEncoder)).WillOnce(Return(apiCmdBuf));
|
EXPECT_CALL(api, CommandEncoderFinish(apiCmdBufEncoder)).WillOnce(Return(apiCmdBuf));
|
||||||
|
|
||||||
EXPECT_CALL(api, CommandEncoderRelease(apiCmdBufEncoder));
|
|
||||||
EXPECT_CALL(api, CommandBufferRelease(apiCmdBuf));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,7 +60,6 @@ TEST_F(WireBasicTests, RefCountKeptInClient) {
|
|||||||
DawnCommandEncoder apiCmdBufEncoder = api.GetNewCommandEncoder();
|
DawnCommandEncoder apiCmdBufEncoder = api.GetNewCommandEncoder();
|
||||||
EXPECT_CALL(api, DeviceCreateCommandEncoder(apiDevice))
|
EXPECT_CALL(api, DeviceCreateCommandEncoder(apiDevice))
|
||||||
.WillOnce(Return(apiCmdBufEncoder));
|
.WillOnce(Return(apiCmdBufEncoder));
|
||||||
EXPECT_CALL(api, CommandEncoderRelease(apiCmdBufEncoder));
|
|
||||||
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ namespace {
|
|||||||
DawnCallbackUserdata userdata));
|
DawnCallbackUserdata userdata));
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unique_ptr<MockBufferMapReadCallback> mockBufferMapReadCallback;
|
std::unique_ptr<StrictMock<MockBufferMapReadCallback>> mockBufferMapReadCallback;
|
||||||
void ToMockBufferMapReadCallback(DawnBufferMapAsyncStatus status,
|
void ToMockBufferMapReadCallback(DawnBufferMapAsyncStatus status,
|
||||||
const void* ptr,
|
const void* ptr,
|
||||||
uint32_t dataLength,
|
uint32_t dataLength,
|
||||||
@ -48,7 +48,7 @@ namespace {
|
|||||||
DawnCallbackUserdata userdata));
|
DawnCallbackUserdata userdata));
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unique_ptr<MockBufferMapWriteCallback> mockBufferMapWriteCallback;
|
std::unique_ptr<StrictMock<MockBufferMapWriteCallback>> mockBufferMapWriteCallback;
|
||||||
uint32_t* lastMapWritePointer = nullptr;
|
uint32_t* lastMapWritePointer = nullptr;
|
||||||
void ToMockBufferMapWriteCallback(DawnBufferMapAsyncStatus status,
|
void ToMockBufferMapWriteCallback(DawnBufferMapAsyncStatus status,
|
||||||
void* ptr,
|
void* ptr,
|
||||||
@ -70,8 +70,8 @@ class WireBufferMappingTests : public WireTest {
|
|||||||
void SetUp() override {
|
void SetUp() override {
|
||||||
WireTest::SetUp();
|
WireTest::SetUp();
|
||||||
|
|
||||||
mockBufferMapReadCallback = std::make_unique<MockBufferMapReadCallback>();
|
mockBufferMapReadCallback = std::make_unique<StrictMock<MockBufferMapReadCallback>>();
|
||||||
mockBufferMapWriteCallback = std::make_unique<MockBufferMapWriteCallback>();
|
mockBufferMapWriteCallback = std::make_unique<StrictMock<MockBufferMapWriteCallback>>();
|
||||||
|
|
||||||
{
|
{
|
||||||
DawnBufferDescriptor descriptor;
|
DawnBufferDescriptor descriptor;
|
||||||
@ -83,7 +83,6 @@ class WireBufferMappingTests : public WireTest {
|
|||||||
EXPECT_CALL(api, DeviceCreateBuffer(apiDevice, _))
|
EXPECT_CALL(api, DeviceCreateBuffer(apiDevice, _))
|
||||||
.WillOnce(Return(apiBuffer))
|
.WillOnce(Return(apiBuffer))
|
||||||
.RetiresOnSaturation();
|
.RetiresOnSaturation();
|
||||||
EXPECT_CALL(api, BufferRelease(apiBuffer));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@ -107,6 +106,13 @@ class WireBufferMappingTests : public WireTest {
|
|||||||
mockBufferMapWriteCallback = nullptr;
|
mockBufferMapWriteCallback = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FlushServer() {
|
||||||
|
WireTest::FlushServer();
|
||||||
|
|
||||||
|
Mock::VerifyAndClearExpectations(&mockBufferMapReadCallback);
|
||||||
|
Mock::VerifyAndClearExpectations(&mockBufferMapWriteCallback);
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// A successfully created buffer
|
// A successfully created buffer
|
||||||
DawnBuffer buffer;
|
DawnBuffer buffer;
|
||||||
@ -194,6 +200,9 @@ TEST_F(WireBufferMappingTests, DestroyBeforeReadRequestEnd) {
|
|||||||
.Times(1);
|
.Times(1);
|
||||||
|
|
||||||
dawnBufferRelease(errorBuffer);
|
dawnBufferRelease(errorBuffer);
|
||||||
|
|
||||||
|
FlushClient();
|
||||||
|
FlushServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the map read callback is called with UNKNOWN when the map request would have worked, but
|
// Check the map read callback is called with UNKNOWN when the map request would have worked, but
|
||||||
@ -309,6 +318,8 @@ TEST_F(WireBufferMappingTests, DestroyInsideMapReadCallback) {
|
|||||||
|
|
||||||
FlushServer();
|
FlushServer();
|
||||||
|
|
||||||
|
EXPECT_CALL(api, BufferRelease(apiBuffer));
|
||||||
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -514,5 +525,7 @@ TEST_F(WireBufferMappingTests, DestroyInsideMapWriteCallback) {
|
|||||||
|
|
||||||
FlushServer();
|
FlushServer();
|
||||||
|
|
||||||
|
EXPECT_CALL(api, BufferRelease(apiBuffer));
|
||||||
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ namespace {
|
|||||||
MOCK_METHOD2(Call, void(const char* message, DawnCallbackUserdata userdata));
|
MOCK_METHOD2(Call, void(const char* message, DawnCallbackUserdata userdata));
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unique_ptr<MockDeviceErrorCallback> mockDeviceErrorCallback;
|
std::unique_ptr<StrictMock<MockDeviceErrorCallback>> mockDeviceErrorCallback;
|
||||||
void ToMockDeviceErrorCallback(const char* message, DawnCallbackUserdata userdata) {
|
void ToMockDeviceErrorCallback(const char* message, DawnCallbackUserdata userdata) {
|
||||||
mockDeviceErrorCallback->Call(message, userdata);
|
mockDeviceErrorCallback->Call(message, userdata);
|
||||||
}
|
}
|
||||||
@ -39,7 +39,7 @@ namespace {
|
|||||||
DawnCallbackUserdata userdata2));
|
DawnCallbackUserdata userdata2));
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unique_ptr<MockBuilderErrorCallback> mockBuilderErrorCallback;
|
std::unique_ptr<StrictMock<MockBuilderErrorCallback>> mockBuilderErrorCallback;
|
||||||
void ToMockBuilderErrorCallback(DawnBuilderErrorStatus status,
|
void ToMockBuilderErrorCallback(DawnBuilderErrorStatus status,
|
||||||
const char* message,
|
const char* message,
|
||||||
DawnCallbackUserdata userdata1,
|
DawnCallbackUserdata userdata1,
|
||||||
@ -58,17 +58,23 @@ class WireCallbackTests : public WireTest {
|
|||||||
void SetUp() override {
|
void SetUp() override {
|
||||||
WireTest::SetUp();
|
WireTest::SetUp();
|
||||||
|
|
||||||
mockDeviceErrorCallback = std::make_unique<MockDeviceErrorCallback>();
|
mockDeviceErrorCallback = std::make_unique<StrictMock<MockDeviceErrorCallback>>();
|
||||||
mockBuilderErrorCallback = std::make_unique<MockBuilderErrorCallback>();
|
mockBuilderErrorCallback = std::make_unique<StrictMock<MockBuilderErrorCallback>>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TearDown() override {
|
void TearDown() override {
|
||||||
WireTest::TearDown();
|
WireTest::TearDown();
|
||||||
|
|
||||||
// Delete mocks so that expectations are checked
|
|
||||||
mockDeviceErrorCallback = nullptr;
|
mockDeviceErrorCallback = nullptr;
|
||||||
mockBuilderErrorCallback = nullptr;
|
mockBuilderErrorCallback = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FlushServer() {
|
||||||
|
WireTest::FlushServer();
|
||||||
|
|
||||||
|
Mock::VerifyAndClearExpectations(&mockDeviceErrorCallback);
|
||||||
|
Mock::VerifyAndClearExpectations(&mockBuilderErrorCallback);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Test that we get a success builder error status when no error happens
|
// Test that we get a success builder error status when no error happens
|
||||||
@ -89,8 +95,6 @@ TEST_F(WireCallbackTests, SuccessCallbackOnBuilderSuccess) {
|
|||||||
return apiBuffer;
|
return apiBuffer;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
EXPECT_CALL(api, BufferBuilderRelease(apiBufferBuilder));
|
|
||||||
EXPECT_CALL(api, BufferRelease(apiBuffer));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
|
|
||||||
EXPECT_CALL(*mockBuilderErrorCallback, Call(DAWN_BUILDER_ERROR_STATUS_SUCCESS, _, 1, 2));
|
EXPECT_CALL(*mockBuilderErrorCallback, Call(DAWN_BUILDER_ERROR_STATUS_SUCCESS, _, 1, 2));
|
||||||
@ -157,8 +161,6 @@ TEST_F(WireCallbackTests, SuccessCallbackNotForwardedToDevice) {
|
|||||||
return apiBuffer;
|
return apiBuffer;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
EXPECT_CALL(api, BufferBuilderRelease(apiBufferBuilder));
|
|
||||||
EXPECT_CALL(api, BufferRelease(apiBuffer));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
FlushServer();
|
FlushServer();
|
||||||
}
|
}
|
||||||
@ -182,7 +184,6 @@ TEST_F(WireCallbackTests, ErrorCallbackForwardedToDevice) {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
EXPECT_CALL(api, BufferBuilderRelease(apiBufferBuilder));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
|
|
||||||
EXPECT_CALL(*mockDeviceErrorCallback, Call(_, userdata)).Times(1);
|
EXPECT_CALL(*mockDeviceErrorCallback, Call(_, userdata)).Times(1);
|
||||||
@ -239,8 +240,6 @@ TEST_F(WireCallbackTests, BuilderErrorCallback) {
|
|||||||
return apiBuffer;
|
return apiBuffer;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
EXPECT_CALL(api, BufferBuilderRelease(apiBufferBuilder));
|
|
||||||
EXPECT_CALL(api, BufferRelease(apiBuffer));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
|
|
||||||
// The error callback gets called on the client side
|
// The error callback gets called on the client side
|
||||||
|
@ -25,7 +25,7 @@ namespace {
|
|||||||
MOCK_METHOD2(Call, void(const char* message, DawnCallbackUserdata userdata));
|
MOCK_METHOD2(Call, void(const char* message, DawnCallbackUserdata userdata));
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unique_ptr<MockDeviceErrorCallback> mockDeviceErrorCallback;
|
std::unique_ptr<StrictMock<MockDeviceErrorCallback>> mockDeviceErrorCallback;
|
||||||
void ToMockDeviceErrorCallback(const char* message, DawnCallbackUserdata userdata) {
|
void ToMockDeviceErrorCallback(const char* message, DawnCallbackUserdata userdata) {
|
||||||
mockDeviceErrorCallback->Call(message, userdata);
|
mockDeviceErrorCallback->Call(message, userdata);
|
||||||
}
|
}
|
||||||
@ -35,7 +35,7 @@ namespace {
|
|||||||
MOCK_METHOD2(Call, void(DawnFenceCompletionStatus status, DawnCallbackUserdata userdata));
|
MOCK_METHOD2(Call, void(DawnFenceCompletionStatus status, DawnCallbackUserdata userdata));
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unique_ptr<MockFenceOnCompletionCallback> mockFenceOnCompletionCallback;
|
std::unique_ptr<StrictMock<MockFenceOnCompletionCallback>> mockFenceOnCompletionCallback;
|
||||||
void ToMockFenceOnCompletionCallback(DawnFenceCompletionStatus status,
|
void ToMockFenceOnCompletionCallback(DawnFenceCompletionStatus status,
|
||||||
DawnCallbackUserdata userdata) {
|
DawnCallbackUserdata userdata) {
|
||||||
mockFenceOnCompletionCallback->Call(status, userdata);
|
mockFenceOnCompletionCallback->Call(status, userdata);
|
||||||
@ -52,14 +52,14 @@ class WireFenceTests : public WireTest {
|
|||||||
void SetUp() override {
|
void SetUp() override {
|
||||||
WireTest::SetUp();
|
WireTest::SetUp();
|
||||||
|
|
||||||
mockDeviceErrorCallback = std::make_unique<MockDeviceErrorCallback>();
|
mockDeviceErrorCallback = std::make_unique<StrictMock<MockDeviceErrorCallback>>();
|
||||||
mockFenceOnCompletionCallback = std::make_unique<MockFenceOnCompletionCallback>();
|
mockFenceOnCompletionCallback =
|
||||||
|
std::make_unique<StrictMock<MockFenceOnCompletionCallback>>();
|
||||||
|
|
||||||
{
|
{
|
||||||
queue = dawnDeviceCreateQueue(device);
|
queue = dawnDeviceCreateQueue(device);
|
||||||
apiQueue = api.GetNewQueue();
|
apiQueue = api.GetNewQueue();
|
||||||
EXPECT_CALL(api, DeviceCreateQueue(apiDevice)).WillOnce(Return(apiQueue));
|
EXPECT_CALL(api, DeviceCreateQueue(apiDevice)).WillOnce(Return(apiQueue));
|
||||||
EXPECT_CALL(api, QueueRelease(apiQueue));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@ -71,7 +71,6 @@ class WireFenceTests : public WireTest {
|
|||||||
fence = dawnQueueCreateFence(queue, &descriptor);
|
fence = dawnQueueCreateFence(queue, &descriptor);
|
||||||
|
|
||||||
EXPECT_CALL(api, QueueCreateFence(apiQueue, _)).WillOnce(Return(apiFence));
|
EXPECT_CALL(api, QueueCreateFence(apiQueue, _)).WillOnce(Return(apiFence));
|
||||||
EXPECT_CALL(api, FenceRelease(apiFence));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -79,11 +78,17 @@ class WireFenceTests : public WireTest {
|
|||||||
void TearDown() override {
|
void TearDown() override {
|
||||||
WireTest::TearDown();
|
WireTest::TearDown();
|
||||||
|
|
||||||
// Delete mocks so that expectations are checked
|
|
||||||
mockDeviceErrorCallback = nullptr;
|
mockDeviceErrorCallback = nullptr;
|
||||||
mockFenceOnCompletionCallback = nullptr;
|
mockFenceOnCompletionCallback = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FlushServer() {
|
||||||
|
WireTest::FlushServer();
|
||||||
|
|
||||||
|
Mock::VerifyAndClearExpectations(&mockDeviceErrorCallback);
|
||||||
|
Mock::VerifyAndClearExpectations(&mockFenceOnCompletionCallback);
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void DoQueueSignal(uint64_t signalValue) {
|
void DoQueueSignal(uint64_t signalValue) {
|
||||||
dawnQueueSignal(queue, fence, signalValue);
|
dawnQueueSignal(queue, fence, signalValue);
|
||||||
@ -216,6 +221,9 @@ TEST_F(WireFenceTests, OnCompletionSynchronousValidationSuccess) {
|
|||||||
dawnFenceOnCompletion(fence, 2u, ToMockFenceOnCompletionCallback, 0);
|
dawnFenceOnCompletion(fence, 2u, ToMockFenceOnCompletionCallback, 0);
|
||||||
dawnFenceOnCompletion(fence, 3u, ToMockFenceOnCompletionCallback, 0);
|
dawnFenceOnCompletion(fence, 3u, ToMockFenceOnCompletionCallback, 0);
|
||||||
dawnFenceOnCompletion(fence, 4u, ToMockFenceOnCompletionCallback, 0);
|
dawnFenceOnCompletion(fence, 4u, ToMockFenceOnCompletionCallback, 0);
|
||||||
|
|
||||||
|
EXPECT_CALL(*mockFenceOnCompletionCallback, Call(DAWN_FENCE_COMPLETION_STATUS_UNKNOWN, _))
|
||||||
|
.Times(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Without any flushes, errors should be generated when waiting on a value greater
|
// Without any flushes, errors should be generated when waiting on a value greater
|
||||||
@ -261,8 +269,6 @@ TEST_F(WireFenceTests, DestroyBeforeOnCompletionEnd) {
|
|||||||
EXPECT_CALL(*mockFenceOnCompletionCallback,
|
EXPECT_CALL(*mockFenceOnCompletionCallback,
|
||||||
Call(DAWN_FENCE_COMPLETION_STATUS_UNKNOWN, userdata))
|
Call(DAWN_FENCE_COMPLETION_STATUS_UNKNOWN, userdata))
|
||||||
.Times(1);
|
.Times(1);
|
||||||
|
|
||||||
dawnFenceRelease(fence);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test that signaling a fence on a wrong queue is invalid
|
// Test that signaling a fence on a wrong queue is invalid
|
||||||
@ -270,7 +276,6 @@ TEST_F(WireFenceTests, SignalWrongQueue) {
|
|||||||
DawnQueue queue2 = dawnDeviceCreateQueue(device);
|
DawnQueue queue2 = dawnDeviceCreateQueue(device);
|
||||||
DawnQueue apiQueue2 = api.GetNewQueue();
|
DawnQueue apiQueue2 = api.GetNewQueue();
|
||||||
EXPECT_CALL(api, DeviceCreateQueue(apiDevice)).WillOnce(Return(apiQueue2));
|
EXPECT_CALL(api, DeviceCreateQueue(apiDevice)).WillOnce(Return(apiQueue2));
|
||||||
EXPECT_CALL(api, QueueRelease(apiQueue2));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
|
|
||||||
DawnCallbackUserdata userdata = 1520;
|
DawnCallbackUserdata userdata = 1520;
|
||||||
@ -285,7 +290,6 @@ TEST_F(WireFenceTests, SignalWrongQueueDoesNotUpdateValue) {
|
|||||||
DawnQueue queue2 = dawnDeviceCreateQueue(device);
|
DawnQueue queue2 = dawnDeviceCreateQueue(device);
|
||||||
DawnQueue apiQueue2 = api.GetNewQueue();
|
DawnQueue apiQueue2 = api.GetNewQueue();
|
||||||
EXPECT_CALL(api, DeviceCreateQueue(apiDevice)).WillOnce(Return(apiQueue2));
|
EXPECT_CALL(api, DeviceCreateQueue(apiDevice)).WillOnce(Return(apiQueue2));
|
||||||
EXPECT_CALL(api, QueueRelease(apiQueue2));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
|
|
||||||
DawnCallbackUserdata userdata = 1024;
|
DawnCallbackUserdata userdata = 1024;
|
||||||
|
@ -59,7 +59,6 @@ TEST_F(WireOptionalTests, OptionalObjectValue) {
|
|||||||
})))
|
})))
|
||||||
.WillOnce(Return(nullptr));
|
.WillOnce(Return(nullptr));
|
||||||
|
|
||||||
EXPECT_CALL(api, BindGroupLayoutRelease(apiBindGroupLayout));
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,8 +186,5 @@ TEST_F(WireOptionalTests, OptionalStructPointer) {
|
|||||||
})))
|
})))
|
||||||
.WillOnce(Return(nullptr));
|
.WillOnce(Return(nullptr));
|
||||||
|
|
||||||
EXPECT_CALL(api, ShaderModuleRelease(apiVsModule));
|
|
||||||
EXPECT_CALL(api, PipelineLayoutRelease(apiLayout));
|
|
||||||
|
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
|
@ -34,10 +34,7 @@ void WireTest::SetUp() {
|
|||||||
|
|
||||||
// This SetCallback call cannot be ignored because it is done as soon as we start the server
|
// This SetCallback call cannot be ignored because it is done as soon as we start the server
|
||||||
EXPECT_CALL(api, OnDeviceSetErrorCallback(_, _, _)).Times(Exactly(1));
|
EXPECT_CALL(api, OnDeviceSetErrorCallback(_, _, _)).Times(Exactly(1));
|
||||||
if (mIgnoreSetCallbackCalls) {
|
SetupIgnoredCallExpectations();
|
||||||
EXPECT_CALL(api, OnBuilderSetErrorCallback(_, _, _, _)).Times(AnyNumber());
|
|
||||||
}
|
|
||||||
EXPECT_CALL(api, DeviceTick(_)).Times(AnyNumber());
|
|
||||||
|
|
||||||
mS2cBuf = std::make_unique<utils::TerribleCommandBuffer>();
|
mS2cBuf = std::make_unique<utils::TerribleCommandBuffer>();
|
||||||
mC2sBuf = std::make_unique<utils::TerribleCommandBuffer>(mWireServer.get());
|
mC2sBuf = std::make_unique<utils::TerribleCommandBuffer>(mWireServer.get());
|
||||||
@ -62,13 +59,24 @@ void WireTest::TearDown() {
|
|||||||
// be reset before any mocks are deleted.
|
// be reset before any mocks are deleted.
|
||||||
// Incomplete client callbacks will be called on deletion, so the mocks
|
// Incomplete client callbacks will be called on deletion, so the mocks
|
||||||
// cannot be null.
|
// cannot be null.
|
||||||
|
api.IgnoreAllReleaseCalls();
|
||||||
mWireClient = nullptr;
|
mWireClient = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WireTest::FlushClient() {
|
void WireTest::FlushClient() {
|
||||||
ASSERT_TRUE(mC2sBuf->Flush());
|
ASSERT_TRUE(mC2sBuf->Flush());
|
||||||
|
|
||||||
|
Mock::VerifyAndClearExpectations(&api);
|
||||||
|
SetupIgnoredCallExpectations();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WireTest::FlushServer() {
|
void WireTest::FlushServer() {
|
||||||
ASSERT_TRUE(mS2cBuf->Flush());
|
ASSERT_TRUE(mS2cBuf->Flush());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WireTest::SetupIgnoredCallExpectations() {
|
||||||
|
if (mIgnoreSetCallbackCalls) {
|
||||||
|
EXPECT_CALL(api, OnBuilderSetErrorCallback(_, _, _, _)).Times(AnyNumber());
|
||||||
|
}
|
||||||
|
EXPECT_CALL(api, DeviceTick(_)).Times(AnyNumber());
|
||||||
|
}
|
||||||
|
@ -85,11 +85,12 @@ class WireTest : public testing::Test {
|
|||||||
void FlushClient();
|
void FlushClient();
|
||||||
void FlushServer();
|
void FlushServer();
|
||||||
|
|
||||||
MockProcTable api;
|
testing::StrictMock<MockProcTable> api;
|
||||||
DawnDevice apiDevice;
|
DawnDevice apiDevice;
|
||||||
DawnDevice device;
|
DawnDevice device;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void SetupIgnoredCallExpectations();
|
||||||
bool mIgnoreSetCallbackCalls = false;
|
bool mIgnoreSetCallbackCalls = false;
|
||||||
|
|
||||||
std::unique_ptr<dawn_wire::WireServer> mWireServer;
|
std::unique_ptr<dawn_wire::WireServer> mWireServer;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user