OpenCores
URL https://opencores.org/ocsvn/s80186/s80186/trunk

Subversion Repositories s80186

[/] [s80186/] [trunk/] [vendor/] [googletest/] [googletest/] [test/] [gtest-listener_test.cc] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 jamieiles
// Copyright 2009 Google Inc. All rights reserved.
2
//
3
// Redistribution and use in source and binary forms, with or without
4
// modification, are permitted provided that the following conditions are
5
// met:
6
//
7
//     * Redistributions of source code must retain the above copyright
8
// notice, this list of conditions and the following disclaimer.
9
//     * Redistributions in binary form must reproduce the above
10
// copyright notice, this list of conditions and the following disclaimer
11
// in the documentation and/or other materials provided with the
12
// distribution.
13
//     * Neither the name of Google Inc. nor the names of its
14
// contributors may be used to endorse or promote products derived from
15
// this software without specific prior written permission.
16
//
17
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
//
29
// Author: vladl@google.com (Vlad Losev)
30
//
31
// The Google C++ Testing Framework (Google Test)
32
//
33
// This file verifies Google Test event listeners receive events at the
34
// right times.
35
 
36
#include "gtest/gtest.h"
37
#include <vector>
38
 
39
using ::testing::AddGlobalTestEnvironment;
40
using ::testing::Environment;
41
using ::testing::InitGoogleTest;
42
using ::testing::Test;
43
using ::testing::TestCase;
44
using ::testing::TestEventListener;
45
using ::testing::TestInfo;
46
using ::testing::TestPartResult;
47
using ::testing::UnitTest;
48
 
49
// Used by tests to register their events.
50
std::vector<std::string>* g_events = NULL;
51
 
52
namespace testing {
53
namespace internal {
54
 
55
class EventRecordingListener : public TestEventListener {
56
 public:
57
  explicit EventRecordingListener(const char* name) : name_(name) {}
58
 
59
 protected:
60
  virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {
61
    g_events->push_back(GetFullMethodName("OnTestProgramStart"));
62
  }
63
 
64
  virtual void OnTestIterationStart(const UnitTest& /*unit_test*/,
65
                                    int iteration) {
66
    Message message;
67
    message << GetFullMethodName("OnTestIterationStart")
68
            << "(" << iteration << ")";
69
    g_events->push_back(message.GetString());
70
  }
71
 
72
  virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {
73
    g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpStart"));
74
  }
75
 
76
  virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {
77
    g_events->push_back(GetFullMethodName("OnEnvironmentsSetUpEnd"));
78
  }
79
 
80
  virtual void OnTestCaseStart(const TestCase& /*test_case*/) {
81
    g_events->push_back(GetFullMethodName("OnTestCaseStart"));
82
  }
83
 
84
  virtual void OnTestStart(const TestInfo& /*test_info*/) {
85
    g_events->push_back(GetFullMethodName("OnTestStart"));
86
  }
87
 
88
  virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {
89
    g_events->push_back(GetFullMethodName("OnTestPartResult"));
90
  }
91
 
92
  virtual void OnTestEnd(const TestInfo& /*test_info*/) {
93
    g_events->push_back(GetFullMethodName("OnTestEnd"));
94
  }
95
 
96
  virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {
97
    g_events->push_back(GetFullMethodName("OnTestCaseEnd"));
98
  }
99
 
100
  virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {
101
    g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownStart"));
102
  }
103
 
104
  virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {
105
    g_events->push_back(GetFullMethodName("OnEnvironmentsTearDownEnd"));
106
  }
107
 
108
  virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/,
109
                                  int iteration) {
110
    Message message;
111
    message << GetFullMethodName("OnTestIterationEnd")
112
            << "("  << iteration << ")";
113
    g_events->push_back(message.GetString());
114
  }
115
 
116
  virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {
117
    g_events->push_back(GetFullMethodName("OnTestProgramEnd"));
118
  }
119
 
120
 private:
121
  std::string GetFullMethodName(const char* name) {
122
    return name_ + "." + name;
123
  }
124
 
125
  std::string name_;
126
};
127
 
128
class EnvironmentInvocationCatcher : public Environment {
129
 protected:
130
  virtual void SetUp() {
131
    g_events->push_back("Environment::SetUp");
132
  }
133
 
134
  virtual void TearDown() {
135
    g_events->push_back("Environment::TearDown");
136
  }
137
};
138
 
139
class ListenerTest : public Test {
140
 protected:
141
  static void SetUpTestCase() {
142
    g_events->push_back("ListenerTest::SetUpTestCase");
143
  }
144
 
145
  static void TearDownTestCase() {
146
    g_events->push_back("ListenerTest::TearDownTestCase");
147
  }
148
 
149
  virtual void SetUp() {
150
    g_events->push_back("ListenerTest::SetUp");
151
  }
152
 
153
  virtual void TearDown() {
154
    g_events->push_back("ListenerTest::TearDown");
155
  }
156
};
157
 
158
TEST_F(ListenerTest, DoesFoo) {
159
  // Test execution order within a test case is not guaranteed so we are not
160
  // recording the test name.
161
  g_events->push_back("ListenerTest::* Test Body");
162
  SUCCEED();  // Triggers OnTestPartResult.
163
}
164
 
165
TEST_F(ListenerTest, DoesBar) {
166
  g_events->push_back("ListenerTest::* Test Body");
167
  SUCCEED();  // Triggers OnTestPartResult.
168
}
169
 
170
}  // namespace internal
171
 
