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