1 // Copyright 2022 The Pigweed Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4 // use this file except in compliance with the License. You may obtain a copy of
5 // the License at
6 //
7 // https://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, WITHOUT
11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12 // License for the specific language governing permissions and limitations under
13 // the License.
14
15 #include "pw_spi/initiator_mock.h"
16
17 #include <array>
18
19 #include "pw_bytes/array.h"
20 #include "pw_bytes/span.h"
21 #include "pw_containers/algorithm.h"
22 #include "pw_span/span.h"
23 #include "pw_unit_test/framework.h"
24
25 namespace pw::spi {
26 namespace {
27
TEST(Transaction,Read)28 TEST(Transaction, Read) {
29 constexpr auto kExpectRead1 = bytes::Array<1, 2, 3, 4, 5>();
30 constexpr auto kExpectRead2 = bytes::Array<3, 4, 5>();
31
32 auto expected_transactions = MakeExpectedTransactionArray(
33 {MockReadTransaction(OkStatus(), kExpectRead1),
34 MockReadTransaction(OkStatus(), kExpectRead2)});
35
36 MockInitiator mocked_spi(expected_transactions);
37
38 std::array<std::byte, kExpectRead1.size()> read1;
39 EXPECT_EQ(mocked_spi.WriteRead(ConstByteSpan(), read1), OkStatus());
40 EXPECT_TRUE(pw::containers::Equal(read1, kExpectRead1));
41
42 std::array<std::byte, kExpectRead2.size()> read2;
43 EXPECT_EQ(mocked_spi.WriteRead(ConstByteSpan(), read2), OkStatus());
44 EXPECT_TRUE(pw::containers::Equal(read2, kExpectRead2));
45
46 EXPECT_EQ(mocked_spi.Finalize(), OkStatus());
47 }
48
TEST(Transaction,Write)49 TEST(Transaction, Write) {
50 constexpr auto kExpectWrite1 = bytes::Array<1, 2, 3, 4, 5>();
51 constexpr auto kExpectWrite2 = bytes::Array<3, 4, 5>();
52
53 auto expected_transactions = MakeExpectedTransactionArray(
54 {MockWriteTransaction(OkStatus(), kExpectWrite1),
55 MockWriteTransaction(OkStatus(), kExpectWrite2)});
56
57 MockInitiator mocked_spi(expected_transactions);
58
59 EXPECT_EQ(mocked_spi.WriteRead(kExpectWrite1, ByteSpan()), OkStatus());
60
61 EXPECT_EQ(mocked_spi.WriteRead(kExpectWrite2, ByteSpan()), OkStatus());
62
63 EXPECT_EQ(mocked_spi.Finalize(), OkStatus());
64 }
65
TEST(Transaction,WriteRead)66 TEST(Transaction, WriteRead) {
67 constexpr auto kExpectWrite1 = bytes::Array<1, 2, 3, 4, 5>();
68 constexpr auto kExpectRead1 = bytes::Array<1, 2>();
69
70 constexpr auto kExpectWrite2 = bytes::Array<3, 4, 5>();
71 constexpr auto kExpectRead2 = bytes::Array<3, 4>();
72
73 auto expected_transactions = MakeExpectedTransactionArray({
74 MockTransaction(OkStatus(), kExpectWrite1, kExpectRead1),
75 MockTransaction(OkStatus(), kExpectWrite2, kExpectRead2),
76 });
77
78 MockInitiator mocked_spi(expected_transactions);
79
80 std::array<std::byte, kExpectRead1.size()> read1;
81 EXPECT_EQ(mocked_spi.WriteRead(kExpectWrite1, read1), OkStatus());
82 EXPECT_TRUE(pw::containers::Equal(read1, kExpectRead1));
83
84 std::array<std::byte, kExpectRead2.size()> read2;
85 EXPECT_EQ(mocked_spi.WriteRead(kExpectWrite2, read2), OkStatus());
86 EXPECT_TRUE(pw::containers::Equal(read2, kExpectRead2));
87
88 EXPECT_EQ(mocked_spi.Finalize(), OkStatus());
89 }
90
91 } // namespace
92 } // namespace pw::spi
93