#if ENABLE_UNIT_TESTS #include "../../external/Catch/catch.hpp" #include #include "../SymbolInfoWriter.h" using namespace mapfileparser; #pragma pack(push, p1, 4) struct SymbolInfo { int64_t address; int32_t length; }; #pragma pack(pop, p1) class SymbolInfoWriterFixture { public: SymbolInfoWriterFixture() { Symbol codeSymbol1 = { 100, 10, "Symbol1Name_m03D674052100D1E9D6214ADD31FE7E5F7E6788DA", "Symbol1ObjectFile", kSegmentTypeCode }; Symbol codeSymbol2 = { 200, 20, "Symbol2Name_m03D674052100D1E9D6214ADD31FE7E5F7E6788DB", "Symbol2ObjectFile", kSegmentTypeCode }; Symbol dataSymbol = { 300, 30, "Symbol3Name_m03D674052100D1E9D6214ADD31FE7E5F7E6788DC", "Symbol3ObjectFile", kSegmentTypeData }; mapFile.symbols.push_back(codeSymbol1); mapFile.symbols.push_back(codeSymbol2); mapFile.symbols.push_back(dataSymbol); SymbolInfoWriter::Write(output, mapFile); } int32_t ReadActualNumberOfSymbols() { int32_t numberOfSymbols = 0; output.read(reinterpret_cast(&numberOfSymbols), sizeof(numberOfSymbols)); return numberOfSymbols; } SymbolInfo ReadOneSymbolInfo() { SymbolInfo symbolInfo; output.read(reinterpret_cast(&symbolInfo), sizeof(symbolInfo)); return symbolInfo; } MapFile mapFile; std::stringstream output; }; TEST_CASE_METHOD(SymbolInfoWriterFixture, "VerifyOnlySymbolsWithACodeSegmentAreWritten") { REQUIRE(2 == ReadActualNumberOfSymbols()); } TEST_CASE_METHOD(SymbolInfoWriterFixture, "VerifySymbolInformationForFirstSymbol") { ReadActualNumberOfSymbols(); SymbolInfo actualInfo = ReadOneSymbolInfo(); REQUIRE(100 == actualInfo.address); REQUIRE(10 == actualInfo.length); } TEST_CASE_METHOD(SymbolInfoWriterFixture, "VerifySymbolInformationForSecondSymbol") { ReadActualNumberOfSymbols(); ReadOneSymbolInfo(); SymbolInfo actualInfo = ReadOneSymbolInfo(); REQUIRE(200 == actualInfo.address); REQUIRE(20 == actualInfo.length); } #endif // ENABLE_UNIT_TESTS