/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* * This file is part of the libfreehand 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 "FHInternalStream.h" namespace test { using libfreehand::FHInternalStream; class FHInternalStreamTest : public CPPUNIT_NS::TestFixture { public: virtual void setUp(); virtual void tearDown(); private: CPPUNIT_TEST_SUITE(FHInternalStreamTest); CPPUNIT_TEST(testRead); CPPUNIT_TEST(testSeek); CPPUNIT_TEST_SUITE_END(); private: void testRead(); void testSeek(); }; void FHInternalStreamTest::setUp() { } void FHInternalStreamTest::tearDown() { } void FHInternalStreamTest::testRead() { const unsigned char data[] = "abc dee fgh"; librevenge::RVNGBinaryData binData(data, sizeof(data)); FHInternalStream strm(binData.getDataStream(), binData.size()); CPPUNIT_ASSERT_MESSAGE("stream is already exhausted before starting to read", !strm.isEnd()); for (int i = 0; sizeof(data) != i; ++i) { unsigned long readBytes = 0; const unsigned char *s = strm.read(1, readBytes); CPPUNIT_ASSERT(1 == readBytes); CPPUNIT_ASSERT_EQUAL(data[i], s[0]); CPPUNIT_ASSERT(((sizeof(data) - 1) == i) || !strm.isEnd()); } CPPUNIT_ASSERT_MESSAGE("reading did not exhaust the stream", strm.isEnd()); strm.seek(0, librevenge::RVNG_SEEK_SET); unsigned long readBytes = 0; const unsigned char *s = strm.read(sizeof(data), readBytes); CPPUNIT_ASSERT(sizeof(data) == readBytes); CPPUNIT_ASSERT(std::equal(data, data + sizeof(data), s)); } void FHInternalStreamTest::testSeek() { const unsigned char data[] = "abc dee fgh"; librevenge::RVNGBinaryData binData(data, sizeof(data)); FHInternalStream strm(binData.getDataStream(), binData.size()); strm.seek(0, librevenge::RVNG_SEEK_SET); CPPUNIT_ASSERT(0 == strm.tell()); strm.seek(2, librevenge::RVNG_SEEK_SET); CPPUNIT_ASSERT(2 == strm.tell()); strm.seek(1, librevenge::RVNG_SEEK_CUR); CPPUNIT_ASSERT(3 == strm.tell()); strm.seek(-2, librevenge::RVNG_SEEK_CUR); CPPUNIT_ASSERT(1 == strm.tell()); CPPUNIT_ASSERT(!strm.isEnd()); CPPUNIT_ASSERT(0 == strm.seek(0, librevenge::RVNG_SEEK_END)); CPPUNIT_ASSERT(strm.isEnd()); CPPUNIT_ASSERT(sizeof(data) == strm.tell()); CPPUNIT_ASSERT(0 != strm.seek(1, librevenge::RVNG_SEEK_END)); // cannot seek after the end CPPUNIT_ASSERT(strm.isEnd()); CPPUNIT_ASSERT(0 == strm.seek(-1, librevenge::RVNG_SEEK_END)); // but can seek before it CPPUNIT_ASSERT(!strm.isEnd()); CPPUNIT_ASSERT((sizeof(data) - 1) == strm.tell()); } CPPUNIT_TEST_SUITE_REGISTRATION(FHInternalStreamTest); } /* vim:set shiftwidth=2 softtabstop=2 expandtab: */