172
}  // namespace testing
173
 
174
using ::testing::internal::EnvironmentInvocationCatcher;
175
using ::testing::internal::EventRecordingListener;
176
 
177
void VerifyResults(const std::vector<std::string>& data,
178
                   const char* const* expected_data,
179
                   size_t expected_data_size) {
180
  const size_t actual_size = data.size();
181
  // If the following assertion fails, a new entry will be appended to
182
  // data.  Hence we save data.size() first.
183
  EXPECT_EQ(expected_data_size, actual_size);
184
 
185
  // Compares the common prefix.
186
  const size_t shorter_size = expected_data_size <= actual_size ?
187
      expected_data_size : actual_size;
188
  size_t i = 0;
189
  for (; i < shorter_size; ++i) {
190
    ASSERT_STREQ(expected_data[i], data[i].c_str())
191
        << "at position " << i;
192
  }
193
 
194
  // Prints extra elements in the actual data.
195
  for (; i < actual_size; ++i) {
196
    printf("  Actual event #%lu: %s\n",
197
        static_cast<unsigned long>(i), data[i].c_str());
198
  }
199
}
200
 
201
int main(int argc, char **argv) {
202
  std::vector<std::string> events;
203
  g_events = &events;
204
  InitGoogleTest(&argc, argv);
205
 
206
  UnitTest::GetInstance()->listeners().Append(
207
      new EventRecordingListener("1st"));
208
  UnitTest::GetInstance()->listeners().Append(
209
      new EventRecordingListener("2nd"));
210
 
211
  AddGlobalTestEnvironment(new EnvironmentInvocationCatcher);
212
 
213
  GTEST_CHECK_(events.size() == 0)
214
      << "AddGlobalTestEnvironment should not generate any events itself.";
215
 
216
  ::testing::GTEST_FLAG(repeat) = 2;
217
  int ret_val = RUN_ALL_TESTS();
218
 
219
  const char* const expected_events[] = {
220
    "1st.OnTestProgramStart",
221
    "2nd.OnTestProgramStart",
222
    "1st.OnTestIterationStart(0)",
223
    "2nd.OnTestIterationStart(0)",
224
    "1st.OnEnvironmentsSetUpStart",
225
    "2nd.OnEnvironmentsSetUpStart",
226
    "Environment::SetUp",
227
    "2nd.OnEnvironmentsSetUpEnd",
228
    "1st.OnEnvironmentsSetUpEnd",
229
    "1st.OnTestCaseStart",
230
    "2nd.OnTestCaseStart",
231
    "ListenerTest::SetUpTestCase",
232
    "1st.OnTestStart",
233
    "2nd.OnTestStart",
234
    "ListenerTest::SetUp",
235
    "ListenerTest::* Test Body",
236
    "1st.OnTestPartResult",
237
    "2nd.OnTestPartResult",
238
    "ListenerTest::TearDown",
239
    "2nd.OnTestEnd",
240
    "1st.OnTestEnd",
241
    "1st.OnTestStart",
242
    "2nd.OnTestStart",
243
    "ListenerTest::SetUp",
244
    "ListenerTest::* Test Body",
245
    "1st.OnTestPartResult",
246
    "2nd.OnTestPartResult",
247
    "ListenerTest::TearDown",
248
    "2nd.OnTestEnd",
249
    "1st.OnTestEnd",
250
    "ListenerTest::TearDownTestCase",
251
    "2nd.OnTestCaseEnd",
252
    "1st.OnTestCaseEnd",
253
    "1st.OnEnvironmentsTearDownStart",
254
    "2nd.OnEnvironmentsTearDownStart",
255
    "Environment::TearDown",
256
    "2nd.OnEnvironmentsTearDownEnd",
257
    "1st.OnEnvironmentsTearDownEnd",
258
    "2nd.OnTestIterationEnd(0)",
259
    "1st.OnTestIterationEnd(0)",
260
    "1st.OnTestIterationStart(1)",
261
    "2nd.OnTestIterationStart(1)",
262
    "1st.OnEnvironmentsSetUpStart",
263
    "2nd.OnEnvironmentsSetUpStart",
264
    "Environment::SetUp",
265
    "2nd.OnEnvironmentsSetUpEnd",
266
    "1st.OnEnvironmentsSetUpEnd",
267
    "1st.OnTestCaseStart",
268
    "2nd.OnTestCaseStart",
269
    "ListenerTest::SetUpTestCase",
270
    "1st.OnTestStart",
271
    "2nd.OnTestStart",
272
    "ListenerTest::SetUp",
273
    "ListenerTest::* Test Body",
274
    "1st.OnTestPartResult",
275
    "2nd.OnTestPartResult",
276
    "ListenerTest::TearDown",
277
    "2nd.OnTestEnd",
278
    "1st.OnTestEnd",
279
    "1st.OnTestStart",
280
    "2nd.OnTestStart",
281
    "ListenerTest::SetUp",
282
    "ListenerTest::* Test Body",
283
    "1st.OnTestPartResult",
284
    "2nd.OnTestPartResult",
285
    "ListenerTest::TearDown",
286
    "2nd.OnTestEnd",
287
    "1st.OnTestEnd",
288
    "ListenerTest::TearDownTestCase",
289
    "2nd.OnTestCaseEnd",
290
    "1st.OnTestCaseEnd",
291
    "1st.OnEnvironmentsTearDownStart",
292
    "2nd.OnEnvironmentsTearDownStart",
293
    "Environment::TearDown",
294
    "2nd.OnEnvironmentsTearDownEnd",
295
    "1st.OnEnvironmentsTearDownEnd",
296
    "2nd.OnTestIterationEnd(1)",
297
    "1st.OnTestIterationEnd(1)",
298
    "2nd.OnTestProgramEnd",
299
    "1st.OnTestProgramEnd"
300
  };
301
  VerifyResults(events,
302
                expected_events,
303
                sizeof(expected_events)/sizeof(expected_events[0]));
304
 
305
  // We need to check manually for ad hoc test failures that happen after
306
  // RUN_ALL_TESTS finishes.
307
  if (UnitTest::GetInstance()->Failed())
308
    ret_val = 1;
309
 
310
  return ret_val;
311
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.