| Index: courgette/adjustment_method_unittest.cc
|
| diff --git a/courgette/adjustment_method_unittest.cc b/courgette/adjustment_method_unittest.cc
|
| index bf42f4ac612d0852220aaad697bacb656a331e99..062bf63d1ce0e0df50aac9d23ddfebbbb70a7c5e 100644
|
| --- a/courgette/adjustment_method_unittest.cc
|
| +++ b/courgette/adjustment_method_unittest.cc
|
| @@ -3,12 +3,14 @@
|
| // found in the LICENSE file.
|
|
|
| #include <memory>
|
| +#include <sstream>
|
| #include <string>
|
| #include <utility>
|
| #include <vector>
|
|
|
| #include "base/bind.h"
|
| #include "base/memory/ptr_util.h"
|
| +#include "base/strings/stringprintf.h"
|
| #include "courgette/assembly_program.h"
|
| #include "courgette/courgette.h"
|
| #include "courgette/encoded_program.h"
|
| @@ -65,7 +67,7 @@ class AdjustmentMethodTest : public testing::Test {
|
| },
|
| labelA, labelB);
|
|
|
| - EXPECT_TRUE(prog->GenerateInstructions(gen, true));
|
| + EXPECT_TRUE(prog->AnnotateLabels(gen));
|
| EXPECT_EQ(6U, prog->abs32_label_annotations().size());
|
| EXPECT_EQ(0U, prog->rel32_label_annotations().size());
|
|
|
| @@ -88,36 +90,25 @@ class AdjustmentMethodTest : public testing::Test {
|
| return MakeProgram(1);
|
| }
|
|
|
| - // Returns a string that is the serialized version of |program|.
|
| - // Deletes |program|.
|
| - std::string Serialize(std::unique_ptr<AssemblyProgram> program) const {
|
| - std::unique_ptr<EncodedProgram> encoded;
|
| -
|
| - const Status encode_status = Encode(*program, &encoded);
|
| - EXPECT_EQ(C_OK, encode_status);
|
| -
|
| - program.reset();
|
| -
|
| - SinkStreamSet sinks;
|
| - const Status write_status = WriteEncodedProgram(encoded.get(), &sinks);
|
| - EXPECT_EQ(C_OK, write_status);
|
| -
|
| - encoded.reset();
|
| -
|
| - SinkStream sink;
|
| - bool can_collect = sinks.CopyTo(&sink);
|
| - EXPECT_TRUE(can_collect);
|
| -
|
| - return std::string(reinterpret_cast<const char *>(sink.Buffer()),
|
| - sink.Length());
|
| + // Returns a string that is the serialized version of |program| annotations.
|
| + std::string Serialize(AssemblyProgram* program) const {
|
| + std::ostringstream oss;
|
| + for (const Label* label : program->abs32_label_annotations())
|
| + oss << "(" << label->rva_ << "," << label->index_ << ")";
|
| + oss << ";";
|
| + for (const Label* label : program->rel32_label_annotations())
|
| + oss << "(" << label->rva_ << "," << label->index_ << ")";
|
| +
|
| + EXPECT_GT(oss.str().length(), 1U); // Ensure results are non-trivial.
|
| + return oss.str();
|
| }
|
| };
|
|
|
| void AdjustmentMethodTest::Test1() const {
|
| 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));
|
| + std::string s1 = Serialize(prog1.get());
|
| + std::string s2 = Serialize(prog2.get());
|
|
|
| // Don't use EXPECT_EQ because strings are unprintable.
|
| EXPECT_FALSE(s1 == s2); // Unadjusted A and B differ.
|
| @@ -126,8 +117,8 @@ void AdjustmentMethodTest::Test1() const {
|
| 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));
|
| + std::string s5 = Serialize(prog5.get());
|
| + std::string s6 = Serialize(prog6.get());
|
|
|
| EXPECT_TRUE(s1 == s5); // Adjustment did not change A (prog5)
|
| EXPECT_TRUE(s5 == s6); // Adjustment did change B into A
|
|
|