Skip to content

Commit 50aa1d3

Browse files
authored
Increase unit test coverage for app data model provider (#37812)
* Tests for GenericAppendOnlyBuffer move operations added. * fix for clang-tidy use after move error. * targeting append only buffer move constructor and move operator= * fix for style errors.
1 parent d5d2cba commit 50aa1d3

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

src/app/data-model-provider/MetadataList.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -156,11 +156,11 @@ class ListBuilder : public detail::GenericAppendOnlyBuffer
156156
ListBuilder(const ListBuilder &) = delete;
157157
ListBuilder & operator=(const ListBuilder & other) = delete;
158158

159-
ListBuilder(ListBuilder && other) : GenericAppendOnlyBuffer(sizeof(T)) { *this = std::move(other); }
159+
ListBuilder(ListBuilder && other) : GenericAppendOnlyBuffer{ std::move(other) } {}
160160

161161
ListBuilder & operator=(ListBuilder && other)
162162
{
163-
*static_cast<GenericAppendOnlyBuffer *>(this) = std::move(other);
163+
detail::GenericAppendOnlyBuffer::operator=(std::move(other));
164164
return *this;
165165
}
166166

src/app/data-model-provider/tests/TestMetadataList.cpp

+51
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
using namespace chip;
3434
using namespace chip::app::DataModel;
35+
using namespace chip::app::DataModel::detail;
3536

3637
namespace {
3738

@@ -204,4 +205,54 @@ TEST_F(TestMetadataList, ListBuilderConvertersWorks)
204205
}
205206
}
206207

208+
TEST_F(TestMetadataList, BufferMoveOperationsWork)
209+
{
210+
{
211+
using LIST = ListBuilder<int>;
212+
213+
LIST movedFromList{};
214+
215+
ASSERT_EQ(movedFromList.EnsureAppendCapacity(3), CHIP_NO_ERROR);
216+
217+
movedFromList.Append(10);
218+
movedFromList.Append(11);
219+
movedFromList.Append(12);
220+
221+
LIST movedToList{ std::move(movedFromList) };
222+
223+
ASSERT_EQ(movedFromList.Size(), size_t{ 0 }); // NOLINT(bugprone-use-after-move)
224+
ASSERT_TRUE(movedFromList.IsEmpty()); // NOLINT(bugprone-use-after-move)
225+
226+
ASSERT_EQ(movedToList.Size(), size_t{ 3 });
227+
ASSERT_FALSE(movedToList.IsEmpty());
228+
229+
auto movedToListSpan = movedToList.TakeBuffer();
230+
231+
EXPECT_EQ(movedToListSpan[0], 10);
232+
EXPECT_EQ(movedToListSpan[1], 11);
233+
EXPECT_EQ(movedToListSpan[2], 12);
234+
}
235+
236+
{
237+
using LIST = ListBuilder<int>;
238+
239+
LIST movedFromList{};
240+
LIST movedToList{};
241+
242+
ASSERT_EQ(movedFromList.EnsureAppendCapacity(3), CHIP_NO_ERROR);
243+
ASSERT_EQ(movedToList.EnsureAppendCapacity(3), CHIP_NO_ERROR);
244+
245+
movedFromList.Append(10);
246+
movedFromList.Append(11);
247+
movedFromList.Append(12);
248+
249+
movedToList = std::move(movedFromList);
250+
251+
ASSERT_EQ(movedFromList.Size(), size_t{ 0 }); // NOLINT(bugprone-use-after-move)
252+
ASSERT_TRUE(movedFromList.IsEmpty()); // NOLINT(bugprone-use-after-move)
253+
254+
ASSERT_EQ(movedToList.Size(), size_t{ 3 });
255+
ASSERT_FALSE(movedToList.IsEmpty());
256+
}
257+
}
207258
} // namespace

0 commit comments

Comments
 (0)