Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: courgette/encode_decode_unittest.cc

Issue 8477045: Add Elf 32 Support to Courgette. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Remove debug printf present by mistake. Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « courgette/disassembler_win32_x86.cc ('k') | courgette/encoded_program.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "courgette/base_test_unittest.h" 5 #include "courgette/base_test_unittest.h"
6 #include "courgette/courgette.h" 6 #include "courgette/courgette.h"
7 #include "courgette/streams.h" 7 #include "courgette/streams.h"
8 8
9 class EncodeDecodeTest : public BaseTest { 9 class EncodeDecodeTest : public BaseTest {
10 public: 10 public:
11 void TestExe(const char *) const; 11 void TestAssembleToStreamDisassemble(std::string file,
12 size_t expected_encoded_lenth) const;
12 }; 13 };
13 14
14 void EncodeDecodeTest::TestExe(const char* file_name) const { 15 void EncodeDecodeTest::TestAssembleToStreamDisassemble(
15 // Test top-level Courgette API for converting an a file to a binary 16 std::string file,
16 // assembly representation and back. 17 size_t expected_encoded_lenth) const {
17 std::string file1 = FileContents(file_name); 18 const void* original_buffer = file.c_str();
18 19 size_t original_length = file.length();
19 const void* original_buffer = file1.c_str();
20 size_t original_length = file1.size();
21 20
22 courgette::AssemblyProgram* program = NULL; 21 courgette::AssemblyProgram* program = NULL;
23 const courgette::Status parse_status = 22 const courgette::Status parse_status =
24 courgette::ParseDetectedExecutable(original_buffer, original_length, 23 courgette::ParseDetectedExecutable(original_buffer,
24 original_length,
25 &program); 25 &program);
26 EXPECT_EQ(courgette::C_OK, parse_status); 26 EXPECT_EQ(courgette::C_OK, parse_status);
27 27
28 courgette::EncodedProgram* encoded = NULL; 28 courgette::EncodedProgram* encoded = NULL;
29 29
30 const courgette::Status encode_status = Encode(program, &encoded); 30 const courgette::Status encode_status = Encode(program, &encoded);
31 EXPECT_EQ(courgette::C_OK, encode_status); 31 EXPECT_EQ(courgette::C_OK, encode_status);
32 32
33 DeleteAssemblyProgram(program); 33 DeleteAssemblyProgram(program);
34 34
35 courgette::SinkStreamSet sinks; 35 courgette::SinkStreamSet sinks;
36 const courgette::Status write_status = WriteEncodedProgram(encoded, &sinks); 36 const courgette::Status write_status = WriteEncodedProgram(encoded, &sinks);
37 EXPECT_EQ(courgette::C_OK, write_status); 37 EXPECT_EQ(courgette::C_OK, write_status);
38 38
39 DeleteEncodedProgram(encoded); 39 DeleteEncodedProgram(encoded);
40 40
41 courgette::SinkStream sink; 41 courgette::SinkStream sink;
42 bool can_collect = sinks.CopyTo(&sink); 42 bool can_collect = sinks.CopyTo(&sink);
43 EXPECT_TRUE(can_collect); 43 EXPECT_TRUE(can_collect);
44 44
45 const void* buffer = sink.Buffer(); 45 const void* buffer = sink.Buffer();
46 size_t length = sink.Length(); 46 size_t length = sink.Length();
47 47
48 EXPECT_EQ(971850U, length); 48 EXPECT_EQ(expected_encoded_lenth, length);
49 49
50 courgette::SourceStreamSet sources; 50 courgette::SourceStreamSet sources;
51 bool can_get_source_streams = sources.Init(buffer, length); 51 bool can_get_source_streams = sources.Init(buffer, length);
52 EXPECT_TRUE(can_get_source_streams); 52 EXPECT_TRUE(can_get_source_streams);
53 53
54 courgette::EncodedProgram *encoded2 = NULL; 54 courgette::EncodedProgram *encoded2 = NULL;
55 const courgette::Status read_status = ReadEncodedProgram(&sources, &encoded2); 55 const courgette::Status read_status = ReadEncodedProgram(&sources, &encoded2);
56 EXPECT_EQ(courgette::C_OK, read_status); 56 EXPECT_EQ(courgette::C_OK, read_status);
57 57
58 courgette::SinkStream assembled; 58 courgette::SinkStream assembled;
59 const courgette::Status assemble_status = Assemble(encoded2, &assembled); 59 const courgette::Status assemble_status = Assemble(encoded2, &assembled);
60 EXPECT_EQ(courgette::C_OK, assemble_status); 60 EXPECT_EQ(courgette::C_OK, assemble_status);
61 61
62 const void* assembled_buffer = assembled.Buffer(); 62 const void* assembled_buffer = assembled.Buffer();
63 size_t assembled_length = assembled.Length(); 63 size_t assembled_length = assembled.Length();
64 64
65 EXPECT_EQ(original_length, assembled_length); 65 EXPECT_EQ(original_length, assembled_length);
66 EXPECT_EQ(0, memcmp(original_buffer, assembled_buffer, original_length)); 66 EXPECT_EQ(0, memcmp(original_buffer, assembled_buffer, original_length));
67 67
68 DeleteEncodedProgram(encoded2); 68 DeleteEncodedProgram(encoded2);
69 } 69 }
70 70
71 TEST_F(EncodeDecodeTest, PE) {
72 std::string file = FileContents("setup1.exe");
73 TestAssembleToStreamDisassemble(file, 971850);
74 }
71 75
72 TEST_F(EncodeDecodeTest, All) { 76 TEST_F(EncodeDecodeTest, Elf_Small) {
73 TestExe("setup1.exe"); 77 std::string file = FileContents("elf-32-1");
78 TestAssembleToStreamDisassemble(file, 135988);
74 } 79 }
OLDNEW
« no previous file with comments | « courgette/disassembler_win32_x86.cc ('k') | courgette/encoded_program.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698