~ubuntu-branches/ubuntu/utopic/binutils-arm64-cross/utopic

« back to all changes in this revision

Viewing changes to binutils-2.23.52.20130611/gold/testsuite/test.h

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-06-20 17:38:09 UTC
  • Revision ID: package-import@ubuntu.com-20130620173809-app8lzgvymy5fg6c
Tags: 0.7
Build-depend on binutils-source (>= 2.23.52.20130620-1~).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// test.h -- simplistic test framework for gold unittests -*- C++ -*-
 
2
 
 
3
// Copyright 2006, 2007, 2008 Free Software Foundation, Inc.
 
4
// Written by Ian Lance Taylor <iant@google.com>.
 
5
 
 
6
// This file is part of gold.
 
7
 
 
8
// This program is free software; you can redistribute it and/or modify
 
9
// it under the terms of the GNU General Public License as published by
 
10
// the Free Software Foundation; either version 3 of the License, or
 
11
// (at your option) any later version.
 
12
 
 
13
// This program is distributed in the hope that it will be useful,
 
14
// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
16
// GNU General Public License for more details.
 
17
 
 
18
// You should have received a copy of the GNU General Public License
 
19
// along with this program; if not, write to the Free Software
 
20
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
 
21
// MA 02110-1301, USA.
 
22
 
 
23
#ifndef GOLD_TESTSUITE_TEST_H
 
24
#define GOLD_TESTSUITE_TEST_H
 
25
 
 
26
namespace gold_testsuite
 
27
{
 
28
 
 
29
class Test_report;
 
30
 
 
31
// This class handles basic test framework functionality.
 
32
 
 
33
class Test_framework
 
34
{
 
35
 public:
 
36
  Test_framework()
 
37
    : testname_(NULL), current_fail_(0), passes_(0), failures_(0)
 
38
  { }
 
39
 
 
40
  // Return number of failures.
 
41
  unsigned int
 
42
  failures() const
 
43
  { return this->failures_; }
 
44
 
 
45
  // Run a test.
 
46
  void
 
47
  run(const char* name, bool (*pfn)(Test_report*));
 
48
 
 
49
  // Get the current Test_report.  This is used by the test support
 
50
  // macros.
 
51
  static Test_report*
 
52
  report()
 
53
  { return Test_framework::current_report; }
 
54
 
 
55
 private:
 
56
  friend class Test_report;
 
57
 
 
58
  // Cause the current test to fail.
 
59
  void
 
60
  fail(const char* filename, int lineno);
 
61
 
 
62
  // Report an error from the current test.
 
63
  void
 
64
  error(const char* message);
 
65
 
 
66
  // Current Test_report.  This is a static variable valid while a
 
67
  // test is being run.
 
68
  static Test_report* current_report;
 
69
 
 
70
  // Current test being run.
 
71
  const char* testname_;
 
72
  // Whether the current test is failing.
 
73
  bool current_fail_;
 
74
  // Total number of passeed tests.
 
75
  unsigned int passes_;
 
76
  // Total number of failed tests.
 
77
  unsigned int failures_;
 
78
};
 
79
 
 
80
// An instance of this class is passed to each test function.
 
81
 
 
82
class Test_report
 
83
{
 
84
public:
 
85
  Test_report(Test_framework* tf)
 
86
    : tf_(tf)
 
87
  { }
 
88
 
 
89
  // Mark the test as failing.
 
90
  void
 
91
  fail(const char* filename, int lineno)
 
92
  { this->tf_->fail(filename, lineno); }
 
93
 
 
94
  // Report an error.
 
95
  void
 
96
  error(const char* message)
 
97
  { this->tf_->error(message); }
 
98
 
 
99
private:
 
100
  Test_framework* tf_;
 
101
};
 
102
 
 
103
// This class registers a test function so that the testsuite runs it.
 
104
 
 
105
class Register_test
 
106
{
 
107
 public: 
 
108
  Register_test(const char* name, bool (*pfn)(Test_report*));
 
109
 
 
110
  // Run all registered tests.
 
111
  static void
 
112
  run_tests(Test_framework*);
 
113
 
 
114
 private:
 
115
  // Linked list of all tests.
 
116
  static Register_test* all_tests;
 
117
 
 
118
  // Test name.
 
119
  const char* name_;
 
120
  // Function to call.  It should return true if the test passes,
 
121
  // false if it fails.
 
122
  bool (*pfn_)(Test_report*);
 
123
  // Next test in linked list.
 
124
  Register_test* next_;
 
125
};
 
126
 
 
127
} // End namespace gold_testsuite.
 
128
 
 
129
// These macros are for convenient use in tests.
 
130
 
 
131
// Check that a condition is true.  If it is false, report a failure.
 
132
 
 
133
#define CHECK(cond)                                                     \
 
134
  ((void)                                                               \
 
135
   ((cond)                                                              \
 
136
    ? 0                                                                 \
 
137
    : (::gold_testsuite::Test_framework::report()->fail(__FILE__,       \
 
138
                                                        __LINE__),      \
 
139
       0)))
 
140
 
 
141
// Report an error during a test.
 
142
 
 
143
#define ERROR(msg) (::gold_testsuite::Test_framework::report()->error(msg))
 
144
 
 
145
#endif // !defined(GOLD_TESTSUITE_TEST_H)