office-gobmx/writerperfect/qa/unit/DirectoryStreamTest.cxx
Caolán McNamara ac396f2f6b fix coverity parse errors
Change-Id: I3a1179947704452e3ffec02be59d0f7bf0b75ab0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109017
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
2021-01-09 13:01:49 +01:00

148 lines
4.5 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 <memory>
#include <cppunit/extensions/HelperMacros.h>
#include <comphelper/processfactory.hxx>
#include <ucbhelper/content.hxx>
#include <test/bootstrapfixture.hxx>
#include <DirectoryStream.hxx>
#include <com/sun/star/ucb/XContent.hpp>
namespace ucb = com::sun::star::ucb;
namespace uno = com::sun::star::uno;
using std::unique_ptr;
using librevenge::RVNGInputStream;
using writerperfect::DirectoryStream;
namespace
{
class DirectoryStreamTest : public test::BootstrapFixture
{
public:
DirectoryStreamTest();
public:
CPPUNIT_TEST_SUITE(DirectoryStreamTest);
CPPUNIT_TEST(testConstruction);
CPPUNIT_TEST(testDetection);
CPPUNIT_TEST(testDataOperations);
CPPUNIT_TEST(testStructuredOperations);
CPPUNIT_TEST_SUITE_END();
private:
void testConstruction();
void testDetection();
void testDataOperations();
void testStructuredOperations();
private:
uno::Reference<ucb::XContent> m_xDir;
uno::Reference<ucb::XContent> m_xFile;
uno::Reference<ucb::XContent> m_xNonexistent;
};
constexpr OUStringLiteral g_aDirPath = u"/writerperfect/qa/unit/data/stream/test.dir";
constexpr OUStringLiteral g_aNondirPath = u"/writerperfect/qa/unit/data/stream/test.dir/mimetype";
constexpr OUStringLiteral g_aNonexistentPath = u"/writerperfect/qa/unit/data/stream/foo/bar";
DirectoryStreamTest::DirectoryStreamTest()
{
const uno::Reference<ucb::XCommandEnvironment> xCmdEnv;
const uno::Reference<uno::XComponentContext> xContext(comphelper::getProcessComponentContext());
using ucbhelper::Content;
m_xDir = Content(m_directories.getURLFromSrc(g_aDirPath), xCmdEnv, xContext).get();
m_xFile = Content(m_directories.getURLFromSrc(g_aNondirPath), xCmdEnv, xContext).get();
m_xNonexistent
= Content(m_directories.getURLFromSrc(g_aNonexistentPath), xCmdEnv, xContext).get();
}
void DirectoryStreamTest::testConstruction()
{
const unique_ptr<DirectoryStream> pDir(DirectoryStream::createForParent(m_xFile));
CPPUNIT_ASSERT(bool(pDir));
CPPUNIT_ASSERT(pDir->isStructured());
// this should work for dirs too
const unique_ptr<DirectoryStream> pDir2(DirectoryStream::createForParent(m_xDir));
CPPUNIT_ASSERT(bool(pDir2));
CPPUNIT_ASSERT(pDir2->isStructured());
// for nonexistent dirs nothing is created
const unique_ptr<DirectoryStream> pNondir(DirectoryStream::createForParent(m_xNonexistent));
CPPUNIT_ASSERT(!pNondir);
// even if we try harder, just an empty shell is created
DirectoryStream aNondir2(m_xNonexistent);
CPPUNIT_ASSERT(!aNondir2.isStructured());
}
void DirectoryStreamTest::testDetection()
{
CPPUNIT_ASSERT(DirectoryStream::isDirectory(m_xDir));
CPPUNIT_ASSERT(!DirectoryStream::isDirectory(m_xFile));
CPPUNIT_ASSERT(!DirectoryStream::isDirectory(m_xNonexistent));
}
void lcl_testDataOperations(RVNGInputStream& rStream)
{
CPPUNIT_ASSERT(rStream.isEnd());
CPPUNIT_ASSERT_EQUAL(0L, rStream.tell());
CPPUNIT_ASSERT_EQUAL(-1, rStream.seek(0, librevenge::RVNG_SEEK_CUR));
unsigned long numBytesRead = 0;
CPPUNIT_ASSERT(!rStream.read(1, numBytesRead));
CPPUNIT_ASSERT_EQUAL(0UL, numBytesRead);
}
void DirectoryStreamTest::testDataOperations()
{
// data operations do not make sense on a directory -> just dummy
// impls.
DirectoryStream aDir(m_xDir);
lcl_testDataOperations(aDir);
// ... and they are equally empty if we try to pass a file
DirectoryStream aFile(m_xFile);
lcl_testDataOperations(aFile);
}
void lcl_testStructuredOperations(RVNGInputStream& rStream)
{
CPPUNIT_ASSERT(rStream.isStructured());
unique_ptr<RVNGInputStream> pSubstream(rStream.getSubStreamByName("mimetype"));
CPPUNIT_ASSERT(bool(pSubstream));
// TODO: test for other operations when they are implemented =)
}
void DirectoryStreamTest::testStructuredOperations()
{
DirectoryStream aDir(m_xDir);
lcl_testStructuredOperations(aDir);
unique_ptr<DirectoryStream> pDir(DirectoryStream::createForParent(m_xFile));
CPPUNIT_ASSERT(bool(pDir));
lcl_testStructuredOperations(*pDir);
}
CPPUNIT_TEST_SUITE_REGISTRATION(DirectoryStreamTest);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */