少年修仙传客户端基础资源
hch
2024-04-01 d01413b00ef631ac20347716b23818b0b811f65f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#if ENABLE_UNIT_TESTS
 
#include "../../external/Catch/catch.hpp"
 
#include <sstream>
#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<char*>(&numberOfSymbols), sizeof(numberOfSymbols));
 
        return numberOfSymbols;
    }
 
    SymbolInfo ReadOneSymbolInfo()
    {
        SymbolInfo symbolInfo;
        output.read(reinterpret_cast<char*>(&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