#if ENABLE_UNIT_TESTS #include "../../../external/Catch/catch.hpp" #include #include "../../MSVC/MSVCMapFileParser.h" using namespace mapfileparser; static const char* mockMapFile = "\ _test\n\ \n\ Timestamp is 5559f772 (Mon May 18 10:30 : 10 2015)\n\ \n\ Preferred load address is 00400000\n\ \n\ Start Length Name Class\n\ 0001:00000000 0096f9beH .text CODE\n\ 0001:0096f9c0 00089033H .text$x CODE\n\ 0001:009f8a00 00039714H .text$yc CODE\n\ 0001:00a32120 00000411H .text$yd CODE\n\ 0002:00000000 00000304H .idata$5 DATA\n\ 0002:00000304 00000004H .CRT$XCA DATA\n\ 0002:00000308 0000000cH .CRT$XCC DATA\n\ 0002:00000314 0000001cH .CRT$XCL DATA\n\ 0002:00000330 000000ecH .CRT$XCU DATA\n\ 0002:0000041c 00000004H .CRT$XCZ DATA\n\ 0002:00000420 00000004H .CRT$XIA DATA\n\ 0002:00000424 00000014H .CRT$XIC DATA\n\ 0002:00000438 00000004H .CRT$XID DATA\n\ 0002:0000043c 00000004H .CRT$XIY DATA\n\ 0002:00000440 00000004H .CRT$XIZ DATA\n\ 0002:00000444 00000004H .CRT$XPA DATA\n\ 0002:00000448 00000008H .CRT$XPX DATA\n\ 0002:00000450 00000004H .CRT$XPXA DATA\n\ 0002:00000454 00000004H .CRT$XPZ DATA\n\ 0002:00000458 00000004H .CRT$XTA DATA\n\ 0002:0000045c 00000004H .CRT$XTZ DATA\n\ 0002:00000460 0018a7e8H .rdata DATA\n\ 0002:0018ac48 0000007bH .rdata$debug DATA\n\ 0002:0018acc4 00000cd4H .rdata$r DATA\n\ 0002:0018b9a0 0000f1acH .rdata$sxdata DATA\n\ 0002:0019ab4c 00000004H .rtc$IAA DATA\n\ 0002:0019ab50 00000004H .rtc$IZZ DATA\n\ 0002:0019ab54 00000004H .rtc$TAA DATA\n\ 0002:0019ab58 00000004H .rtc$TZZ DATA\n\ 0002:0019ab60 000b6c1cH .xdata$x DATA\n\ 0002:0025177c 00000078H .idata$2 DATA\n\ 0002:002517f4 00000014H .idata$3 DATA\n\ 0002:00251808 00000304H .idata$4 DATA\n\ 0002:00251b0c 00000bcaH .idata$6 DATA\n\ 0002:002526e0 000016fbH .edata DATA\n\ 0003:00000000 0023deb4H .data DATA\n\ 0003:0023dec0 0004b020H .bss DATA\n\ \n\ Address Publics by Value Rva+Base Lib:Object\n\ \n\ 0000:00000000 __except_list 00000000 \n\ 0000:00003c6b ___safe_se_handler_count 00003c6b \n\ 0000:00000000 ___ImageBase 00400000 \n\ 0001:00000000 _StreamingContext__ctor_m12118 00401000 f 98F5E16DA77CA137853023FCE84040FD.obj\n\ 0001:000000d0 _StreamingContext__ctor_m12119 004010d0 f 98F5E16DA77CA137853023FCE84040FD.obj\n\ 0002:00000000 __imp__CryptReleaseContext@8 00e34000 advapi32:ADVAPI32.dll\n\ 0002:00000004 __imp__CryptAcquireContextW@20 00e34004 advapi32:ADVAPI32.dll\n\ 0003:00000000 ??_R0?AUIl2CppExceptionWrapper@@@8 01088000 98F5E16DA77CA137853023FCE84040FD.obj\n\ 0003:00000028 ?Arrays_GenericArrayField_1__ctor_m14458_GenericMethod@@3UIl2CppGenericMethod@@A 01088028 E9FD63517D52C89694E224C19AA23AB9.obj"; TEST_CASE("Parsing_MSVC_MapFile_ContainsExpectedSectionsAndSymbols") { std::stringstream ss(mockMapFile); MSVCMapFileParser parser; MapFile mapFile = parser.Parse(ss); REQUIRE(37 == mapFile.sections.size()); Section section = mapFile.sections[0]; REQUIRE(0x00001000 == section.start); REQUIRE(0x0096f9be == section.length); REQUIRE(".text" == section.name); REQUIRE("1" == section.segmentName); section = mapFile.sections[4]; REQUIRE(0x00A34000 == section.start); REQUIRE(0x00000304 == section.length); REQUIRE(".idata$5" == section.name); REQUIRE("2" == section.segmentName); section = mapFile.sections[36]; REQUIRE(0x00EC5EC0 == section.start); REQUIRE(0x0004b020 == section.length); REQUIRE(".bss" == section.name); REQUIRE("3" == section.segmentName); REQUIRE(9 == mapFile.symbols.size()); Symbol symbol = mapFile.symbols[3]; REQUIRE(0x00001000 == symbol.start); REQUIRE(0x000000d0 == symbol.length); REQUIRE(kSegmentTypeCode == symbol.segmentType); symbol = mapFile.symbols[4]; REQUIRE(0x000010d0 == symbol.start); REQUIRE(0x0096F8EE == symbol.length); REQUIRE(kSegmentTypeCode == symbol.segmentType); symbol = mapFile.symbols[8]; REQUIRE(0x00C88028 == symbol.start); REQUIRE(0x0023DE8C == symbol.length); REQUIRE(kSegmentTypeData == symbol.segmentType); } #endif // ENABLE_UNIT_TESTS