annotate 3rdparty/vmime/tests/utility/seekableInputStreamRegionAdapterTest.cpp @ 0:a4671277546c tip

created the repository for the thymian project
author ferencd
date Tue, 17 Aug 2021 11:19:54 +0200
parents
children
rev   line source
ferencd@0 1 //
ferencd@0 2 // VMime library (http://www.vmime.org)
ferencd@0 3 // Copyright (C) 2002-2013 Vincent Richard <vincent@vmime.org>
ferencd@0 4 //
ferencd@0 5 // This program is free software; you can redistribute it and/or
ferencd@0 6 // modify it under the terms of the GNU General Public License as
ferencd@0 7 // published by the Free Software Foundation; either version 3 of
ferencd@0 8 // the License, or (at your option) any later version.
ferencd@0 9 //
ferencd@0 10 // This program is distributed in the hope that it will be useful,
ferencd@0 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
ferencd@0 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
ferencd@0 13 // General Public License for more details.
ferencd@0 14 //
ferencd@0 15 // You should have received a copy of the GNU General Public License along
ferencd@0 16 // with this program; if not, write to the Free Software Foundation, Inc.,
ferencd@0 17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
ferencd@0 18 //
ferencd@0 19 // Linking this library statically or dynamically with other modules is making
ferencd@0 20 // a combined work based on this library. Thus, the terms and conditions of
ferencd@0 21 // the GNU General Public License cover the whole combination.
ferencd@0 22 //
ferencd@0 23
ferencd@0 24 #include "tests/testUtils.hpp"
ferencd@0 25
ferencd@0 26 #include "vmime/utility/inputStreamStringAdapter.hpp"
ferencd@0 27 #include "vmime/utility/seekableInputStreamRegionAdapter.hpp"
ferencd@0 28 #include "vmime/utility/stringUtils.hpp"
ferencd@0 29
ferencd@0 30
ferencd@0 31 using namespace vmime::utility;
ferencd@0 32
ferencd@0 33
ferencd@0 34 VMIME_TEST_SUITE_BEGIN(seekableInputStreamRegionAdapterTest)
ferencd@0 35
ferencd@0 36 VMIME_TEST_LIST_BEGIN
ferencd@0 37 VMIME_TEST(testInitialPosition)
ferencd@0 38 VMIME_TEST(testSeekAndGetPosition)
ferencd@0 39 VMIME_TEST(testRead)
ferencd@0 40 VMIME_TEST(testSkip)
ferencd@0 41 VMIME_TEST(testReset)
ferencd@0 42 VMIME_TEST(testOwnPosition)
ferencd@0 43 VMIME_TEST_LIST_END
ferencd@0 44
ferencd@0 45
ferencd@0 46 vmime::shared_ptr <seekableInputStreamRegionAdapter> createStream
ferencd@0 47 (vmime::shared_ptr <seekableInputStream>* underlyingStream = NULL)
ferencd@0 48 {
ferencd@0 49 vmime::string buffer("THIS IS A TEST BUFFER");
ferencd@0 50
ferencd@0 51 vmime::shared_ptr <seekableInputStream> strStream =
ferencd@0 52 vmime::make_shared <inputStreamStringAdapter>(buffer);
ferencd@0 53
ferencd@0 54 vmime::shared_ptr <seekableInputStreamRegionAdapter> rgnStream =
ferencd@0 55 vmime::make_shared <seekableInputStreamRegionAdapter>(strStream, 10, 11);
ferencd@0 56
ferencd@0 57 if (underlyingStream)
ferencd@0 58 *underlyingStream = strStream;
ferencd@0 59
ferencd@0 60 return rgnStream;
ferencd@0 61 }
ferencd@0 62
ferencd@0 63 void testInitialPosition()
ferencd@0 64 {
ferencd@0 65 vmime::shared_ptr <seekableInputStreamRegionAdapter> stream = createStream();
ferencd@0 66
ferencd@0 67 VASSERT_EQ("Pos", 0, stream->getPosition());
ferencd@0 68 VASSERT_FALSE("EOF", stream->eof());
ferencd@0 69 }
ferencd@0 70
ferencd@0 71 void testSeekAndGetPosition()
ferencd@0 72 {
ferencd@0 73 vmime::shared_ptr <seekableInputStreamRegionAdapter> stream = createStream();
ferencd@0 74
ferencd@0 75 stream->seek(5);
ferencd@0 76
ferencd@0 77 VASSERT_EQ("Pos 1", 5, stream->getPosition());
ferencd@0 78 VASSERT_FALSE("EOF 1", stream->eof());
ferencd@0 79
ferencd@0 80 stream->seek(20);
ferencd@0 81
ferencd@0 82 VASSERT_EQ("Pos 2", 11, stream->getPosition());
ferencd@0 83 VASSERT_TRUE("EOF 2", stream->eof());
ferencd@0 84 }
ferencd@0 85
ferencd@0 86 void testRead()
ferencd@0 87 {
ferencd@0 88 vmime::shared_ptr <seekableInputStreamRegionAdapter> stream = createStream();
ferencd@0 89
ferencd@0 90 stream->seek(5);
ferencd@0 91
ferencd@0 92 vmime::byte_t buffer[100];
ferencd@0 93 std::fill(vmime::begin(buffer), vmime::end(buffer), 0);
ferencd@0 94 vmime::size_t read = stream->read(buffer, 6);
ferencd@0 95
ferencd@0 96 VASSERT_EQ("Pos", 11, stream->getPosition());
ferencd@0 97 VASSERT_EQ("Read", 6, read);
ferencd@0 98 VASSERT_TRUE("EOF", stream->eof());
ferencd@0 99 VASSERT_EQ("Buffer", "BUFFER",
ferencd@0 100 vmime::utility::stringUtils::makeStringFromBytes(buffer, 6));
ferencd@0 101 }
ferencd@0 102
ferencd@0 103 void testSkip()
ferencd@0 104 {
ferencd@0 105 vmime::shared_ptr <seekableInputStreamRegionAdapter> stream = createStream();
ferencd@0 106
ferencd@0 107 stream->skip(5);
ferencd@0 108
ferencd@0 109 VASSERT_EQ("Pos 1", 5, stream->getPosition());
ferencd@0 110 VASSERT_FALSE("EOF 1", stream->eof());
ferencd@0 111
ferencd@0 112 vmime::byte_t buffer[100];
ferencd@0 113 std::fill(vmime::begin(buffer), vmime::end(buffer), 0);
ferencd@0 114 vmime::size_t read = stream->read(buffer, 3);
ferencd@0 115
ferencd@0 116 VASSERT_EQ("Pos 2", 8, stream->getPosition());
ferencd@0 117 VASSERT_EQ("Read", 3, read);
ferencd@0 118 VASSERT_FALSE("EOF 2", stream->eof());
ferencd@0 119 VASSERT_EQ("Buffer", "BUF",
ferencd@0 120 vmime::utility::stringUtils::makeStringFromBytes(buffer, 3));
ferencd@0 121
ferencd@0 122 stream->skip(50);
ferencd@0 123
ferencd@0 124 VASSERT_EQ("Pos 3", 11, stream->getPosition());
ferencd@0 125 VASSERT_TRUE("EOF 3", stream->eof());
ferencd@0 126 }
ferencd@0 127
ferencd@0 128 void testReset()
ferencd@0 129 {
ferencd@0 130 vmime::shared_ptr <seekableInputStreamRegionAdapter> stream = createStream();
ferencd@0 131
ferencd@0 132 stream->skip(100);
ferencd@0 133 stream->reset();
ferencd@0 134
ferencd@0 135 VASSERT_EQ("Pos", 0, stream->getPosition());
ferencd@0 136 VASSERT_FALSE("EOF", stream->eof());
ferencd@0 137 }
ferencd@0 138
ferencd@0 139 void testOwnPosition()
ferencd@0 140 {
ferencd@0 141 // seekableInputStreamRegionAdapter should keep track of its own position
ferencd@0 142 // in the underlying stream, and not be affected by possible seek/read
ferencd@0 143 // operations on it...
ferencd@0 144 vmime::shared_ptr <seekableInputStream> ustream;
ferencd@0 145 vmime::shared_ptr <seekableInputStreamRegionAdapter> stream = createStream(&ustream);
ferencd@0 146
ferencd@0 147 stream->seek(5);
ferencd@0 148
ferencd@0 149 vmime::byte_t buffer1[100];
ferencd@0 150 std::fill(vmime::begin(buffer1), vmime::end(buffer1), 0);
ferencd@0 151 vmime::size_t read = ustream->read(buffer1, 7);
ferencd@0 152
ferencd@0 153 vmime::byte_t buffer2[100];
ferencd@0 154 std::fill(vmime::begin(buffer2), vmime::end(buffer2), 0);
ferencd@0 155 vmime::size_t read2 = stream->read(buffer2, 6);
ferencd@0 156
ferencd@0 157 VASSERT_EQ("Buffer 1", "THIS IS",
ferencd@0 158 vmime::utility::stringUtils::makeStringFromBytes(buffer1, 7));
ferencd@0 159 VASSERT_EQ("Buffer 2", "BUFFER",
ferencd@0 160 vmime::utility::stringUtils::makeStringFromBytes(buffer2, 6));
ferencd@0 161
ferencd@0 162 // ...but the underlying stream position is affected by read operations
ferencd@0 163 // from the region adapter (FIXME?)
ferencd@0 164 VASSERT_EQ("Pos", 21, ustream->getPosition());
ferencd@0 165 }
ferencd@0 166
ferencd@0 167 VMIME_TEST_SUITE_END