C++ Utilities  4.10.0
Common C++ classes and routines used by my applications such as argument parser, IO and conversion utilities
iotests.cpp
Go to the documentation of this file.
1 #include "./testutils.h"
2 
3 #include "../conversion/conversionexception.h"
4 #include "../io/binaryreader.h"
5 #include "../io/binarywriter.h"
6 #include "../io/bitreader.h"
7 #include "../io/catchiofailure.h"
8 #include "../io/copy.h"
9 #include "../io/inifile.h"
10 #include "../io/misc.h"
11 #include "../io/path.h"
12 
13 #include <cppunit/TestFixture.h>
14 #include <cppunit/extensions/HelperMacros.h>
15 
16 #include <algorithm>
17 #include <fstream>
18 #include <sstream>
19 
20 using namespace std;
21 using namespace IoUtilities;
22 using namespace TestUtilities;
23 using namespace TestUtilities::Literals;
24 using namespace ConversionUtilities;
25 
26 using namespace CPPUNIT_NS;
27 
31 class IoTests : public TestFixture {
32  CPPUNIT_TEST_SUITE(IoTests);
33  CPPUNIT_TEST(testFailure);
34  CPPUNIT_TEST(testBinaryReader);
35  CPPUNIT_TEST(testBinaryWriter);
36  CPPUNIT_TEST(testBitReader);
37  CPPUNIT_TEST(testPathUtilities);
38  CPPUNIT_TEST(testIniFile);
39  CPPUNIT_TEST(testCopy);
40  CPPUNIT_TEST(testMisc);
41  CPPUNIT_TEST_SUITE_END();
42 
43 public:
44  void setUp();
45  void tearDown();
46 
47  void testFailure();
48  void testBinaryReader();
49  void testBinaryWriter();
50  void testBitReader();
51  void testPathUtilities();
52  void testIniFile();
53  void testCopy();
54  void testMisc();
55 };
56 
58 
60 {
61 }
62 
64 {
65 }
66 
73 {
74  //fstream stream;
75  //stream.exceptions(ios_base::failbit | ios_base::badbit);
76  //CPPUNIT_ASSERT_THROW(stream.open("path/to/file/which/does/not/exist", ios_base::in), ios_base::failure);
77  // check other exceptions used by my applications, too
78  vector<int> testVec;
79  map<string, string> testMap;
80  CPPUNIT_ASSERT_THROW(testVec.at(1), out_of_range);
81  CPPUNIT_ASSERT_THROW(testMap.at("test"), out_of_range);
82 
83  // check workaround
84  try {
85  fstream stream;
86  stream.exceptions(ios_base::failbit | ios_base::badbit);
87  stream.open("path/to/file/which/does/not/exist", ios_base::in);
88  } catch (...) {
90  }
91 }
92 
97 {
98  // read test file
99  fstream testFile;
100  testFile.exceptions(ios_base::failbit | ios_base::badbit);
101  testFile.open(TestUtilities::testFilePath("some_data"), ios_base::in | ios_base::binary);
102  BinaryReader reader(&testFile);
103  CPPUNIT_ASSERT_EQUAL(reader.readStreamsize(), static_cast<istream::pos_type>(398));
104  CPPUNIT_ASSERT(reader.readUInt16LE() == 0x0102u);
105  CPPUNIT_ASSERT(reader.readUInt16BE() == 0x0102u);
106  CPPUNIT_ASSERT(reader.readUInt24LE() == 0x010203u);
107  CPPUNIT_ASSERT(reader.readUInt24BE() == 0x010203u);
108  CPPUNIT_ASSERT(reader.readUInt32LE() == 0x01020304u);
109  CPPUNIT_ASSERT(reader.readUInt32BE() == 0x01020304u);
110  CPPUNIT_ASSERT(reader.readUInt40LE() == 0x0102030405u);
111  CPPUNIT_ASSERT(reader.readUInt40BE() == 0x0102030405u);
112  CPPUNIT_ASSERT(reader.readUInt56LE() == 0x01020304050607u);
113  CPPUNIT_ASSERT(reader.readUInt56BE() == 0x01020304050607u);
114  CPPUNIT_ASSERT(reader.readUInt64LE() == 0x0102030405060708u);
115  CPPUNIT_ASSERT(reader.readUInt64BE() == 0x0102030405060708u);
116  testFile.seekg(0);
117  CPPUNIT_ASSERT(reader.readInt16LE() == 0x0102);
118  CPPUNIT_ASSERT(reader.readInt16BE() == 0x0102);
119  CPPUNIT_ASSERT(reader.readInt24LE() == 0x010203);
120  CPPUNIT_ASSERT(reader.readInt24BE() == 0x010203);
121  CPPUNIT_ASSERT(reader.readInt32LE() == 0x01020304);
122  CPPUNIT_ASSERT(reader.readInt32BE() == 0x01020304);
123  CPPUNIT_ASSERT(reader.readInt40LE() == 0x0102030405);
124  CPPUNIT_ASSERT(reader.readInt40BE() == 0x0102030405);
125  CPPUNIT_ASSERT(reader.readInt56LE() == 0x01020304050607);
126  CPPUNIT_ASSERT(reader.readInt56BE() == 0x01020304050607);
127  CPPUNIT_ASSERT(reader.readInt64LE() == 0x0102030405060708);
128  CPPUNIT_ASSERT(reader.readInt64BE() == 0x0102030405060708);
129  CPPUNIT_ASSERT(reader.readFloat32LE() == 1.125);
130  CPPUNIT_ASSERT(reader.readFloat64LE() == 1.625);
131  CPPUNIT_ASSERT(reader.readFloat32BE() == 1.125);
132  CPPUNIT_ASSERT(reader.readFloat64BE() == 1.625);
133  CPPUNIT_ASSERT(reader.readBool() == false);
134  CPPUNIT_ASSERT(reader.readBool() == true);
135  CPPUNIT_ASSERT(reader.readString(3) == "abc");
136  CPPUNIT_ASSERT(reader.readLengthPrefixedString() == "ABC");
137  CPPUNIT_ASSERT(reader.readLengthPrefixedString()
138  == "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901"
139  "23456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123"
140  "45678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345"
141  "678901234567890123456789");
142  CPPUNIT_ASSERT(reader.readTerminatedString() == "def");
143  CPPUNIT_ASSERT_THROW(reader.readLengthPrefixedString(), ConversionException);
144  CPPUNIT_ASSERT_MESSAGE("pos in stream not advanced on conversion error", reader.readByte() == 0);
145 
146  // test ownership
147  reader.setStream(nullptr, true);
148  reader.setStream(new fstream(), true);
149  BinaryReader reader2(reader);
150  CPPUNIT_ASSERT(reader2.stream() == reader.stream());
151  CPPUNIT_ASSERT(!reader2.hasOwnership());
152  reader.setStream(&testFile, false);
153  reader.setStream(new fstream(), true);
154 }
155 
160 {
161  // prepare reading expected data
162  fstream testFile;
163  testFile.exceptions(ios_base::failbit | ios_base::badbit);
164  testFile.open(TestUtilities::testFilePath("some_data"), ios_base::in | ios_base::binary);
165 
166  // prepare output stream
167  stringstream outputStream(ios_base::in | ios_base::out | ios_base::binary);
168  outputStream.exceptions(ios_base::failbit | ios_base::badbit);
169  char testData[397];
170  outputStream.rdbuf()->pubsetbuf(testData, sizeof(testData));
171 
172  // write test data
173  BinaryWriter writer(&outputStream);
174  writer.writeUInt16LE(0x0102u);
175  writer.writeUInt16BE(0x0102u);
176  writer.writeUInt24LE(0x010203u);
177  writer.writeUInt24BE(0x010203u);
178  writer.writeUInt32LE(0x01020304u);
179  writer.writeUInt32BE(0x01020304u);
180  writer.writeUInt40LE(0x0102030405u);
181  writer.writeUInt40BE(0x0102030405u);
182  writer.writeUInt56LE(0x01020304050607u);
183  writer.writeUInt56BE(0x01020304050607u);
184  writer.writeUInt64LE(0x0102030405060708u);
185  writer.writeUInt64BE(0x0102030405060708u);
186 
187  // test written values
188  for (char c : testData) {
189  CPPUNIT_ASSERT(c == static_cast<char>(testFile.get()));
190  if (testFile.tellg() >= 58) {
191  break;
192  }
193  }
194  testFile.seekg(0);
195  outputStream.seekp(0);
196 
197  // write more test data
198  writer.writeInt16LE(0x0102);
199  writer.writeInt16BE(0x0102);
200  writer.writeInt24LE(0x010203);
201  writer.writeInt24BE(0x010203);
202  writer.writeInt32LE(0x01020304);
203  writer.writeInt32BE(0x01020304);
204  writer.writeInt40LE(0x0102030405);
205  writer.writeInt40BE(0x0102030405);
206  writer.writeInt56LE(0x01020304050607);
207  writer.writeInt56BE(0x01020304050607);
208  writer.writeInt64LE(0x0102030405060708);
209  writer.writeInt64BE(0x0102030405060708);
210  writer.writeFloat32LE(1.125);
211  writer.writeFloat64LE(1.625);
212  writer.writeFloat32BE(1.125);
213  writer.writeFloat64BE(1.625);
214  writer.writeBool(false);
215  writer.writeBool(true);
216  writer.writeString("abc");
217  writer.writeLengthPrefixedString("ABC");
218  writer.writeLengthPrefixedString("012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
219  "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901"
220  "234567890123456789012345678901234567890123456789012345678901234567890123456789");
221  writer.writeTerminatedString("def");
222 
223  // test written values
224  for (char c : testData) {
225  CPPUNIT_ASSERT(c == static_cast<char>(testFile.get()));
226  }
227 
228  // test ownership
229  writer.setStream(nullptr, true);
230  writer.setStream(new fstream(), true);
231  BinaryWriter writer2(writer);
232  CPPUNIT_ASSERT(writer2.stream() == writer.stream());
233  CPPUNIT_ASSERT(!writer2.hasOwnership());
234  writer.setStream(&testFile, false);
235  writer.setStream(new fstream(), true);
236 }
237 
242 {
243  const byte testData[] = { 0x81, 0x90, 0x3C, 0x44, 0x28, 0x00, 0x44, 0x10, 0x20, 0xFF, 0xFA };
244  BitReader reader(reinterpret_cast<const char *>(testData), sizeof(testData));
245  CPPUNIT_ASSERT(reader.readBit() == 1);
246  reader.skipBits(6);
247  CPPUNIT_ASSERT(reader.showBits<byte>(2) == 3);
248  CPPUNIT_ASSERT(reader.readBits<byte>(2) == 3);
249  CPPUNIT_ASSERT(reader.readBits<uint32>(32) == (0x103C4428 << 1));
250  reader.align();
251  CPPUNIT_ASSERT(reader.readBits<byte>(8) == 0x44);
252  CPPUNIT_ASSERT(reader.readUnsignedExpGolombCodedBits<byte>() == 7);
253  CPPUNIT_ASSERT(reader.readSignedExpGolombCodedBits<sbyte>() == 4);
254  CPPUNIT_ASSERT(reader.readBit() == 0);
255  CPPUNIT_ASSERT(reader.readBit() == 0);
256  reader.skipBits(8 + 4);
257  CPPUNIT_ASSERT_EQUAL(4_st, reader.bitsAvailable());
258  CPPUNIT_ASSERT_EQUAL(static_cast<byte>(0xA), reader.readBits<byte>(4));
259  try {
260  reader.readBit();
261  CPPUNIT_FAIL("no exception");
262  } catch (...) {
263  catchIoFailure();
264  }
265  try {
266  reader.skipBits(1);
267  CPPUNIT_FAIL("no exception");
268  } catch (...) {
269  catchIoFailure();
270  }
271  reader.reset(reinterpret_cast<const char *>(testData), sizeof(testData));
272  CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(8 * sizeof(testData)), reader.bitsAvailable());
273 }
274 
279 {
280  CPPUNIT_ASSERT_EQUAL("libc++utilities.so"s, fileName("/usr/lib/libc++utilities.so"));
281  CPPUNIT_ASSERT_EQUAL("/usr/lib/"s, directory("/usr/lib/libc++utilities.so"));
282  CPPUNIT_ASSERT(directory("libc++utilities.so").empty());
283  string invalidPath("lib/c++uti*lities.so?");
284  removeInvalidChars(invalidPath);
285  CPPUNIT_ASSERT(invalidPath == "libc++utilities.so");
286 #ifdef PLATFORM_UNIX
287  const string iniFilePath = TestUtilities::testFilePath("test.ini");
288  const string testFilesDir = iniFilePath.substr(0, iniFilePath.size() - 9);
289  auto testFilesDirEntries = directoryEntries(testFilesDir.c_str(), DirectoryEntryType::All);
290  CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(), "test.ini") != testFilesDirEntries.cend());
291  CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(), ".") != testFilesDirEntries.cend());
292  CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(), "..") != testFilesDirEntries.cend());
293  testFilesDirEntries = directoryEntries(testFilesDir.c_str(), DirectoryEntryType::Directory);
294  CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(), "test.ini") == testFilesDirEntries.cend());
295  CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(), ".") != testFilesDirEntries.cend());
296  CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(), "..") != testFilesDirEntries.cend());
297  testFilesDirEntries = directoryEntries(testFilesDir.c_str(), DirectoryEntryType::File);
298  CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(), "test.ini") != testFilesDirEntries.cend());
299  CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(), ".") == testFilesDirEntries.cend());
300  CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(), "..") == testFilesDirEntries.cend());
301 #endif
302 }
303 
308 {
309  // prepare reading test file
310  fstream inputFile;
311  inputFile.exceptions(ios_base::failbit | ios_base::badbit);
312  inputFile.open(TestUtilities::testFilePath("test.ini"), ios_base::in);
313 
314  IniFile ini;
315  ini.parse(inputFile);
316  const auto globalScope = ini.data().at(0);
317  const auto scope1 = ini.data().at(1);
318  const auto scope2 = ini.data().at(2);
319  CPPUNIT_ASSERT(globalScope.first.empty());
320  CPPUNIT_ASSERT(globalScope.second.find("key0") != globalScope.second.cend());
321  CPPUNIT_ASSERT(globalScope.second.find("key0")->second == "value 0");
322  CPPUNIT_ASSERT(globalScope.second.find("key1") == globalScope.second.cend());
323  CPPUNIT_ASSERT(scope1.first == "scope 1");
324  CPPUNIT_ASSERT(scope1.second.find("key1") != scope1.second.cend());
325  CPPUNIT_ASSERT(scope1.second.find("key1")->second == "value 1");
326  CPPUNIT_ASSERT(scope1.second.find("key2") != scope1.second.cend());
327  CPPUNIT_ASSERT(scope1.second.find("key2")->second == "value=2");
328  CPPUNIT_ASSERT(scope2.first == "scope 2");
329  CPPUNIT_ASSERT(scope2.second.find("key5") == scope2.second.cend());
330 
331  // write values to another file
332  fstream outputFile;
333  outputFile.exceptions(ios_base::failbit | ios_base::badbit);
334  outputFile.open(workingCopyPathMode("output.ini", WorkingCopyMode::NoCopy), ios_base::out | ios_base::trunc);
335  ini.make(outputFile);
336 
337  // parse written values (again)
338  outputFile.close();
339  outputFile.open(workingCopyPathMode("output.ini", WorkingCopyMode::NoCopy), ios_base::in);
340  IniFile ini2;
341  ini2.parse(outputFile);
342  CPPUNIT_ASSERT(ini.data() == ini2.data());
343 }
344 
349 {
350  // prepare streams
351  fstream testFile;
352  testFile.exceptions(ios_base::failbit | ios_base::badbit);
353  testFile.open(TestUtilities::testFilePath("some_data"), ios_base::in | ios_base::binary);
354  stringstream outputStream(ios_base::in | ios_base::out | ios_base::binary);
355  outputStream.exceptions(ios_base::failbit | ios_base::badbit);
356 
357  // copy
358  CopyHelper<13> copyHelper;
359  copyHelper.copy(testFile, outputStream, 50);
360 
361  // test
362  testFile.seekg(0);
363  for (byte i = 0; i < 50; ++i) {
364  CPPUNIT_ASSERT(testFile.get() == outputStream.get());
365  }
366 }
367 
372 {
373  const string iniFilePath(testFilePath("test.ini"));
374  CPPUNIT_ASSERT_EQUAL("# file for testing INI parser\n"
375  "key0=value 0\n"
376  "\n"
377  "[scope 1]\n"
378  "key1=value 1 # comment\n"
379  "key2=value=2\n"
380  "key3=value 3\n"
381  "\n"
382  "[scope 2]\n"
383  "key4=value 4\n"
384  "#key5=value 5\n"
385  "key6=value 6\n"s,
386  readFile(iniFilePath));
387  try {
388  readFile(iniFilePath, 10);
389  CPPUNIT_FAIL("no exception");
390  } catch (...) {
391  catchIoFailure();
392  }
393 }
int64 readInt64LE()
Reads a 64-bit little endian signed integer from the current stream and advances the current position...
Definition: binaryreader.h:449
bool readBool()
Reads a boolean value from the current stream and advances the current position of the stream by one ...
Definition: binaryreader.h:504
void writeInt24LE(int32 value)
Writes a 24-bit little endian signed integer to the current stream and advances the current position ...
Definition: binarywriter.h:349
float32 readFloat32BE()
Reads a 32-bit big endian floating point value from the current stream and advances the current posit...
Definition: binaryreader.h:323
int64 readInt40BE()
Reads a 40-bit big endian signed integer from the current stream and advances the current position of...
Definition: binaryreader.h:257
int16 readInt16LE()
Reads a 16-bit little endian signed integer from the current stream and advances the current position...
Definition: binaryreader.h:341
void writeFloat64LE(float64 value)
Writes a 64-bit little endian floating point value to the current stream and advances the current pos...
Definition: binarywriter.h:455
void writeInt56LE(int64 value)
Writes a 56-bit big endian signed integer to the current stream and advances the current position of ...
Definition: binarywriter.h:409
Reads primitive data types from a std::istream.
Definition: binaryreader.h:11
float64 readFloat64LE()
Reads a 64-bit little endian floating point value from the current stream and advances the current po...
Definition: binaryreader.h:476
bool hasOwnership() const
Returns whether the writer takes ownership over the assigned stream.
Definition: binarywriter.h:104
int32 readInt32LE()
Reads a 32-bit little endian signed integer from the current stream and advances the current position...
Definition: binaryreader.h:383
Writes primitive data types to a std::ostream.
Definition: binarywriter.h:13
float32 readFloat32LE()
Reads a 32-bit little endian floating point value from the current stream and advances the current po...
Definition: binaryreader.h:467
intType readSignedExpGolombCodedBits()
Reads "Exp-Golomb coded" bits (signed).
Definition: bitreader.h:119
uint32 readUInt24BE()
Reads a 24-bit big endian unsigned integer from the current stream and advances the current position ...
Definition: binaryreader.h:229
int16 readInt16BE()
Reads a 16-bit big endian signed integer from the current stream and advances the current position of...
Definition: binaryreader.h:197
intType readUnsignedExpGolombCodedBits()
Reads "Exp-Golomb coded" bits (unsigned).
Definition: bitreader.h:102
CPP_UTILITIES_EXPORT std::list< std::string > directoryEntries(const char *path, DirectoryEntryType types=DirectoryEntryType::All)
Returns the names of the directory entries in the specified path with the specified types...
Definition: path.cpp:181
The ConversionException class is thrown by the various conversion functions of this library when a co...
void testBinaryReader()
Tests the most important methods of the BinaryReader.
Definition: iotests.cpp:96
void writeInt40LE(int64 value)
Writes a 40-bit big endian signed integer to the current stream and advances the current position of ...
Definition: binarywriter.h:389
The IoTests class tests classes and methods of the IoUtilities namespace.
Definition: iotests.cpp:31
void writeUInt24BE(uint32 value)
Writes a 24-bit big endian unsigned integer to the current stream and advances the current position o...
Definition: binarywriter.h:226
STL namespace.
void make(std::ostream &outputStream)
Write the current data to the specified outputStream.
Definition: inifile.cpp:153
void testCopy()
Tests CopyHelper.
Definition: iotests.cpp:348
void writeUInt16BE(uint16 value)
Writes a 16-bit big endian unsigned integer to the current stream and advances the current position o...
Definition: binarywriter.h:206
The CopyHelper class helps to copy bytes from one stream to another.
Definition: copy.h:16
void writeUInt56BE(uint64 value)
Writes a 56-bit big endian unsigned integer to the current stream and advances the current position o...
Definition: binarywriter.h:285
int64 readInt64BE()
Reads a 64-bit big endian signed integer from the current stream and advances the current position of...
Definition: binaryreader.h:305
Contains literals to ease asserting with CPPUNIT_ASSERT_EQUAL.
Definition: testutils.h:193
void writeUInt40BE(uint64 value)
Writes a 40-bit big endian unsigned integer to the current stream and advances the current position o...
Definition: binarywriter.h:265
void writeUInt16LE(uint16 value)
Writes a 16-bit little endian unsigned integer to the current stream and advances the current positio...
Definition: binarywriter.h:339
void writeBool(bool value)
Writes a boolean value to the current stream and advances the current position of the stream by one b...
Definition: binarywriter.h:189
void testMisc()
Tests misc IO utilities.
Definition: iotests.cpp:371
void writeUInt24LE(uint32 value)
Writes a 24-bit little endian unsigned integer to the current stream and advances the current positio...
Definition: binarywriter.h:360
The BitReader class provides bitwise reading of buffered data.
Definition: bitreader.h:14
float64 readFloat64BE()
Reads a 64-bit big endian floating point value from the current stream and advances the current posit...
Definition: binaryreader.h:332
std::vector< std::pair< std::string, std::multimap< std::string, std::string > > > & data()
Returns the data of the file.
Definition: inifile.h:38
int64 readInt56BE()
Reads a 56-bit big endian signed integer from the current stream and advances the current position of...
Definition: binaryreader.h:281
std::size_t bitsAvailable()
Returns the number of bits which are still available to read.
Definition: bitreader.h:137
uint64 readUInt56LE()
Reads a 56-bit little endian unsigned integer from the current stream and advances the current positi...
Definition: binaryreader.h:439
void writeInt16LE(int16 value)
Writes a 16-bit little endian signed integer to the current stream and advances the current position ...
Definition: binarywriter.h:330
CPP_UTILITIES_EXPORT std::string readFile(const std::string &path, std::string::size_type maxSize=std::string::npos)
Reads all contents of the specified file in a single call.
Definition: misc.cpp:16
bool hasOwnership() const
Returns whether the reader takes ownership over the assigned stream.
Definition: binaryreader.h:114
void writeLengthPrefixedString(const std::string &value)
Writes the length of a string and the string itself to the current stream.
uint32 readUInt32LE()
Reads a 32-bit little endian unsigned integer from the current stream and advances the current positi...
Definition: binaryreader.h:392
CPPUNIT_TEST_SUITE_REGISTRATION(IoTests)
void writeFloat64BE(float64 value)
Writes a 64-bit big endian floating point value to the current stream and advances the current positi...
Definition: binarywriter.h:321
void writeFloat32BE(float32 value)
Writes a 32-bit big endian floating point value to the current stream and advances the current positi...
Definition: binarywriter.h:312
uint32 readUInt32BE()
Reads a 32-bit big endian unsigned integer from the current stream and advances the current position ...
Definition: binaryreader.h:248
Contains utility classes helping to read and write streams.
Definition: binaryreader.h:10
Contains classes and functions utilizing creating of test applications.
Definition: testutils.h:11
void writeUInt40LE(uint64 value)
Writes a 40-bit big endian unsigned integer to the current stream and advances the current position o...
Definition: binarywriter.h:399
std::int8_t sbyte
signed byte
Definition: types.h:9
void setUp()
Definition: iotests.cpp:59
void testBinaryWriter()
Tests the most important methods of the BinaryWriter.
Definition: iotests.cpp:159
void setStream(std::ostream *stream, bool giveOwnership=false)
Assigns the stream the writer will write to when calling one of the write-methods.
void writeString(const std::string &value)
Writes a string to the current stream and advances the current position of the stream by the length o...
Definition: binarywriter.h:464
uint64 readUInt40BE()
Reads a 40-bit big endian unsigned integer from the current stream and advances the current position ...
Definition: binaryreader.h:271
void writeInt56BE(int64 value)
Writes a 56-bit big endian signed integer to the current stream and advances the current position of ...
Definition: binarywriter.h:275
Contains several functions providing conversions between different data types.
void copy(std::istream &input, std::ostream &output, std::size_t count)
Copies count bytes from input to output.
Definition: copy.h:40
std::istream::pos_type readStreamsize()
Returns the size of the assigned stream.
uint64 readUInt64BE()
Reads a 64-bit big endian unsigned integer from the current stream and advances the current position ...
Definition: binaryreader.h:314
std::uint32_t uint32
unsigned 32-bit integer
Definition: types.h:44
void writeUInt56LE(uint64 value)
Writes a 56-bit big endian unsigned integer to the current stream and advances the current position o...
Definition: binarywriter.h:419
uint16 readUInt16LE()
Reads a 16-bit little endian unsigned integer from the current stream and advances the current positi...
Definition: binaryreader.h:350
uint16 readUInt16BE()
Reads a 16-bit big endian unsigned integer from the current stream and advances the current position ...
Definition: binaryreader.h:206
void writeUInt32LE(uint32 value)
Writes a 32-bit little endian unsigned integer to the current stream and advances the current positio...
Definition: binarywriter.h:379
int32 readInt24LE()
Reads a 24-bit little endian signed integer from the current stream and advances the current position...
Definition: binaryreader.h:359
void writeInt32LE(int32 value)
Writes a 32-bit little endian signed integer to the current stream and advances the current position ...
Definition: binarywriter.h:370
void writeInt16BE(int16 value)
Writes a 16-bit big endian signed integer to the current stream and advances the current position of ...
Definition: binarywriter.h:197
void testPathUtilities()
Tests fileName() and removeInvalidChars().
Definition: iotests.cpp:278
void testIniFile()
Tests IniFile.
Definition: iotests.cpp:307
void writeInt64LE(int64 value)
Writes a 64-bit little endian signed integer to the current stream and advances the current position ...
Definition: binarywriter.h:428
void setStream(std::istream *stream, bool giveOwnership=false)
Assigns the stream the reader will read from when calling one of the read-methods.
CPP_UTILITIES_EXPORT std::string directory(const std::string &path)
Returns the directory of the specified path string (including trailing slash).
Definition: path.cpp:52
std::string readTerminatedString(byte termination=0)
Reads a terminated string from the current stream.
const std::ostream * stream() const
Returns a pointer to the stream the writer will write to when calling one of the write-methods.
Definition: binarywriter.h:92
void writeUInt32BE(uint32 value)
Writes a 32-bit big endian unsigned integer to the current stream and advances the current position o...
Definition: binarywriter.h:245
void writeInt24BE(int32 value)
Writes a 24-bit big endian signed integer to the current stream and advances the current position of ...
Definition: binarywriter.h:216
const std::istream * stream() const
Returns a pointer to the stream the reader will read from when calling one of the read-methods...
Definition: binaryreader.h:102
void skipBits(std::size_t bitCount)
Skips the specified number of bits without reading it.
Definition: bitreader.cpp:19
intType readBits(byte bitCount)
Reads the specified number of bits from the buffer advancing the current position by bitCount bits...
Definition: bitreader.h:68
void writeFloat32LE(float32 value)
Writes a 32-bit little endian floating point value to the current stream and advances the current pos...
Definition: binarywriter.h:446
void parse(std::istream &inputStream)
Parses all data from the specified inputStream.
Definition: inifile.cpp:18
int32 readInt32BE()
Reads a 32-bit big endian signed integer from the current stream and advances the current position of...
Definition: binaryreader.h:239
int32 readInt24BE()
Reads a 24-bit big endian signed integer from the current stream and advances the current position of...
Definition: binaryreader.h:215
std::uint8_t byte
unsigned byte
Definition: types.h:14
void reset(const char *buffer, std::size_t bufferSize)
Resets the reader.
Definition: bitreader.h:148
void writeInt64BE(int64 value)
Writes a 64-bit big endian signed integer to the current stream and advances the current position of ...
Definition: binarywriter.h:294
The IniFile class parses and makes INI files.
Definition: inifile.h:12
void testFailure()
Tests for GCC Bug 66145.
Definition: iotests.cpp:72
uint32 readUInt24LE()
Reads a 24-bit little endian unsigned integer from the current stream and advances the current positi...
Definition: binaryreader.h:373
int64 readInt56LE()
Reads a 56-bit little endian signed integer from the current stream and advances the current position...
Definition: binaryreader.h:425
byte readByte()
Reads a single byte/unsigned character from the current stream and advances the current position of t...
Definition: binaryreader.h:494
void writeUInt64LE(uint64 value)
Writes a 64-bit little endian unsigned integer to the current stream and advances the current positio...
Definition: binarywriter.h:437
void writeInt32BE(int32 value)
Writes a 32-bit big endian signed integer to the current stream and advances the current position of ...
Definition: binarywriter.h:236
CPP_UTILITIES_EXPORT const char * catchIoFailure()
Provides a workaround for GCC Bug 66145.
CPP_UTILITIES_EXPORT std::string fileName(const std::string &path)
Returns the file name and extension of the specified path string.
Definition: path.cpp:32
uint64 readUInt64LE()
Reads a 64-bit little endian unsigned integer from the current stream and advances the current positi...
Definition: binaryreader.h:458
void testBitReader()
Tests the BitReader.
Definition: iotests.cpp:241
CPP_UTILITIES_EXPORT void removeInvalidChars(std::string &fileName)
Removes invalid characters from the specified fileName.
Definition: path.cpp:74
void align()
Re-establishes alignment.
Definition: bitreader.h:171
void tearDown()
Definition: iotests.cpp:63
std::string readLengthPrefixedString()
Reads a length prefixed string from the current stream.
byte readBit()
Reads the one bit from the buffer advancing the current position by one bit.
Definition: bitreader.h:89
void writeUInt64BE(uint64 value)
Writes a 64-bit big endian unsigned integer to the current stream and advances the current position o...
Definition: binarywriter.h:303
void writeTerminatedString(const std::string &value)
Writes a terminated string to the current stream and advances the current position of the stream by t...
Definition: binarywriter.h:472
uint64 readUInt56BE()
Reads a 56-bit big endian unsigned integer from the current stream and advances the current position ...
Definition: binaryreader.h:295
std::string readString(std::size_t length)
Reads a string from the current stream of the given length from the stream and advances the current p...
int64 readInt40LE()
Reads a 40-bit little endian signed integer from the current stream and advances the current position...
Definition: binaryreader.h:401
CPP_UTILITIES_EXPORT std::string testFilePath(const std::string &name)
Convenience function which returns the full path of the test file with the specified name...
Definition: testutils.h:92
intType showBits(byte bitCount)
Reads the specified number of bits from the buffer without advancing the current position.
Definition: bitreader.h:128
uint64 readUInt40LE()
Reads a 40-bit little endian unsigned integer from the current stream and advances the current positi...
Definition: binaryreader.h:415
void writeInt40BE(int64 value)
Writes a 40-bit big endian signed integer to the current stream and advances the current position of ...
Definition: binarywriter.h:255