]> git.siccegge.de Git - frida/frida.git/blob - src/core/tests/BasicBlockTest.cxx
Add testcase for serializing / deserializing BasicBlocks
[frida/frida.git] / src / core / tests / BasicBlockTest.cxx
1 #include <gtest/gtest.h>
2 #include <algorithm>
3
4 #include "gui/qt.hxx"
5 #include "core/InformationManager.hxx"
6 #include "core/BasicBlock.hxx"
7
8 TEST(BasicBlockTest, deserializeValidInstance) {
9 QFile file("testdata/core/BasicBlock/valid.xml");
10 InformationManager manager;
11 file.open(QFile::ReadOnly | QFile::Text);
12 QXmlStreamReader reader(&file);
13
14 reader.readNextStartElement();
15 BasicBlock* block = BasicBlock::deserialize(reader, &manager);
16
17 ASSERT_NE((void*)NULL, (void*)block);
18 EXPECT_EQ(0x403e50, block->getStartAddress());
19 EXPECT_EQ(0x403e66, block->getEndAddress());
20 EXPECT_EQ(0x403e50, block->getNextBlock(0));
21 EXPECT_EQ(0x403e66, block->getNextBlock(1));
22 }
23
24 TEST(BasicBlockTest, deserializeInvalidInstance) {
25 QFile file("testdata/core/BasicBlock/invalid.xml");
26 InformationManager manager;
27 file.open(QFile::ReadOnly | QFile::Text);
28 QXmlStreamReader reader(&file);
29
30 reader.readNextStartElement();
31 BasicBlock* block = BasicBlock::deserialize(reader, &manager);
32
33 ASSERT_EQ((void*)NULL, (void*)block);
34 }
35
36 TEST(BasicBlockTest, deserializeThenSerializeIsIdentity) {
37 QFile infile("testdata/core/BasicBlock/valid.xml");
38 QTemporaryFile outfile;
39
40 InformationManager manager;
41 infile.open(QFile::ReadOnly | QFile::Text);
42 outfile.open();
43 QXmlStreamReader reader(&infile);
44 QXmlStreamWriter writer(&outfile);
45
46 reader.readNextStartElement();
47 BasicBlock* block = BasicBlock::deserialize(reader, &manager);
48 block->serialize(writer);
49
50 infile.seek(0);
51 outfile.seek(0);
52
53 std::string outtext = outfile.readAll().data();
54 outtext.erase(remove_if(outtext.begin(), outtext.end(), isspace),
55 outtext.end());
56
57 std::string intext = infile.readAll().data();
58 intext.erase(remove_if(intext.begin(), intext.end(), isspace),
59 intext.end());
60
61 ASSERT_STREQ(outtext.c_str(), intext.c_str());
62 }