From 267c6f2ac71f92999e969232431ba04678e7437e Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 15 Apr 2024 07:54:39 +0200 Subject: Adding upstream version 4:24.2.0. Signed-off-by: Daniel Baumann --- writerperfect/qa/unit/DirectoryStreamTest.cxx | 148 ++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 writerperfect/qa/unit/DirectoryStreamTest.cxx (limited to 'writerperfect/qa/unit/DirectoryStreamTest.cxx') diff --git a/writerperfect/qa/unit/DirectoryStreamTest.cxx b/writerperfect/qa/unit/DirectoryStreamTest.cxx new file mode 100644 index 0000000000..fd75805f58 --- /dev/null +++ b/writerperfect/qa/unit/DirectoryStreamTest.cxx @@ -0,0 +1,148 @@ +/* -*- 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 + +#include + +#include + +#include + +#include + +#include +#include + +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 m_xDir; + uno::Reference m_xFile; + uno::Reference 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 xCmdEnv; + const uno::Reference 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 pDir(DirectoryStream::createForParent(m_xFile)); + CPPUNIT_ASSERT(bool(pDir)); + CPPUNIT_ASSERT(pDir->isStructured()); + + // this should work for dirs too + const unique_ptr pDir2(DirectoryStream::createForParent(m_xDir)); + CPPUNIT_ASSERT(bool(pDir2)); + CPPUNIT_ASSERT(pDir2->isStructured()); + + // for nonexistent dirs nothing is created + const unique_ptr 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 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 pDir(DirectoryStream::createForParent(m_xFile)); + CPPUNIT_ASSERT(bool(pDir)); + lcl_testStructuredOperations(*pDir); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(DirectoryStreamTest); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3