| Index: courgette/adjustment_method_unittest.cc
|
| diff --git a/courgette/adjustment_method_unittest.cc b/courgette/adjustment_method_unittest.cc
|
| index d8b987c2d89e1ac6be8abe036bfa13f72f5ea31b..970a652dc8e62631310bab8e4ff612fb6374acce 100644
|
| --- a/courgette/adjustment_method_unittest.cc
|
| +++ b/courgette/adjustment_method_unittest.cc
|
| @@ -7,6 +7,7 @@
|
| #include <utility>
|
| #include <vector>
|
|
|
| +#include "base/bind.h"
|
| #include "base/strings/string_util.h"
|
| #include "courgette/assembly_program.h"
|
| #include "courgette/courgette.h"
|
| @@ -16,6 +17,10 @@
|
|
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +namespace courgette {
|
| +
|
| +namespace {
|
| +
|
| class AdjustmentMethodTest : public testing::Test {
|
| public:
|
| void Test1() const;
|
| @@ -29,32 +34,39 @@ class AdjustmentMethodTest : public testing::Test {
|
|
|
| // Returns one of two similar simple programs. These differ only in Label
|
| // assignment, so it is possible to make them look identical.
|
| - std::unique_ptr<courgette::AssemblyProgram> MakeProgram(int kind) const {
|
| - std::unique_ptr<courgette::AssemblyProgram> prog(
|
| - new courgette::AssemblyProgram(courgette::EXE_WIN_32_X86));
|
| + std::unique_ptr<AssemblyProgram> MakeProgram(int kind) const {
|
| + std::unique_ptr<AssemblyProgram> prog(new AssemblyProgram(EXE_WIN_32_X86));
|
| prog->set_image_base(0x00400000);
|
|
|
| - courgette::RVA kRvaA = 0x00410000;
|
| - courgette::RVA kRvaB = 0x00410004;
|
| + RVA kRvaA = 0x00410000;
|
| + RVA kRvaB = 0x00410004;
|
|
|
| - std::vector<courgette::RVA> abs32_rvas;
|
| + std::vector<RVA> abs32_rvas;
|
| abs32_rvas.push_back(kRvaA);
|
| abs32_rvas.push_back(kRvaB);
|
| - std::vector<courgette::RVA> rel32_rvas; // Stub.
|
| + std::vector<RVA> rel32_rvas; // Stub.
|
|
|
| - courgette::TrivialRvaVisitor abs32_visitor(abs32_rvas);
|
| - courgette::TrivialRvaVisitor rel32_visitor(rel32_rvas);
|
| + TrivialRvaVisitor abs32_visitor(abs32_rvas);
|
| + TrivialRvaVisitor rel32_visitor(rel32_rvas);
|
| prog->PrecomputeLabels(&abs32_visitor, &rel32_visitor);
|
|
|
| - courgette::Label* labelA = prog->FindAbs32Label(kRvaA);
|
| - courgette::Label* labelB = prog->FindAbs32Label(kRvaB);
|
| + Label* labelA = prog->FindAbs32Label(kRvaA);
|
| + Label* labelB = prog->FindAbs32Label(kRvaB);
|
| +
|
| + AssemblyProgram::InstructionGenerator gen = base::Bind(
|
| + [](Label* labelA, Label* labelB, AssemblyProgram* prog,
|
| + InstructionReceptor* receptor) -> CheckBool {
|
| + EXPECT_TRUE(receptor->EmitAbs32(labelA));
|
| + EXPECT_TRUE(receptor->EmitAbs32(labelA));
|
| + EXPECT_TRUE(receptor->EmitAbs32(labelB));
|
| + EXPECT_TRUE(receptor->EmitAbs32(labelA));
|
| + EXPECT_TRUE(receptor->EmitAbs32(labelA));
|
| + EXPECT_TRUE(receptor->EmitAbs32(labelB));
|
| + return true;
|
| + },
|
| + labelA, labelB);
|
|
|
| - EXPECT_TRUE(prog->EmitAbs32(labelA));
|
| - EXPECT_TRUE(prog->EmitAbs32(labelA));
|
| - EXPECT_TRUE(prog->EmitAbs32(labelB));
|
| - EXPECT_TRUE(prog->EmitAbs32(labelA));
|
| - EXPECT_TRUE(prog->EmitAbs32(labelA));
|
| - EXPECT_TRUE(prog->EmitAbs32(labelB));
|
| + EXPECT_TRUE(prog->GenerateInstructions(gen));
|
|
|
| if (kind == 0) {
|
| labelA->index_ = 0;
|
| @@ -68,32 +80,30 @@ class AdjustmentMethodTest : public testing::Test {
|
| return prog;
|
| }
|
|
|
| - std::unique_ptr<courgette::AssemblyProgram> MakeProgramA() const {
|
| + std::unique_ptr<AssemblyProgram> MakeProgramA() const {
|
| return MakeProgram(0);
|
| }
|
| - std::unique_ptr<courgette::AssemblyProgram> MakeProgramB() const {
|
| + std::unique_ptr<AssemblyProgram> MakeProgramB() const {
|
| return MakeProgram(1);
|
| }
|
|
|
| // Returns a string that is the serialized version of |program|.
|
| // Deletes |program|.
|
| - std::string Serialize(
|
| - std::unique_ptr<courgette::AssemblyProgram> program) const {
|
| - std::unique_ptr<courgette::EncodedProgram> encoded;
|
| + std::string Serialize(std::unique_ptr<AssemblyProgram> program) const {
|
| + std::unique_ptr<EncodedProgram> encoded;
|
|
|
| - const courgette::Status encode_status = Encode(*program, &encoded);
|
| - EXPECT_EQ(courgette::C_OK, encode_status);
|
| + const Status encode_status = Encode(*program, &encoded);
|
| + EXPECT_EQ(C_OK, encode_status);
|
|
|
| program.reset();
|
|
|
| - courgette::SinkStreamSet sinks;
|
| - const courgette::Status write_status =
|
| - WriteEncodedProgram(encoded.get(), &sinks);
|
| - EXPECT_EQ(courgette::C_OK, write_status);
|
| + SinkStreamSet sinks;
|
| + const Status write_status = WriteEncodedProgram(encoded.get(), &sinks);
|
| + EXPECT_EQ(C_OK, write_status);
|
|
|
| encoded.reset();
|
|
|
| - courgette::SinkStream sink;
|
| + SinkStream sink;
|
| bool can_collect = sinks.CopyTo(&sink);
|
| EXPECT_TRUE(can_collect);
|
|
|
| @@ -103,18 +113,18 @@ class AdjustmentMethodTest : public testing::Test {
|
| };
|
|
|
| void AdjustmentMethodTest::Test1() const {
|
| - std::unique_ptr<courgette::AssemblyProgram> prog1 = MakeProgramA();
|
| - std::unique_ptr<courgette::AssemblyProgram> prog2 = MakeProgramB();
|
| + std::unique_ptr<AssemblyProgram> prog1 = MakeProgramA();
|
| + std::unique_ptr<AssemblyProgram> prog2 = MakeProgramB();
|
| std::string s1 = Serialize(std::move(prog1));
|
| std::string s2 = Serialize(std::move(prog2));
|
|
|
| // Don't use EXPECT_EQ because strings are unprintable.
|
| EXPECT_FALSE(s1 == s2); // Unadjusted A and B differ.
|
|
|
| - std::unique_ptr<courgette::AssemblyProgram> prog5 = MakeProgramA();
|
| - std::unique_ptr<courgette::AssemblyProgram> prog6 = MakeProgramB();
|
| - courgette::Status can_adjust = Adjust(*prog5, prog6.get());
|
| - EXPECT_EQ(courgette::C_OK, can_adjust);
|
| + std::unique_ptr<AssemblyProgram> prog5 = MakeProgramA();
|
| + std::unique_ptr<AssemblyProgram> prog6 = MakeProgramB();
|
| + Status can_adjust = Adjust(*prog5, prog6.get());
|
| + EXPECT_EQ(C_OK, can_adjust);
|
| std::string s5 = Serialize(std::move(prog5));
|
| std::string s6 = Serialize(std::move(prog6));
|
|
|
| @@ -125,3 +135,7 @@ void AdjustmentMethodTest::Test1() const {
|
| TEST_F(AdjustmentMethodTest, All) {
|
| Test1();
|
| }
|
| +
|
| +} // namespace
|
| +
|
| +} // namespace courgette
|
|
|