added more test cases
This commit is contained in:
parent
1d8177ba41
commit
80a4ce1790
|
@ -53,6 +53,7 @@ set(TEST_SRC_FILES
|
||||||
tests/cppunit.cpp
|
tests/cppunit.cpp
|
||||||
tests/conversiontests.cpp
|
tests/conversiontests.cpp
|
||||||
tests/iotests.cpp
|
tests/iotests.cpp
|
||||||
|
tests/chronotests.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
# meta data
|
# meta data
|
||||||
|
@ -120,12 +121,14 @@ set_target_properties(${META_PROJECT_NAME} PROPERTIES
|
||||||
|
|
||||||
# add check target
|
# add check target
|
||||||
if(NOT TARGET check)
|
if(NOT TARGET check)
|
||||||
|
set(CMAKE_CTEST_COMMAND ctest -V)
|
||||||
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
|
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
|
||||||
|
enable_testing()
|
||||||
endif()
|
endif()
|
||||||
add_executable(${META_PROJECT_NAME}_tests EXCLUDE_FROM_ALL ${TEST_HEADER_FILES} ${TEST_SRC_FILES})
|
add_executable(${META_PROJECT_NAME}_tests EXCLUDE_FROM_ALL ${TEST_HEADER_FILES} ${TEST_SRC_FILES})
|
||||||
target_link_libraries(${META_PROJECT_NAME}_tests c++utilities cppunit)
|
target_link_libraries(${META_PROJECT_NAME}_tests c++utilities cppunit)
|
||||||
set_target_properties(${META_PROJECT_NAME}_tests PROPERTIES CXX_STANDARD 11)
|
set_target_properties(${META_PROJECT_NAME}_tests PROPERTIES CXX_STANDARD 11)
|
||||||
add_test(NAME ${META_PROJECT_NAME}_tests COMMAND ${META_PROJECT_NAME}_tests)
|
add_test(NAME ${META_PROJECT_NAME}_cppunit COMMAND ${META_PROJECT_NAME}_tests -p "${CMAKE_CURRENT_SOURCE_DIR}/testfiles")
|
||||||
add_dependencies(check ${META_PROJECT_NAME}_tests)
|
add_dependencies(check ${META_PROJECT_NAME}_tests)
|
||||||
|
|
||||||
# add install target
|
# add install target
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,101 @@
|
||||||
|
#include "../chrono/datetime.h"
|
||||||
|
#include "../chrono/timespan.h"
|
||||||
|
#include "../chrono/period.h"
|
||||||
|
#include "../conversion/conversionexception.h"
|
||||||
|
|
||||||
|
#include <cppunit/extensions/HelperMacros.h>
|
||||||
|
#include <cppunit/TestFixture.h>
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace ConversionUtilities;
|
||||||
|
using namespace ChronoUtilities;
|
||||||
|
|
||||||
|
using namespace CPPUNIT_NS;
|
||||||
|
|
||||||
|
class ChronoTests : public TestFixture
|
||||||
|
{
|
||||||
|
CPPUNIT_TEST_SUITE(ChronoTests);
|
||||||
|
CPPUNIT_TEST(testDateTime);
|
||||||
|
CPPUNIT_TEST(testTimeSpan);
|
||||||
|
CPPUNIT_TEST(testOperators);
|
||||||
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
|
||||||
|
public:
|
||||||
|
void setUp() {}
|
||||||
|
void tearDown() {}
|
||||||
|
|
||||||
|
void testDateTime();
|
||||||
|
void testTimeSpan();
|
||||||
|
void testOperators();
|
||||||
|
};
|
||||||
|
|
||||||
|
CPPUNIT_TEST_SUITE_REGISTRATION(ChronoTests);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Tests most important DateTime features.
|
||||||
|
*/
|
||||||
|
void ChronoTests::testDateTime()
|
||||||
|
{
|
||||||
|
// test year(), month(), ...
|
||||||
|
auto test1 = DateTime::fromDateAndTime(2012, 2, 29, 15, 34, 20, 33.0);
|
||||||
|
CPPUNIT_ASSERT(test1.year() == 2012);
|
||||||
|
CPPUNIT_ASSERT(test1.month() == 2);
|
||||||
|
CPPUNIT_ASSERT(test1.day() == 29);
|
||||||
|
CPPUNIT_ASSERT(test1.minute() == 34);
|
||||||
|
CPPUNIT_ASSERT(test1.second() == 20);
|
||||||
|
CPPUNIT_ASSERT(test1.millisecond() == 33);
|
||||||
|
CPPUNIT_ASSERT(test1.dayOfWeek() == DayOfWeek::Wednesday);
|
||||||
|
CPPUNIT_ASSERT(test1.dayOfYear() == (31 + 29));
|
||||||
|
CPPUNIT_ASSERT(test1.isLeapYear());
|
||||||
|
CPPUNIT_ASSERT(test1.toString(DateTimeOutputFormat::DateTimeAndShortWeekday) == "Wed 2012-02-29 15:34:20.33");
|
||||||
|
|
||||||
|
// test fromTimeStamp()
|
||||||
|
auto test2 = DateTime::fromTimeStampGmt(1453840331);
|
||||||
|
CPPUNIT_ASSERT(test2.toString(DateTimeOutputFormat::DateTimeAndShortWeekday) == "Tue 2016-01-26 20:32:11");
|
||||||
|
|
||||||
|
// test whether ConversionException() is thrown when invalid values are specified
|
||||||
|
CPPUNIT_ASSERT_THROW(DateTime::fromDateAndTime(2013, 2, 29, 15, 34, 20, 33), ConversionException);
|
||||||
|
CPPUNIT_ASSERT_THROW(DateTime::fromDateAndTime(2012, 2, 29, 15, 61, 20, 33), ConversionException);
|
||||||
|
CPPUNIT_ASSERT_THROW(DateTime::fromDateAndTime(2012, 4, 31, 15, 0, 20, 33), ConversionException);
|
||||||
|
CPPUNIT_ASSERT_THROW(DateTime::fromDateAndTime(2012, 3, 31, 15, 0, 61, 33), ConversionException);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Tests most important TimeSpan features.
|
||||||
|
*/
|
||||||
|
void ChronoTests::testTimeSpan()
|
||||||
|
{
|
||||||
|
// test fromString(...), this should also test all other from...() methods and + operator
|
||||||
|
auto test1 = TimeSpan::fromString("2:34:53:2.5");
|
||||||
|
// test days(), hours(), ...
|
||||||
|
CPPUNIT_ASSERT(test1.days() == 3);
|
||||||
|
CPPUNIT_ASSERT(test1.hours() == 10);
|
||||||
|
CPPUNIT_ASSERT(test1.minutes() == 53);
|
||||||
|
CPPUNIT_ASSERT(test1.seconds() == 2);
|
||||||
|
CPPUNIT_ASSERT(test1.milliseconds() == 500);
|
||||||
|
CPPUNIT_ASSERT(test1.totalDays() > 3.0 && test1.totalDays() < 4.0);
|
||||||
|
CPPUNIT_ASSERT(test1.totalHours() > (2 * 24 + 34) && test1.totalHours() < (2 * 24 + 35));
|
||||||
|
CPPUNIT_ASSERT(test1.totalMinutes() > (2 * 24 * 60 + 34 * 60 + 53) && test1.totalHours() < (2 * 24 * 60 + 34 * 60 + 54));
|
||||||
|
CPPUNIT_ASSERT(test1.toString(TimeSpanOutputFormat::WithMeasures, false) == "3 d 10 h 53 min 2 s 500 ms");
|
||||||
|
|
||||||
|
// test whether ConversionException() is thrown when invalid values are specified
|
||||||
|
CPPUNIT_ASSERT_THROW(TimeSpan::fromString("2:34a:53:32.5"), ConversionException);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Tests operators of DateTime / TimeSpan.
|
||||||
|
*/
|
||||||
|
void ChronoTests::testOperators()
|
||||||
|
{
|
||||||
|
auto dateTime = DateTime::fromDateAndTime(1999, 1, 5, 4, 16);
|
||||||
|
CPPUNIT_ASSERT((dateTime + TimeSpan::fromDays(2)).day() == 7);
|
||||||
|
CPPUNIT_ASSERT((dateTime + TimeSpan::fromHours(24)).day() == 6);
|
||||||
|
CPPUNIT_ASSERT((dateTime + TimeSpan::fromHours(24) + TimeSpan::fromHours(-1)).hour() == 3);
|
||||||
|
CPPUNIT_ASSERT((dateTime + TimeSpan::fromHours(24) - TimeSpan::fromMinutes(-1)).minute() == 17);
|
||||||
|
dateTime += TimeSpan::fromDays(365);
|
||||||
|
CPPUNIT_ASSERT(dateTime.year() == 2000);
|
||||||
|
CPPUNIT_ASSERT(dateTime.day() == 5);
|
||||||
|
CPPUNIT_ASSERT(Period(dateTime, dateTime + TimeSpan::fromDays(62)).months() == 2);
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
#include "../conversion/binaryconversion.h"
|
#include "../conversion/binaryconversion.h"
|
||||||
|
#include "../conversion/stringconversion.h"
|
||||||
|
|
||||||
#include <cppunit/extensions/HelperMacros.h>
|
#include <cppunit/extensions/HelperMacros.h>
|
||||||
#include <cppunit/TestFixture.h>
|
#include <cppunit/TestFixture.h>
|
||||||
|
@ -6,6 +7,7 @@
|
||||||
#include <random>
|
#include <random>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include <initializer_list>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace ConversionUtilities;
|
using namespace ConversionUtilities;
|
||||||
|
@ -17,6 +19,7 @@ class ConversionTests : public TestFixture
|
||||||
CPPUNIT_TEST_SUITE(ConversionTests);
|
CPPUNIT_TEST_SUITE(ConversionTests);
|
||||||
CPPUNIT_TEST(testEndianness);
|
CPPUNIT_TEST(testEndianness);
|
||||||
CPPUNIT_TEST(testBinaryConversions);
|
CPPUNIT_TEST(testBinaryConversions);
|
||||||
|
CPPUNIT_TEST(testStringConversions);
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -27,6 +30,7 @@ public:
|
||||||
|
|
||||||
void testEndianness();
|
void testEndianness();
|
||||||
void testBinaryConversions();
|
void testBinaryConversions();
|
||||||
|
void testStringConversions();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
template<typename intType>
|
template<typename intType>
|
||||||
|
@ -69,8 +73,7 @@ void ConversionTests::testConversion(const char *message, function<void (intType
|
||||||
stringstream msg;
|
stringstream msg;
|
||||||
msg << message << '(' << hex << '0' << 'x' << random << ')';
|
msg << message << '(' << hex << '0' << 'x' << random << ')';
|
||||||
vice(random, m_buff);
|
vice(random, m_buff);
|
||||||
const intType result = versa(m_buff);
|
CPPUNIT_ASSERT_MESSAGE(msg.str(), versa(m_buff) == random);
|
||||||
CPPUNIT_ASSERT_MESSAGE(msg.str(), result == random);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define TEST_TYPE(endianness, function) \
|
#define TEST_TYPE(endianness, function) \
|
||||||
|
@ -104,20 +107,19 @@ void ConversionTests::testConversion(const char *message, function<void (intType
|
||||||
)
|
)
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Tests some binary conversions.
|
* \brief Tests most important binary conversions.
|
||||||
*
|
*
|
||||||
* Tests toUInt16(), ... toUInt64(), toInt16(), ... toInt64() and
|
* Tests toUInt16(), ... toUInt64(), toInt16(), ... toInt64() and
|
||||||
* the inverse getBytes() functions.
|
* the inverse getBytes() functions with random numbers.
|
||||||
*/
|
*/
|
||||||
void ConversionTests::testBinaryConversions()
|
void ConversionTests::testBinaryConversions()
|
||||||
{
|
{
|
||||||
for(byte b = 0; b < 100; ++b) {
|
// test to...() / getBytes() with random numbers
|
||||||
|
for(byte b = 1; b < 100; ++b) {
|
||||||
TEST_BE_CONVERSION(toUInt16);
|
TEST_BE_CONVERSION(toUInt16);
|
||||||
TEST_CUSTOM_CONVERSION(getBytes24, toUInt24, BE, 0, 0xFFFFFF);
|
|
||||||
TEST_BE_CONVERSION(toUInt32);
|
TEST_BE_CONVERSION(toUInt32);
|
||||||
TEST_BE_CONVERSION(toUInt64);
|
TEST_BE_CONVERSION(toUInt64);
|
||||||
TEST_LE_CONVERSION(toUInt16);
|
TEST_LE_CONVERSION(toUInt16);
|
||||||
TEST_CUSTOM_CONVERSION(getBytes24, toUInt24, LE, 0, 0xFFFFFF);
|
|
||||||
TEST_LE_CONVERSION(toUInt32);
|
TEST_LE_CONVERSION(toUInt32);
|
||||||
TEST_LE_CONVERSION(toUInt64);
|
TEST_LE_CONVERSION(toUInt64);
|
||||||
TEST_BE_CONVERSION(toInt16);
|
TEST_BE_CONVERSION(toInt16);
|
||||||
|
@ -126,6 +128,68 @@ void ConversionTests::testBinaryConversions()
|
||||||
TEST_LE_CONVERSION(toInt16);
|
TEST_LE_CONVERSION(toInt16);
|
||||||
TEST_LE_CONVERSION(toInt32);
|
TEST_LE_CONVERSION(toInt32);
|
||||||
TEST_LE_CONVERSION(toInt64);
|
TEST_LE_CONVERSION(toInt64);
|
||||||
|
TEST_CUSTOM_CONVERSION(getBytes24, toUInt24, BE, 0, 0xFFFFFF);
|
||||||
|
TEST_CUSTOM_CONVERSION(getBytes24, toUInt24, LE, 0, 0xFFFFFF);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Tests most important string conversions.
|
||||||
|
*/
|
||||||
|
void ConversionTests::testStringConversions()
|
||||||
|
{
|
||||||
|
// test stringToNumber() / numberToString() with random numbers
|
||||||
|
uniform_int_distribution<int64> randomDistSigned(numeric_limits<int64>::min());
|
||||||
|
uniform_int_distribution<uint64> randomDistUnsigned(0);
|
||||||
|
for(byte b = 1; b < 100; ++b) {
|
||||||
|
auto signedRandom = randomDistSigned(m_randomEngine);
|
||||||
|
auto unsignedRandom = randomDistUnsigned(m_randomEngine);
|
||||||
|
for(const auto base : initializer_list<byte>{2, 8, 10, 16}) {
|
||||||
|
auto resultString = stringToNumber<uint64, string>(numberToString<uint64, string>(unsignedRandom, base), base);
|
||||||
|
auto resultWideString = stringToNumber<uint64, wstring>(numberToString<uint64, wstring>(unsignedRandom, base), base);
|
||||||
|
CPPUNIT_ASSERT(resultString == unsignedRandom);
|
||||||
|
CPPUNIT_ASSERT(resultWideString == unsignedRandom);
|
||||||
|
}
|
||||||
|
for(const auto base : initializer_list<byte>{10}) {
|
||||||
|
auto resultString = stringToNumber<int64, string>(numberToString<int64, string>(signedRandom, base), base);
|
||||||
|
auto resultWideString = stringToNumber<int64, wstring>(numberToString<int64, wstring>(signedRandom, base), base);
|
||||||
|
CPPUNIT_ASSERT(resultString == signedRandom);
|
||||||
|
CPPUNIT_ASSERT(resultWideString == signedRandom);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// test interpretIntegerAsString()
|
||||||
|
CPPUNIT_ASSERT(interpretIntegerAsString<uint32>(0x54455354) == "TEST");
|
||||||
|
|
||||||
|
// test splitString() / joinStrings()
|
||||||
|
auto splitJoinTest = joinStrings(splitString<vector<string> >(",a,,ab,ABC,s", ",", EmptyPartsTreat::Keep), " ", false, "(", ")");
|
||||||
|
CPPUNIT_ASSERT(splitJoinTest == "() (a) () (ab) (ABC) (s)");
|
||||||
|
splitJoinTest = joinStrings(splitString<vector<string> >(",a,,ab,ABC,s", ",", EmptyPartsTreat::Keep), " ", true, "(", ")");
|
||||||
|
CPPUNIT_ASSERT(splitJoinTest == "(a) (ab) (ABC) (s)");
|
||||||
|
splitJoinTest = joinStrings(splitString<vector<string> >(",a,,ab,ABC,s", ",", EmptyPartsTreat::Omit), " ", false, "(", ")");
|
||||||
|
CPPUNIT_ASSERT(splitJoinTest == "(a) (ab) (ABC) (s)");
|
||||||
|
splitJoinTest = joinStrings(splitString<vector<string> >(",a,,ab,ABC,s", ",", EmptyPartsTreat::Merge), " ", false, "(", ")");
|
||||||
|
CPPUNIT_ASSERT(splitJoinTest == "(a,ab) (ABC) (s)");
|
||||||
|
|
||||||
|
// test findAndReplace()
|
||||||
|
string findReplaceTest("findAndReplace()");
|
||||||
|
findAndReplace<string>(findReplaceTest, "And", "Or");
|
||||||
|
CPPUNIT_ASSERT(findReplaceTest == "findOrReplace()");
|
||||||
|
|
||||||
|
// test startsWith()
|
||||||
|
CPPUNIT_ASSERT(!startsWith<string>(findReplaceTest, "findAnd"));
|
||||||
|
CPPUNIT_ASSERT(startsWith<string>(findReplaceTest, "findOr"));
|
||||||
|
|
||||||
|
// test encodeBase64() / decodeBase64() with random data
|
||||||
|
uniform_int_distribution<byte> randomDistChar;
|
||||||
|
byte originalBase64Data[4047];
|
||||||
|
for(byte &c : originalBase64Data) {
|
||||||
|
c = randomDistChar(m_randomEngine);
|
||||||
|
}
|
||||||
|
const auto encodedBase64Data = encodeBase64(originalBase64Data, sizeof(originalBase64Data));
|
||||||
|
auto decodedBase64Data = decodeBase64(encodedBase64Data.data(), encodedBase64Data.size());
|
||||||
|
CPPUNIT_ASSERT(decodedBase64Data.second == sizeof(originalBase64Data));
|
||||||
|
for(unsigned int i = 0; i < sizeof(originalBase64Data); ++i) {
|
||||||
|
CPPUNIT_ASSERT(decodedBase64Data.first[i] == originalBase64Data[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,49 @@
|
||||||
|
#include "../application/argumentparser.h"
|
||||||
|
#include "../application/failure.h"
|
||||||
|
|
||||||
#include <cppunit/extensions/TestFactoryRegistry.h>
|
#include <cppunit/extensions/TestFactoryRegistry.h>
|
||||||
#include <cppunit/ui/text/TestRunner.h>
|
#include <cppunit/ui/text/TestRunner.h>
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
using namespace ApplicationUtilities;
|
||||||
using namespace CPPUNIT_NS;
|
using namespace CPPUNIT_NS;
|
||||||
|
|
||||||
int main(int , char **)
|
namespace UnitTests {
|
||||||
{
|
|
||||||
TextUi::TestRunner runner;
|
string testFilesPath("tests");
|
||||||
TestFactoryRegistry ®istry = TestFactoryRegistry::getRegistry();
|
|
||||||
runner.addTest(registry.makeTest());
|
}
|
||||||
return !runner.run(string(), false);
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
// setup argument parser
|
||||||
|
ArgumentParser parser;
|
||||||
|
HelpArgument helpArg(parser);
|
||||||
|
Argument testFilesPathArg("test-files-path", "p", "specifies the path to the directory with test files");
|
||||||
|
testFilesPathArg.setRequiredValueCount(1);
|
||||||
|
testFilesPathArg.setValueNames({"path"});
|
||||||
|
testFilesPathArg.setCombinable(true);
|
||||||
|
parser.setMainArguments({&testFilesPathArg, &helpArg});
|
||||||
|
|
||||||
|
try {
|
||||||
|
// parse arguments
|
||||||
|
parser.parseArgs(argc, argv);
|
||||||
|
if(testFilesPathArg.isPresent()) {
|
||||||
|
UnitTests::testFilesPath = testFilesPathArg.values().front();
|
||||||
|
}
|
||||||
|
cerr << "Direcoty for test files: " << UnitTests::testFilesPath << endl;
|
||||||
|
|
||||||
|
// run tests
|
||||||
|
TextUi::TestRunner runner;
|
||||||
|
TestFactoryRegistry ®istry = TestFactoryRegistry::getRegistry();
|
||||||
|
runner.addTest(registry.makeTest());
|
||||||
|
return !runner.run(string(), false);
|
||||||
|
} catch(const Failure &failure) {
|
||||||
|
cerr << "Invalid arguments specified: " << failure.what() << endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,25 +1,46 @@
|
||||||
|
#include "../io/binaryreader.h"
|
||||||
|
#include "../io/binarywriter.h"
|
||||||
|
|
||||||
#include <cppunit/extensions/HelperMacros.h>
|
#include <cppunit/extensions/HelperMacros.h>
|
||||||
#include <cppunit/TestFixture.h>
|
#include <cppunit/TestFixture.h>
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
using namespace IoUtilities;
|
||||||
|
|
||||||
using namespace CPPUNIT_NS;
|
using namespace CPPUNIT_NS;
|
||||||
|
|
||||||
|
namespace UnitTests {
|
||||||
|
extern string testFilesPath;
|
||||||
|
}
|
||||||
|
|
||||||
class IoTests : public TestFixture
|
class IoTests : public TestFixture
|
||||||
{
|
{
|
||||||
CPPUNIT_TEST_SUITE(IoTests);
|
CPPUNIT_TEST_SUITE(IoTests);
|
||||||
CPPUNIT_TEST(testFailure);
|
CPPUNIT_TEST(testFailure);
|
||||||
|
CPPUNIT_TEST(testBinaryReader);
|
||||||
|
CPPUNIT_TEST(testBinaryWriter);
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void setUp() {}
|
void setUp();
|
||||||
void tearDown() {}
|
void tearDown();
|
||||||
|
|
||||||
void testFailure();
|
void testFailure();
|
||||||
|
void testBinaryReader();
|
||||||
|
void testBinaryWriter();
|
||||||
};
|
};
|
||||||
|
|
||||||
CPPUNIT_TEST_SUITE_REGISTRATION(IoTests);
|
CPPUNIT_TEST_SUITE_REGISTRATION(IoTests);
|
||||||
|
|
||||||
|
void IoTests::setUp()
|
||||||
|
{}
|
||||||
|
|
||||||
|
void IoTests::tearDown()
|
||||||
|
{}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Tests for GCC Bug 66145.
|
* \brief Tests for GCC Bug 66145.
|
||||||
* \sa https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66145
|
* \sa https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66145
|
||||||
|
@ -30,3 +51,117 @@ void IoTests::testFailure()
|
||||||
stream.exceptions(ios_base::failbit | ios_base::badbit);
|
stream.exceptions(ios_base::failbit | ios_base::badbit);
|
||||||
CPPUNIT_ASSERT_THROW(stream.open("path/to/file/which/does/not/exist", ios_base::in), ios_base::failure);
|
CPPUNIT_ASSERT_THROW(stream.open("path/to/file/which/does/not/exist", ios_base::in), ios_base::failure);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Tests the most important methods of the BinaryReader.
|
||||||
|
*/
|
||||||
|
void IoTests::testBinaryReader()
|
||||||
|
{
|
||||||
|
// read test file
|
||||||
|
fstream testFile;
|
||||||
|
testFile.open(UnitTests::testFilesPath + "/some_data", ios_base::in | ios_base::binary);
|
||||||
|
BinaryReader reader(&testFile);
|
||||||
|
CPPUNIT_ASSERT(reader.readUInt16LE() == 0x0102u);
|
||||||
|
CPPUNIT_ASSERT(reader.readUInt16BE() == 0x0102u);
|
||||||
|
CPPUNIT_ASSERT(reader.readUInt24LE() == 0x010203u);
|
||||||
|
CPPUNIT_ASSERT(reader.readUInt24BE() == 0x010203u);
|
||||||
|
CPPUNIT_ASSERT(reader.readUInt32LE() == 0x01020304u);
|
||||||
|
CPPUNIT_ASSERT(reader.readUInt32BE() == 0x01020304u);
|
||||||
|
CPPUNIT_ASSERT(reader.readUInt40LE() == 0x0102030405u);
|
||||||
|
CPPUNIT_ASSERT(reader.readUInt40BE() == 0x0102030405u);
|
||||||
|
CPPUNIT_ASSERT(reader.readUInt56LE() == 0x01020304050607u);
|
||||||
|
CPPUNIT_ASSERT(reader.readUInt56BE() == 0x01020304050607u);
|
||||||
|
CPPUNIT_ASSERT(reader.readUInt64LE() == 0x0102030405060708u);
|
||||||
|
CPPUNIT_ASSERT(reader.readUInt64BE() == 0x0102030405060708u);
|
||||||
|
testFile.seekg(0);
|
||||||
|
CPPUNIT_ASSERT(reader.readInt16LE() == 0x0102);
|
||||||
|
CPPUNIT_ASSERT(reader.readInt16BE() == 0x0102);
|
||||||
|
CPPUNIT_ASSERT(reader.readInt24LE() == 0x010203);
|
||||||
|
CPPUNIT_ASSERT(reader.readInt24BE() == 0x010203);
|
||||||
|
CPPUNIT_ASSERT(reader.readInt32LE() == 0x01020304);
|
||||||
|
CPPUNIT_ASSERT(reader.readInt32BE() == 0x01020304);
|
||||||
|
CPPUNIT_ASSERT(reader.readInt40LE() == 0x0102030405);
|
||||||
|
CPPUNIT_ASSERT(reader.readInt40BE() == 0x0102030405);
|
||||||
|
CPPUNIT_ASSERT(reader.readInt56LE() == 0x01020304050607);
|
||||||
|
CPPUNIT_ASSERT(reader.readInt56BE() == 0x01020304050607);
|
||||||
|
CPPUNIT_ASSERT(reader.readInt64LE() == 0x0102030405060708);
|
||||||
|
CPPUNIT_ASSERT(reader.readInt64BE() == 0x0102030405060708);
|
||||||
|
CPPUNIT_ASSERT(reader.readFloat32LE() == 1.125);
|
||||||
|
CPPUNIT_ASSERT(reader.readFloat64LE() == 1.625);
|
||||||
|
CPPUNIT_ASSERT(reader.readFloat32BE() == 1.125);
|
||||||
|
CPPUNIT_ASSERT(reader.readFloat64BE() == 1.625);
|
||||||
|
CPPUNIT_ASSERT(reader.readBool() == false);
|
||||||
|
CPPUNIT_ASSERT(reader.readBool() == true);
|
||||||
|
CPPUNIT_ASSERT(reader.readString(3) == "abc");
|
||||||
|
CPPUNIT_ASSERT(reader.readLengthPrefixedString() == "ABC");
|
||||||
|
CPPUNIT_ASSERT(reader.readTerminatedString() == "def");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Tests the most important methods of the BinaryWriter.
|
||||||
|
*/
|
||||||
|
void IoTests::testBinaryWriter()
|
||||||
|
{
|
||||||
|
// prepare reading expected data
|
||||||
|
fstream testFile;
|
||||||
|
testFile.open(UnitTests::testFilesPath + "/some_data", ios_base::in | ios_base::binary);
|
||||||
|
|
||||||
|
// prepare output stream
|
||||||
|
stringstream outputStream(ios_base::in | ios_base::out | ios_base::binary);
|
||||||
|
outputStream.exceptions(ios_base::failbit | ios_base::badbit);
|
||||||
|
char testData[95];
|
||||||
|
outputStream.rdbuf()->pubsetbuf(testData, sizeof(testData));
|
||||||
|
|
||||||
|
// write test data
|
||||||
|
BinaryWriter writer(&outputStream);
|
||||||
|
writer.writeUInt16LE(0x0102u);
|
||||||
|
writer.writeUInt16BE(0x0102u);
|
||||||
|
writer.writeUInt24LE(0x010203u);
|
||||||
|
writer.writeUInt24BE(0x010203u);
|
||||||
|
writer.writeUInt32LE(0x01020304u);
|
||||||
|
writer.writeUInt32BE(0x01020304u);
|
||||||
|
writer.writeUInt40LE(0x0102030405u);
|
||||||
|
writer.writeUInt40BE(0x0102030405u);
|
||||||
|
writer.writeUInt56LE(0x01020304050607u);
|
||||||
|
writer.writeUInt56BE(0x01020304050607u);
|
||||||
|
writer.writeUInt64LE(0x0102030405060708u);
|
||||||
|
writer.writeUInt64BE(0x0102030405060708u);
|
||||||
|
|
||||||
|
// test written values
|
||||||
|
for(char c : testData) {
|
||||||
|
CPPUNIT_ASSERT(c == static_cast<char>(testFile.get()));
|
||||||
|
if(testFile.tellg() >= 58) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
testFile.seekg(0);
|
||||||
|
outputStream.seekp(0);
|
||||||
|
|
||||||
|
// write more test data
|
||||||
|
writer.writeInt16LE(0x0102);
|
||||||
|
writer.writeInt16BE(0x0102);
|
||||||
|
writer.writeInt24LE(0x010203);
|
||||||
|
writer.writeInt24BE(0x010203);
|
||||||
|
writer.writeInt32LE(0x01020304);
|
||||||
|
writer.writeInt32BE(0x01020304);
|
||||||
|
writer.writeInt40LE(0x0102030405);
|
||||||
|
writer.writeInt40BE(0x0102030405);
|
||||||
|
writer.writeInt56LE(0x01020304050607);
|
||||||
|
writer.writeInt56BE(0x01020304050607);
|
||||||
|
writer.writeInt64LE(0x0102030405060708);
|
||||||
|
writer.writeInt64BE(0x0102030405060708);
|
||||||
|
writer.writeFloat32LE(1.125);
|
||||||
|
writer.writeFloat64LE(1.625);
|
||||||
|
writer.writeFloat32BE(1.125);
|
||||||
|
writer.writeFloat64BE(1.625);
|
||||||
|
writer.writeBool(false);
|
||||||
|
writer.writeBool(true);
|
||||||
|
writer.writeString("abc");
|
||||||
|
writer.writeLengthPrefixedString("ABC");
|
||||||
|
writer.writeTerminatedString("def");
|
||||||
|
|
||||||
|
// test written values
|
||||||
|
for(char c : testData) {
|
||||||
|
CPPUNIT_ASSERT(c == static_cast<char>(testFile.get()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue