forked from Imagelibrary/binutils-gdb
Added a testsuite. More support for COPY relocations.
This commit is contained in:
121
gold/testsuite/test.h
Normal file
121
gold/testsuite/test.h
Normal file
@@ -0,0 +1,121 @@
|
||||
// test.h -- simplistic test framework for gold unittests -*- C++ -*-
|
||||
|
||||
#ifndef GOLD_TESTSUITE_TEST_H
|
||||
#define GOLD_TESTSUITE_TEST_H
|
||||
|
||||
namespace gold_testsuite
|
||||
{
|
||||
|
||||
class Test_report;
|
||||
|
||||
// This class handles basic test framework functionality.
|
||||
|
||||
class Test_framework
|
||||
{
|
||||
public:
|
||||
Test_framework()
|
||||
: testname_(NULL), current_fail_(0), passes_(0), failures_(0)
|
||||
{ }
|
||||
|
||||
// Return number of failures.
|
||||
unsigned int
|
||||
failures() const
|
||||
{ return this->failures_; }
|
||||
|
||||
// Run a test.
|
||||
void
|
||||
run(const char* name, bool (*pfn)(Test_report*));
|
||||
|
||||
// Get the current Test_report. This is used by the test support
|
||||
// macros.
|
||||
static Test_report*
|
||||
report()
|
||||
{ return Test_framework::current_report; }
|
||||
|
||||
private:
|
||||
friend class Test_report;
|
||||
|
||||
// Cause the current test to fail.
|
||||
void
|
||||
fail()
|
||||
{ ++this->current_fail_ = true; }
|
||||
|
||||
// Report an error from the current test.
|
||||
void
|
||||
error(const char* message);
|
||||
|
||||
// Current Test_report. This is a static variable valid while a
|
||||
// test is being run.
|
||||
static Test_report* current_report;
|
||||
|
||||
// Current test being run.
|
||||
const char* testname_;
|
||||
// Whether the current test is failing.
|
||||
bool current_fail_;
|
||||
// Total number of passeed tests.
|
||||
unsigned int passes_;
|
||||
// Total number of failed tests.
|
||||
unsigned int failures_;
|
||||
};
|
||||
|
||||
// An instance of this class is passed to each test function.
|
||||
|
||||
class Test_report
|
||||
{
|
||||
public:
|
||||
Test_report(Test_framework* tf)
|
||||
: tf_(tf)
|
||||
{ }
|
||||
|
||||
// Mark the test as failing.
|
||||
void
|
||||
fail()
|
||||
{ this->tf_->fail(); }
|
||||
|
||||
// Report an error.
|
||||
void
|
||||
error(const char* message)
|
||||
{ this->tf_->error(message); }
|
||||
|
||||
private:
|
||||
Test_framework* tf_;
|
||||
};
|
||||
|
||||
// This class registers a test function so that the testsuite runs it.
|
||||
|
||||
class Register_test
|
||||
{
|
||||
public:
|
||||
Register_test(const char* name, bool (*pfn)(Test_report*));
|
||||
|
||||
// Run all registered tests.
|
||||
static void
|
||||
run_tests(Test_framework*);
|
||||
|
||||
private:
|
||||
// Linked list of all tests.
|
||||
static Register_test* all_tests;
|
||||
|
||||
// Test name.
|
||||
const char* name_;
|
||||
// Function to call. It should return true if the test passes,
|
||||
// false if it fails.
|
||||
bool (*pfn_)(Test_report*);
|
||||
// Next test in linked list.
|
||||
Register_test* next_;
|
||||
};
|
||||
|
||||
} // End namespace gold_testsuite.
|
||||
|
||||
// These macros are for convenient use in tests.
|
||||
|
||||
// Check that a condition is true. If it is false, report a failure.
|
||||
|
||||
#define CHECK(cond) \
|
||||
((cond) ? 0 : (::gold_testsuite::Test_framework::report()->fail(), 0))
|
||||
|
||||
// Report an error during a test.
|
||||
|
||||
#define ERROR(msg) (::gold_testsuite::Test_framework::report()->error(msg))
|
||||
|
||||
#endif // !defined(GOLD_TESTSUITE_TEST_H)
|
||||
Reference in New Issue
Block a user