1 // Copyright 2019 The Dawn Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "tests/unittests/wire/WireTest.h"
16
17 using namespace testing;
18 using namespace dawn_wire;
19
20 class WireBasicTests : public WireTest {
21 public:
WireBasicTests()22 WireBasicTests() {
23 }
24 ~WireBasicTests() override = default;
25 };
26
27 // One call gets forwarded correctly.
TEST_F(WireBasicTests,CallForwarded)28 TEST_F(WireBasicTests, CallForwarded) {
29 wgpuDeviceCreateCommandEncoder(device, nullptr);
30
31 WGPUCommandEncoder apiCmdBufEncoder = api.GetNewCommandEncoder();
32 EXPECT_CALL(api, DeviceCreateCommandEncoder(apiDevice, nullptr))
33 .WillOnce(Return(apiCmdBufEncoder));
34
35 FlushClient();
36 }
37
38 // Test that calling methods on a new object works as expected.
TEST_F(WireBasicTests,CreateThenCall)39 TEST_F(WireBasicTests, CreateThenCall) {
40 WGPUCommandEncoder encoder = wgpuDeviceCreateCommandEncoder(device, nullptr);
41 wgpuCommandEncoderFinish(encoder, nullptr);
42
43 WGPUCommandEncoder apiCmdBufEncoder = api.GetNewCommandEncoder();
44 EXPECT_CALL(api, DeviceCreateCommandEncoder(apiDevice, nullptr))
45 .WillOnce(Return(apiCmdBufEncoder));
46
47 WGPUCommandBuffer apiCmdBuf = api.GetNewCommandBuffer();
48 EXPECT_CALL(api, CommandEncoderFinish(apiCmdBufEncoder, nullptr)).WillOnce(Return(apiCmdBuf));
49
50 FlushClient();
51 }
52
53 // Test that client reference/release do not call the backend API.
TEST_F(WireBasicTests,RefCountKeptInClient)54 TEST_F(WireBasicTests, RefCountKeptInClient) {
55 WGPUCommandEncoder encoder = wgpuDeviceCreateCommandEncoder(device, nullptr);
56
57 wgpuCommandEncoderReference(encoder);
58 wgpuCommandEncoderRelease(encoder);
59
60 WGPUCommandEncoder apiCmdBufEncoder = api.GetNewCommandEncoder();
61 EXPECT_CALL(api, DeviceCreateCommandEncoder(apiDevice, nullptr))
62 .WillOnce(Return(apiCmdBufEncoder));
63
64 FlushClient();
65 }
66
67 // Test that client reference/release do not call the backend API.
TEST_F(WireBasicTests,ReleaseCalledOnRefCount0)68 TEST_F(WireBasicTests, ReleaseCalledOnRefCount0) {
69 WGPUCommandEncoder encoder = wgpuDeviceCreateCommandEncoder(device, nullptr);
70
71 wgpuCommandEncoderRelease(encoder);
72
73 WGPUCommandEncoder apiCmdBufEncoder = api.GetNewCommandEncoder();
74 EXPECT_CALL(api, DeviceCreateCommandEncoder(apiDevice, nullptr))
75 .WillOnce(Return(apiCmdBufEncoder));
76
77 EXPECT_CALL(api, CommandEncoderRelease(apiCmdBufEncoder));
78
79 FlushClient();
80 }
81