Files
loongoffice/vcl/qa/cppunit/BinaryDataContainerTest.cxx
Tomaž Vajngerl 8413089d69 vcl: a way to create data for BinaryDataContainer without copying
Construstor for BinaryDataContainer taking unique_ptr<sal_uInt8>
represents a way how to create and fill the data for the container
and make sure that the container is the only one that is managing
the data after construction.
Generally we don't want to give the access to the internal
shared_ptr to the outside, so with the unique_ptr we make sure
that there is no outside references present (which would be the
case if the we would take shared_ptr as the constructor) and the
unique_ptr is cleared (moved) after construction.

Change-Id: I123114c8bee92e342740d94a784b2c16e2564528
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108441
Tested-by: Tomaž Vajngerl <quikee@gmail.com>
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
2021-01-19 06:41:25 +01:00

79 lines
2.7 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include <cppunit/TestAssert.h>
#include <cppunit/TestFixture.h>
#include <cppunit/extensions/HelperMacros.h>
#include <vcl/BinaryDataContainer.hxx>
using namespace css;
namespace
{
class BinaryDataContainerTest : public CppUnit::TestFixture
{
void testConstruct();
CPPUNIT_TEST_SUITE(BinaryDataContainerTest);
CPPUNIT_TEST(testConstruct);
CPPUNIT_TEST_SUITE_END();
};
void BinaryDataContainerTest::testConstruct()
{
{
BinaryDataContainer aContainer;
CPPUNIT_ASSERT_EQUAL(true, aContainer.isEmpty());
CPPUNIT_ASSERT_EQUAL(size_t(0), aContainer.getSize());
}
{
std::vector<sal_uInt8> aTestByteArray = { 1, 2, 3, 4 };
BinaryDataContainer aContainer(aTestByteArray.data(), aTestByteArray.size());
CPPUNIT_ASSERT_EQUAL(false, aContainer.isEmpty());
CPPUNIT_ASSERT_EQUAL(size_t(4), aContainer.getSize());
// Test Copy
BinaryDataContainer aCopyOfContainer = aContainer;
CPPUNIT_ASSERT_EQUAL(false, aCopyOfContainer.isEmpty());
CPPUNIT_ASSERT_EQUAL(size_t(4), aCopyOfContainer.getSize());
CPPUNIT_ASSERT_EQUAL(aCopyOfContainer.getData(), aContainer.getData());
// Test Move
BinaryDataContainer aMovedInContainer = std::move(aCopyOfContainer);
CPPUNIT_ASSERT_EQUAL(false, aMovedInContainer.isEmpty());
CPPUNIT_ASSERT_EQUAL(size_t(4), aMovedInContainer.getSize());
CPPUNIT_ASSERT_EQUAL(aMovedInContainer.getData(), aContainer.getData());
CPPUNIT_ASSERT_EQUAL(true, aCopyOfContainer.isEmpty());
CPPUNIT_ASSERT_EQUAL(size_t(0), aCopyOfContainer.getSize());
}
{
// construct a unique_ptr data array
std::vector<sal_uInt8> aTestByteArray = { 1, 2, 3, 4 };
auto aConstructionByteArray = std::make_unique<std::vector<sal_uInt8>>(aTestByteArray);
// remember for later to compare
const sal_uInt8* pInternal = aConstructionByteArray->data();
BinaryDataContainer aContainer(std::move(aConstructionByteArray));
// make sure the unique_ptr was moved into BinaryDataContainer
CPPUNIT_ASSERT_EQUAL(false, bool(aConstructionByteArray));
// make sure we didn't copy data into BinaryDataContainer (pointers match)
CPPUNIT_ASSERT_EQUAL(pInternal, aContainer.getData());
}
}
} // namespace
CPPUNIT_TEST_SUITE_REGISTRATION(BinaryDataContainerTest);
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */