Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5564 serge 1
// Copyright 2005, Google Inc.
2
// All rights reserved.
3
//
4
// Redistribution and use in source and binary forms, with or without
5
// modification, are permitted provided that the following conditions are
6
// met:
7
//
8
//     * Redistributions of source code must retain the above copyright
9
// notice, this list of conditions and the following disclaimer.
10
//     * Redistributions in binary form must reproduce the above
11
// copyright notice, this list of conditions and the following disclaimer
12
// in the documentation and/or other materials provided with the
13
// distribution.
14
//     * Neither the name of Google Inc. nor the names of its
15
// contributors may be used to endorse or promote products derived from
16
// this software without specific prior written permission.
17
//
18
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
//
30
// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee)
31
//
32
// The Google C++ Testing Framework (Google Test)
33
//
34
// This header file declares functions and macros used internally by
35
// Google Test.  They are subject to change without notice.
36
 
37
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
38
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
39
 
40
#include "gtest/internal/gtest-port.h"
41
 
42
#if GTEST_OS_LINUX
43
# include 
44
# include 
45
# include 
46
# include 
47
#endif  // GTEST_OS_LINUX
48
 
49
#if GTEST_HAS_EXCEPTIONS
50
# include 
51
#endif
52
 
53
#include 
54
#include 
55
#include 
56
#include 
57
#include 
58
#include 
59
 
60
#include "gtest/gtest-message.h"
61
#include "gtest/internal/gtest-string.h"
62
#include "gtest/internal/gtest-filepath.h"
63
#include "gtest/internal/gtest-type-util.h"
64
 
65
// Due to C++ preprocessor weirdness, we need double indirection to
66
// concatenate two tokens when one of them is __LINE__.  Writing
67
//
68
//   foo ## __LINE__
69
//
70
// will result in the token foo__LINE__, instead of foo followed by
71
// the current line number.  For more details, see
72
// http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.6
73
#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar)
74
#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar
75
 
76
class ProtocolMessage;
77
namespace proto2 { class Message; }
78
 
79
namespace testing {
80
 
81
// Forward declarations.
82
 
83
class AssertionResult;                 // Result of an assertion.
84
class Message;                         // Represents a failure message.
85
class Test;                            // Represents a test.
86
class TestInfo;                        // Information about a test.
87
class TestPartResult;                  // Result of a test part.
88
class UnitTest;                        // A collection of test cases.
89
 
90
template 
91
::std::string PrintToString(const T& value);
92
 
93
namespace internal {
94
 
95
struct TraceInfo;                      // Information about a trace point.
96
class ScopedTrace;                     // Implements scoped trace.
97
class TestInfoImpl;                    // Opaque implementation of TestInfo
98
class UnitTestImpl;                    // Opaque implementation of UnitTest
99
 
100
// How many times InitGoogleTest() has been called.
101
GTEST_API_ extern int g_init_gtest_count;
102
 
103
// The text used in failure messages to indicate the start of the
104
// stack trace.
105
GTEST_API_ extern const char kStackTraceMarker[];
106
 
107
// Two overloaded helpers for checking at compile time whether an
108
// expression is a null pointer literal (i.e. NULL or any 0-valued
109
// compile-time integral constant).  Their return values have
110
// different sizes, so we can use sizeof() to test which version is
111
// picked by the compiler.  These helpers have no implementations, as
112
// we only need their signatures.
113
//
114
// Given IsNullLiteralHelper(x), the compiler will pick the first
115
// version if x can be implicitly converted to Secret*, and pick the
116
// second version otherwise.  Since Secret is a secret and incomplete
117
// type, the only expression a user can write that has type Secret* is
118
// a null pointer literal.  Therefore, we know that x is a null
119
// pointer literal if and only if the first version is picked by the
120
// compiler.
121
char IsNullLiteralHelper(Secret* p);
122
char (&IsNullLiteralHelper(...))[2];  // NOLINT
123
 
124
// A compile-time bool constant that is true if and only if x is a
125
// null pointer literal (i.e. NULL or any 0-valued compile-time
126
// integral constant).
127
#ifdef GTEST_ELLIPSIS_NEEDS_POD_
128
// We lose support for NULL detection where the compiler doesn't like
129
// passing non-POD classes through ellipsis (...).
130
# define GTEST_IS_NULL_LITERAL_(x) false
131
#else
132
# define GTEST_IS_NULL_LITERAL_(x) \
133
    (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1)
134
#endif  // GTEST_ELLIPSIS_NEEDS_POD_
135
 
136
// Appends the user-supplied message to the Google-Test-generated message.
137
GTEST_API_ std::string AppendUserMessage(
138
    const std::string& gtest_msg, const Message& user_msg);
139
 
140
#if GTEST_HAS_EXCEPTIONS
141
 
142
// This exception is thrown by (and only by) a failed Google Test
143
// assertion when GTEST_FLAG(throw_on_failure) is true (if exceptions
144
// are enabled).  We derive it from std::runtime_error, which is for
145
// errors presumably detectable only at run time.  Since
146
// std::runtime_error inherits from std::exception, many testing
147
// frameworks know how to extract and print the message inside it.
148
class GTEST_API_ GoogleTestFailureException : public ::std::runtime_error {
149
 public:
150
  explicit GoogleTestFailureException(const TestPartResult& failure);
151
};
152
 
153
#endif  // GTEST_HAS_EXCEPTIONS
154
 
155
// A helper class for creating scoped traces in user programs.
156
class GTEST_API_ ScopedTrace {
157
 public:
158
  // The c'tor pushes the given source file location and message onto
159
  // a trace stack maintained by Google Test.
160
  ScopedTrace(const char* file, int line, const Message& message);
161
 
162
  // The d'tor pops the info pushed by the c'tor.
163
  //
164
  // Note that the d'tor is not virtual in order to be efficient.
165
  // Don't inherit from ScopedTrace!
166
  ~ScopedTrace();
167
 
168
 private:
169
  GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedTrace);
170
} GTEST_ATTRIBUTE_UNUSED_;  // A ScopedTrace object does its job in its
171
                            // c'tor and d'tor.  Therefore it doesn't
172
                            // need to be used otherwise.
173
 
174
// Constructs and returns the message for an equality assertion
175
// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure.
176
//
177
// The first four parameters are the expressions used in the assertion
178
// and their values, as strings.  For example, for ASSERT_EQ(foo, bar)
179
// where foo is 5 and bar is 6, we have:
180
//
181
//   expected_expression: "foo"
182
//   actual_expression:   "bar"
183
//   expected_value:      "5"
184
//   actual_value:        "6"
185
//
186
// The ignoring_case parameter is true iff the assertion is a
187
// *_STRCASEEQ*.  When it's true, the string " (ignoring case)" will
188
// be inserted into the message.
189
GTEST_API_ AssertionResult EqFailure(const char* expected_expression,
190
                                     const char* actual_expression,
191
                                     const std::string& expected_value,
192
                                     const std::string& actual_value,
193
                                     bool ignoring_case);
194
 
195
// Constructs a failure message for Boolean assertions such as EXPECT_TRUE.
196
GTEST_API_ std::string GetBoolAssertionFailureMessage(
197
    const AssertionResult& assertion_result,
198
    const char* expression_text,
199
    const char* actual_predicate_value,
200
    const char* expected_predicate_value);
201
 
202
// This template class represents an IEEE floating-point number
203
// (either single-precision or double-precision, depending on the
204
// template parameters).
205
//
206
// The purpose of this class is to do more sophisticated number
207
// comparison.  (Due to round-off error, etc, it's very unlikely that
208
// two floating-points will be equal exactly.  Hence a naive
209
// comparison by the == operation often doesn't work.)
210
//
211
// Format of IEEE floating-point:
212
//
213
//   The most-significant bit being the leftmost, an IEEE
214
//   floating-point looks like
215
//
216
//     sign_bit exponent_bits fraction_bits
217
//
218
//   Here, sign_bit is a single bit that designates the sign of the
219
//   number.
220
//
221
//   For float, there are 8 exponent bits and 23 fraction bits.
222
//
223
//   For double, there are 11 exponent bits and 52 fraction bits.
224
//
225
//   More details can be found at
226
//   http://en.wikipedia.org/wiki/IEEE_floating-point_standard.
227
//
228
// Template parameter:
229
//
230
//   RawType: the raw floating-point type (either float or double)
231
template 
232
class FloatingPoint {
233
 public:
234
  // Defines the unsigned integer type that has the same size as the
235
  // floating point number.
236
  typedef typename TypeWithSize::UInt Bits;
237
 
238
  // Constants.
239
 
240
  // # of bits in a number.
241
  static const size_t kBitCount = 8*sizeof(RawType);
242
 
243
  // # of fraction bits in a number.
244
  static const size_t kFractionBitCount =
245
    std::numeric_limits::digits - 1;
246
 
247
  // # of exponent bits in a number.
248
  static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount;
249
 
250
  // The mask for the sign bit.
251
  static const Bits kSignBitMask = static_cast(1) << (kBitCount - 1);
252
 
253
  // The mask for the fraction bits.
254
  static const Bits kFractionBitMask =
255
    ~static_cast(0) >> (kExponentBitCount + 1);
256
 
257
  // The mask for the exponent bits.
258
  static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask);
259
 
260
  // How many ULP's (Units in the Last Place) we want to tolerate when
261
  // comparing two numbers.  The larger the value, the more error we
262
  // allow.  A 0 value means that two numbers must be exactly the same
263
  // to be considered equal.
264
  //
265
  // The maximum error of a single floating-point operation is 0.5
266
  // units in the last place.  On Intel CPU's, all floating-point
267
  // calculations are done with 80-bit precision, while double has 64
268
  // bits.  Therefore, 4 should be enough for ordinary use.
269
  //
270
  // See the following article for more details on ULP:
271
  // http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
272
  static const size_t kMaxUlps = 4;
273
 
274
  // Constructs a FloatingPoint from a raw floating-point number.
275
  //
276
  // On an Intel CPU, passing a non-normalized NAN (Not a Number)
277
  // around may change its bits, although the new value is guaranteed
278
  // to be also a NAN.  Therefore, don't expect this constructor to
279
  // preserve the bits in x when x is a NAN.
280
  explicit FloatingPoint(const RawType& x) { u_.value_ = x; }
281
 
282
  // Static methods
283
 
284
  // Reinterprets a bit pattern as a floating-point number.
285
  //
286
  // This function is needed to test the AlmostEquals() method.
287
  static RawType ReinterpretBits(const Bits bits) {
288
    FloatingPoint fp(0);
289
    fp.u_.bits_ = bits;
290
    return fp.u_.value_;
291
  }
292
 
293
  // Returns the floating-point number that represent positive infinity.
294
  static RawType Infinity() {
295
    return ReinterpretBits(kExponentBitMask);
296
  }
297
 
298
  // Returns the maximum representable finite floating-point number.
299
  static RawType Max();
300
 
301
  // Non-static methods
302
 
303
  // Returns the bits that represents this number.
304
  const Bits &bits() const { return u_.bits_; }
305
 
306
  // Returns the exponent bits of this number.
307
  Bits exponent_bits() const { return kExponentBitMask & u_.bits_; }
308
 
309
  // Returns the fraction bits of this number.
310
  Bits fraction_bits() const { return kFractionBitMask & u_.bits_; }
311
 
312
  // Returns the sign bit of this number.
313
  Bits sign_bit() const { return kSignBitMask & u_.bits_; }
314
 
315
  // Returns true iff this is NAN (not a number).
316
  bool is_nan() const {
317
    // It's a NAN if the exponent bits are all ones and the fraction
318
    // bits are not entirely zeros.
319
    return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0);
320
  }
321
 
322
  // Returns true iff this number is at most kMaxUlps ULP's away from
323
  // rhs.  In particular, this function:
324
  //
325
  //   - returns false if either number is (or both are) NAN.
326
  //   - treats really large numbers as almost equal to infinity.
327
  //   - thinks +0.0 and -0.0 are 0 DLP's apart.
328
  bool AlmostEquals(const FloatingPoint& rhs) const {
329
    // The IEEE standard says that any comparison operation involving
330
    // a NAN must return false.
331
    if (is_nan() || rhs.is_nan()) return false;
332
 
333
    return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_)
334
        <= kMaxUlps;
335
  }
336
 
337
 private:
338
  // The data type used to store the actual floating-point number.
339
  union FloatingPointUnion {
340
    RawType value_;  // The raw floating-point number.
341
    Bits bits_;      // The bits that represent the number.
342
  };
343
 
344
  // Converts an integer from the sign-and-magnitude representation to
345
  // the biased representation.  More precisely, let N be 2 to the
346
  // power of (kBitCount - 1), an integer x is represented by the
347
  // unsigned number x + N.
348
  //
349
  // For instance,
350
  //
351
  //   -N + 1 (the most negative number representable using
352
  //          sign-and-magnitude) is represented by 1;
353
  //   0      is represented by N; and
354
  //   N - 1  (the biggest number representable using
355
  //          sign-and-magnitude) is represented by 2N - 1.
356
  //
357
  // Read http://en.wikipedia.org/wiki/Signed_number_representations
358
  // for more details on signed number representations.
359
  static Bits SignAndMagnitudeToBiased(const Bits &sam) {
360
    if (kSignBitMask & sam) {
361
      // sam represents a negative number.
362
      return ~sam + 1;
363
    } else {
364
      // sam represents a positive number.
365
      return kSignBitMask | sam;
366
    }
367
  }
368
 
369
  // Given two numbers in the sign-and-magnitude representation,
370
  // returns the distance between them as an unsigned number.
371
  static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1,
372
                                                     const Bits &sam2) {
373
    const Bits biased1 = SignAndMagnitudeToBiased(sam1);
374
    const Bits biased2 = SignAndMagnitudeToBiased(sam2);
375
    return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1);
376
  }
377
 
378
  FloatingPointUnion u_;
379
};
380
 
381
// We cannot use std::numeric_limits::max() as it clashes with the max()
382
// macro defined by .
383
template <>
384
inline float FloatingPoint::Max() { return FLT_MAX; }
385
template <>
386
inline double FloatingPoint::Max() { return DBL_MAX; }
387
 
388
// Typedefs the instances of the FloatingPoint template class that we
389
// care to use.
390
typedef FloatingPoint Float;
391
typedef FloatingPoint Double;
392
 
393
// In order to catch the mistake of putting tests that use different
394
// test fixture classes in the same test case, we need to assign
395
// unique IDs to fixture classes and compare them.  The TypeId type is
396
// used to hold such IDs.  The user should treat TypeId as an opaque
397
// type: the only operation allowed on TypeId values is to compare
398
// them for equality using the == operator.
399
typedef const void* TypeId;
400
 
401
template 
402
class TypeIdHelper {
403
 public:
404
  // dummy_ must not have a const type.  Otherwise an overly eager
405
  // compiler (e.g. MSVC 7.1 & 8.0) may try to merge
406
  // TypeIdHelper::dummy_ for different Ts as an "optimization".
407
  static bool dummy_;
408
};
409
 
410
template 
411
bool TypeIdHelper::dummy_ = false;
412
 
413
// GetTypeId() returns the ID of type T.  Different values will be
414
// returned for different types.  Calling the function twice with the
415
// same type argument is guaranteed to return the same ID.
416
template 
417
TypeId GetTypeId() {
418
  // The compiler is required to allocate a different
419
  // TypeIdHelper::dummy_ variable for each T used to instantiate
420
  // the template.  Therefore, the address of dummy_ is guaranteed to
421
  // be unique.
422
  return &(TypeIdHelper::dummy_);
423
}
424
 
425
// Returns the type ID of ::testing::Test.  Always call this instead
426
// of GetTypeId< ::testing::Test>() to get the type ID of
427
// ::testing::Test, as the latter may give the wrong result due to a
428
// suspected linker bug when compiling Google Test as a Mac OS X
429
// framework.
430
GTEST_API_ TypeId GetTestTypeId();
431
 
432
// Defines the abstract factory interface that creates instances
433
// of a Test object.
434
class TestFactoryBase {
435
 public:
436
  virtual ~TestFactoryBase() {}
437
 
438
  // Creates a test instance to run. The instance is both created and destroyed
439
  // within TestInfoImpl::Run()
440
  virtual Test* CreateTest() = 0;
441
 
442
 protected:
443
  TestFactoryBase() {}
444
 
445
 private:
446
  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestFactoryBase);
447
};
448
 
449
// This class provides implementation of TeastFactoryBase interface.
450
// It is used in TEST and TEST_F macros.
451
template 
452
class TestFactoryImpl : public TestFactoryBase {
453
 public:
454
  virtual Test* CreateTest() { return new TestClass; }
455
};
456
 
457
#if GTEST_OS_WINDOWS
458
 
459
// Predicate-formatters for implementing the HRESULT checking macros
460
// {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}
461
// We pass a long instead of HRESULT to avoid causing an
462
// include dependency for the HRESULT type.
463
GTEST_API_ AssertionResult IsHRESULTSuccess(const char* expr,
464
                                            long hr);  // NOLINT
465
GTEST_API_ AssertionResult IsHRESULTFailure(const char* expr,
466
                                            long hr);  // NOLINT
467
 
468
#endif  // GTEST_OS_WINDOWS
469
 
470
// Types of SetUpTestCase() and TearDownTestCase() functions.
471
typedef void (*SetUpTestCaseFunc)();
472
typedef void (*TearDownTestCaseFunc)();
473
 
474
// Creates a new TestInfo object and registers it with Google Test;
475
// returns the created object.
476
//
477
// Arguments:
478
//
479
//   test_case_name:   name of the test case
480
//   name:             name of the test
481
//   type_param        the name of the test's type parameter, or NULL if
482
//                     this is not a typed or a type-parameterized test.
483
//   value_param       text representation of the test's value parameter,
484
//                     or NULL if this is not a type-parameterized test.
485
//   fixture_class_id: ID of the test fixture class
486
//   set_up_tc:        pointer to the function that sets up the test case
487
//   tear_down_tc:     pointer to the function that tears down the test case
488
//   factory:          pointer to the factory that creates a test object.
489
//                     The newly created TestInfo instance will assume
490
//                     ownership of the factory object.
491
GTEST_API_ TestInfo* MakeAndRegisterTestInfo(
492
    const char* test_case_name,
493
    const char* name,
494
    const char* type_param,
495
    const char* value_param,
496
    TypeId fixture_class_id,
497
    SetUpTestCaseFunc set_up_tc,
498
    TearDownTestCaseFunc tear_down_tc,
499
    TestFactoryBase* factory);
500
 
501
// If *pstr starts with the given prefix, modifies *pstr to be right
502
// past the prefix and returns true; otherwise leaves *pstr unchanged
503
// and returns false.  None of pstr, *pstr, and prefix can be NULL.
504
GTEST_API_ bool SkipPrefix(const char* prefix, const char** pstr);
505
 
506
#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
507
 
508
// State of the definition of a type-parameterized test case.
509
class GTEST_API_ TypedTestCasePState {
510
 public:
511
  TypedTestCasePState() : registered_(false) {}
512
 
513
  // Adds the given test name to defined_test_names_ and return true
514
  // if the test case hasn't been registered; otherwise aborts the
515
  // program.
516
  bool AddTestName(const char* file, int line, const char* case_name,
517
                   const char* test_name) {
518
    if (registered_) {
519
      fprintf(stderr, "%s Test %s must be defined before "
520
              "REGISTER_TYPED_TEST_CASE_P(%s, ...).\n",
521
              FormatFileLocation(file, line).c_str(), test_name, case_name);
522
      fflush(stderr);
523
      posix::Abort();
524
    }
525
    defined_test_names_.insert(test_name);
526
    return true;
527
  }
528
 
529
  // Verifies that registered_tests match the test names in
530
  // defined_test_names_; returns registered_tests if successful, or
531
  // aborts the program otherwise.
532
  const char* VerifyRegisteredTestNames(
533
      const char* file, int line, const char* registered_tests);
534
 
535
 private:
536
  bool registered_;
537
  ::std::set defined_test_names_;
538
};
539
 
540
// Skips to the first non-space char after the first comma in 'str';
541
// returns NULL if no comma is found in 'str'.
542
inline const char* SkipComma(const char* str) {
543
  const char* comma = strchr(str, ',');
544
  if (comma == NULL) {
545
    return NULL;
546
  }
547
  while (IsSpace(*(++comma))) {}
548
  return comma;
549
}
550
 
551
// Returns the prefix of 'str' before the first comma in it; returns
552
// the entire string if it contains no comma.
553
inline std::string GetPrefixUntilComma(const char* str) {
554
  const char* comma = strchr(str, ',');
555
  return comma == NULL ? str : std::string(str, comma);
556
}
557
 
558
// TypeParameterizedTest::Register()
559
// registers a list of type-parameterized tests with Google Test.  The
560
// return value is insignificant - we just need to return something
561
// such that we can call this function in a namespace scope.
562
//
563
// Implementation note: The GTEST_TEMPLATE_ macro declares a template
564
// template parameter.  It's defined in gtest-type-util.h.
565
template 
566
class TypeParameterizedTest {
567
 public:
568
  // 'index' is the index of the test in the type list 'Types'
569
  // specified in INSTANTIATE_TYPED_TEST_CASE_P(Prefix, TestCase,
570
  // Types).  Valid values for 'index' are [0, N - 1] where N is the
571
  // length of Types.
572
  static bool Register(const char* prefix, const char* case_name,
573
                       const char* test_names, int index) {
574
    typedef typename Types::Head Type;
575
    typedef Fixture FixtureClass;
576
    typedef typename GTEST_BIND_(TestSel, Type) TestClass;
577
 
578
    // First, registers the first type-parameterized test in the type
579
    // list.
580
    MakeAndRegisterTestInfo(
581
        (std::string(prefix) + (prefix[0] == '\0' ? "" : "/") + case_name + "/"
582
         + StreamableToString(index)).c_str(),
583
        GetPrefixUntilComma(test_names).c_str(),
584
        GetTypeName().c_str(),
585
        NULL,  // No value parameter.
586
        GetTypeId(),
587
        TestClass::SetUpTestCase,
588
        TestClass::TearDownTestCase,
589
        new TestFactoryImpl);
590
 
591
    // Next, recurses (at compile time) with the tail of the type list.
592
    return TypeParameterizedTest
593
        ::Register(prefix, case_name, test_names, index + 1);
594
  }
595
};
596
 
597
// The base case for the compile time recursion.
598
template 
599
class TypeParameterizedTest {
600
 public:
601
  static bool Register(const char* /*prefix*/, const char* /*case_name*/,
602
                       const char* /*test_names*/, int /*index*/) {
603
    return true;
604
  }
605
};
606
 
607
// TypeParameterizedTestCase::Register()
608
// registers *all combinations* of 'Tests' and 'Types' with Google
609
// Test.  The return value is insignificant - we just need to return
610
// something such that we can call this function in a namespace scope.
611
template 
612
class TypeParameterizedTestCase {
613
 public:
614
  static bool Register(const char* prefix, const char* case_name,
615
                       const char* test_names) {
616
    typedef typename Tests::Head Head;
617
 
618
    // First, register the first test in 'Test' for each type in 'Types'.
619
    TypeParameterizedTest::Register(
620
        prefix, case_name, test_names, 0);
621
 
622
    // Next, recurses (at compile time) with the tail of the test list.
623
    return TypeParameterizedTestCase
624
        ::Register(prefix, case_name, SkipComma(test_names));
625
  }
626
};
627
 
628
// The base case for the compile time recursion.
629
template 
630
class TypeParameterizedTestCase {
631
 public:
632
  static bool Register(const char* /*prefix*/, const char* /*case_name*/,
633
                       const char* /*test_names*/) {
634
    return true;
635
  }
636
};
637
 
638
#endif  // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
639
 
640
// Returns the current OS stack trace as an std::string.
641
//
642
// The maximum number of stack frames to be included is specified by
643
// the gtest_stack_trace_depth flag.  The skip_count parameter
644
// specifies the number of top frames to be skipped, which doesn't
645
// count against the number of frames to be included.
646
//
647
// For example, if Foo() calls Bar(), which in turn calls
648
// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in
649
// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't.
650
GTEST_API_ std::string GetCurrentOsStackTraceExceptTop(
651
    UnitTest* unit_test, int skip_count);
652
 
653
// Helpers for suppressing warnings on unreachable code or constant
654
// condition.
655
 
656
// Always returns true.
657
GTEST_API_ bool AlwaysTrue();
658
 
659
// Always returns false.
660
inline bool AlwaysFalse() { return !AlwaysTrue(); }
661
 
662
// Helper for suppressing false warning from Clang on a const char*
663
// variable declared in a conditional expression always being NULL in
664
// the else branch.
665
struct GTEST_API_ ConstCharPtr {
666
  ConstCharPtr(const char* str) : value(str) {}
667
  operator bool() const { return true; }
668
  const char* value;
669
};
670
 
671
// A simple Linear Congruential Generator for generating random
672
// numbers with a uniform distribution.  Unlike rand() and srand(), it
673
// doesn't use global state (and therefore can't interfere with user
674
// code).  Unlike rand_r(), it's portable.  An LCG isn't very random,
675
// but it's good enough for our purposes.
676
class GTEST_API_ Random {
677
 public:
678
  static const UInt32 kMaxRange = 1u << 31;
679
 
680
  explicit Random(UInt32 seed) : state_(seed) {}
681
 
682
  void Reseed(UInt32 seed) { state_ = seed; }
683
 
684
  // Generates a random number from [0, range).  Crashes if 'range' is
685
  // 0 or greater than kMaxRange.
686
  UInt32 Generate(UInt32 range);
687
 
688
 private:
689
  UInt32 state_;
690
  GTEST_DISALLOW_COPY_AND_ASSIGN_(Random);
691
};
692
 
693
// Defining a variable of type CompileAssertTypesEqual will cause a
694
// compiler error iff T1 and T2 are different types.
695
template 
696
struct CompileAssertTypesEqual;
697
 
698
template 
699
struct CompileAssertTypesEqual {
700
};
701
 
702
// Removes the reference from a type if it is a reference type,
703
// otherwise leaves it unchanged.  This is the same as
704
// tr1::remove_reference, which is not widely available yet.
705
template 
706
struct RemoveReference { typedef T type; };  // NOLINT
707
template 
708
struct RemoveReference { typedef T type; };  // NOLINT
709
 
710
// A handy wrapper around RemoveReference that works when the argument
711
// T depends on template parameters.
712
#define GTEST_REMOVE_REFERENCE_(T) \
713
    typename ::testing::internal::RemoveReference::type
714
 
715
// Removes const from a type if it is a const type, otherwise leaves
716
// it unchanged.  This is the same as tr1::remove_const, which is not
717
// widely available yet.
718
template 
719
struct RemoveConst { typedef T type; };  // NOLINT
720
template 
721
struct RemoveConst { typedef T type; };  // NOLINT
722
 
723
// MSVC 8.0, Sun C++, and IBM XL C++ have a bug which causes the above
724
// definition to fail to remove the const in 'const int[3]' and 'const
725
// char[3][4]'.  The following specialization works around the bug.
726
template 
727
struct RemoveConst {
728
  typedef typename RemoveConst::type type[N];
729
};
730
 
731
#if defined(_MSC_VER) && _MSC_VER < 1400
732
// This is the only specialization that allows VC++ 7.1 to remove const in
733
// 'const int[3] and 'const int[3][4]'.  However, it causes trouble with GCC
734
// and thus needs to be conditionally compiled.
735
template 
736
struct RemoveConst {
737
  typedef typename RemoveConst::type type[N];
738
};
739
#endif
740
 
741
// A handy wrapper around RemoveConst that works when the argument
742
// T depends on template parameters.
743
#define GTEST_REMOVE_CONST_(T) \
744
    typename ::testing::internal::RemoveConst::type
745
 
746
// Turns const U&, U&, const U, and U all into U.
747
#define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \
748
    GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T))
749
 
750
// Adds reference to a type if it is not a reference type,
751
// otherwise leaves it unchanged.  This is the same as
752
// tr1::add_reference, which is not widely available yet.
753
template 
754
struct AddReference { typedef T& type; };  // NOLINT
755
template 
756
struct AddReference { typedef T& type; };  // NOLINT
757
 
758
// A handy wrapper around AddReference that works when the argument T
759
// depends on template parameters.
760
#define GTEST_ADD_REFERENCE_(T) \
761
    typename ::testing::internal::AddReference::type
762
 
763
// Adds a reference to const on top of T as necessary.  For example,
764
// it transforms
765
//
766
//   char         ==> const char&
767
//   const char   ==> const char&
768
//   char&        ==> const char&
769
//   const char&  ==> const char&
770
//
771
// The argument T must depend on some template parameters.
772
#define GTEST_REFERENCE_TO_CONST_(T) \
773
    GTEST_ADD_REFERENCE_(const GTEST_REMOVE_REFERENCE_(T))
774
 
775
// ImplicitlyConvertible::value is a compile-time bool
776
// constant that's true iff type From can be implicitly converted to
777
// type To.
778
template 
779
class ImplicitlyConvertible {
780
 private:
781
  // We need the following helper functions only for their types.
782
  // They have no implementations.
783
 
784
  // MakeFrom() is an expression whose type is From.  We cannot simply
785
  // use From(), as the type From may not have a public default
786
  // constructor.
787
  static From MakeFrom();
788
 
789
  // These two functions are overloaded.  Given an expression
790
  // Helper(x), the compiler will pick the first version if x can be
791
  // implicitly converted to type To; otherwise it will pick the
792
  // second version.
793
  //
794
  // The first version returns a value of size 1, and the second
795
  // version returns a value of size 2.  Therefore, by checking the
796
  // size of Helper(x), which can be done at compile time, we can tell
797
  // which version of Helper() is used, and hence whether x can be
798
  // implicitly converted to type To.
799
  static char Helper(To);
800
  static char (&Helper(...))[2];  // NOLINT
801
 
802
  // We have to put the 'public' section after the 'private' section,
803
  // or MSVC refuses to compile the code.
804
 public:
805
  // MSVC warns about implicitly converting from double to int for
806
  // possible loss of data, so we need to temporarily disable the
807
  // warning.
808
#ifdef _MSC_VER
809
# pragma warning(push)          // Saves the current warning state.
810
# pragma warning(disable:4244)  // Temporarily disables warning 4244.
811
 
812
  static const bool value =
813
      sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1;
814
# pragma warning(pop)           // Restores the warning state.
815
#elif defined(__BORLANDC__)
816
  // C++Builder cannot use member overload resolution during template
817
  // instantiation.  The simplest workaround is to use its C++0x type traits
818
  // functions (C++Builder 2009 and above only).
819
  static const bool value = __is_convertible(From, To);
820
#else
821
  static const bool value =
822
      sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1;
823
#endif  // _MSV_VER
824
};
825
template 
826
const bool ImplicitlyConvertible::value;
827
 
828
// IsAProtocolMessage::value is a compile-time bool constant that's
829
// true iff T is type ProtocolMessage, proto2::Message, or a subclass
830
// of those.
831
template 
832
struct IsAProtocolMessage
833
    : public bool_constant<
834
  ImplicitlyConvertible::value ||
835
  ImplicitlyConvertible::value> {
836
};
837
 
838
// When the compiler sees expression IsContainerTest(0), if C is an
839
// STL-style container class, the first overload of IsContainerTest
840
// will be viable (since both C::iterator* and C::const_iterator* are
841
// valid types and NULL can be implicitly converted to them).  It will
842
// be picked over the second overload as 'int' is a perfect match for
843
// the type of argument 0.  If C::iterator or C::const_iterator is not
844
// a valid type, the first overload is not viable, and the second
845
// overload will be picked.  Therefore, we can determine whether C is
846
// a container class by checking the type of IsContainerTest(0).
847
// The value of the expression is insignificant.
848
//
849
// Note that we look for both C::iterator and C::const_iterator.  The
850
// reason is that C++ injects the name of a class as a member of the
851
// class itself (e.g. you can refer to class iterator as either
852
// 'iterator' or 'iterator::iterator').  If we look for C::iterator
853
// only, for example, we would mistakenly think that a class named
854
// iterator is an STL container.
855
//
856
// Also note that the simpler approach of overloading
857
// IsContainerTest(typename C::const_iterator*) and
858
// IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++.
859
typedef int IsContainer;
860
template 
861
IsContainer IsContainerTest(int /* dummy */,
862
                            typename C::iterator* /* it */ = NULL,
863
                            typename C::const_iterator* /* const_it */ = NULL) {
864
  return 0;
865
}
866
 
867
typedef char IsNotContainer;
868
template 
869
IsNotContainer IsContainerTest(long /* dummy */) { return '\0'; }
870
 
871
// EnableIf::type is void when 'Cond' is true, and
872
// undefined when 'Cond' is false.  To use SFINAE to make a function
873
// overload only apply when a particular expression is true, add
874
// "typename EnableIf::type* = 0" as the last parameter.
875
template struct EnableIf;
876
template<> struct EnableIf { typedef void type; };  // NOLINT
877
 
878
// Utilities for native arrays.
879
 
880
// ArrayEq() compares two k-dimensional native arrays using the
881
// elements' operator==, where k can be any integer >= 0.  When k is
882
// 0, ArrayEq() degenerates into comparing a single pair of values.
883
 
884
template 
885
bool ArrayEq(const T* lhs, size_t size, const U* rhs);
886
 
887
// This generic version is used when k is 0.
888
template 
889
inline bool ArrayEq(const T& lhs, const U& rhs) { return lhs == rhs; }
890
 
891
// This overload is used when k >= 1.
892
template 
893
inline bool ArrayEq(const T(&lhs)[N], const U(&rhs)[N]) {
894
  return internal::ArrayEq(lhs, N, rhs);
895
}
896
 
897
// This helper reduces code bloat.  If we instead put its logic inside
898
// the previous ArrayEq() function, arrays with different sizes would
899
// lead to different copies of the template code.
900
template 
901
bool ArrayEq(const T* lhs, size_t size, const U* rhs) {
902
  for (size_t i = 0; i != size; i++) {
903
    if (!internal::ArrayEq(lhs[i], rhs[i]))
904
      return false;
905
  }
906
  return true;
907
}
908
 
909
// Finds the first element in the iterator range [begin, end) that
910
// equals elem.  Element may be a native array type itself.
911
template 
912
Iter ArrayAwareFind(Iter begin, Iter end, const Element& elem) {
913
  for (Iter it = begin; it != end; ++it) {
914
    if (internal::ArrayEq(*it, elem))
915
      return it;
916
  }
917
  return end;
918
}
919
 
920
// CopyArray() copies a k-dimensional native array using the elements'
921
// operator=, where k can be any integer >= 0.  When k is 0,
922
// CopyArray() degenerates into copying a single value.
923
 
924
template 
925
void CopyArray(const T* from, size_t size, U* to);
926
 
927
// This generic version is used when k is 0.
928
template 
929
inline void CopyArray(const T& from, U* to) { *to = from; }
930
 
931
// This overload is used when k >= 1.
932
template 
933
inline void CopyArray(const T(&from)[N], U(*to)[N]) {
934
  internal::CopyArray(from, N, *to);
935
}
936
 
937
// This helper reduces code bloat.  If we instead put its logic inside
938
// the previous CopyArray() function, arrays with different sizes
939
// would lead to different copies of the template code.
940
template 
941
void CopyArray(const T* from, size_t size, U* to) {
942
  for (size_t i = 0; i != size; i++) {
943
    internal::CopyArray(from[i], to + i);
944
  }
945
}
946
 
947
// The relation between an NativeArray object (see below) and the
948
// native array it represents.
949
enum RelationToSource {
950
  kReference,  // The NativeArray references the native array.
951
  kCopy        // The NativeArray makes a copy of the native array and
952
               // owns the copy.
953
};
954
 
955
// Adapts a native array to a read-only STL-style container.  Instead
956
// of the complete STL container concept, this adaptor only implements
957
// members useful for Google Mock's container matchers.  New members
958
// should be added as needed.  To simplify the implementation, we only
959
// support Element being a raw type (i.e. having no top-level const or
960
// reference modifier).  It's the client's responsibility to satisfy
961
// this requirement.  Element can be an array type itself (hence
962
// multi-dimensional arrays are supported).
963
template 
964
class NativeArray {
965
 public:
966
  // STL-style container typedefs.
967
  typedef Element value_type;
968
  typedef Element* iterator;
969
  typedef const Element* const_iterator;
970
 
971
  // Constructs from a native array.
972
  NativeArray(const Element* array, size_t count, RelationToSource relation) {
973
    Init(array, count, relation);
974
  }
975
 
976
  // Copy constructor.
977
  NativeArray(const NativeArray& rhs) {
978
    Init(rhs.array_, rhs.size_, rhs.relation_to_source_);
979
  }
980
 
981
  ~NativeArray() {
982
    // Ensures that the user doesn't instantiate NativeArray with a
983
    // const or reference type.
984
    static_cast(StaticAssertTypeEqHelper
985
        GTEST_REMOVE_REFERENCE_AND_CONST_(Element)>());
986
    if (relation_to_source_ == kCopy)
987
      delete[] array_;
988
  }
989
 
990
  // STL-style container methods.
991
  size_t size() const { return size_; }
992
  const_iterator begin() const { return array_; }
993
  const_iterator end() const { return array_ + size_; }
994
  bool operator==(const NativeArray& rhs) const {
995
    return size() == rhs.size() &&
996
        ArrayEq(begin(), size(), rhs.begin());
997
  }
998
 
999
 private:
1000
  // Initializes this object; makes a copy of the input array if
1001
  // 'relation' is kCopy.
1002
  void Init(const Element* array, size_t a_size, RelationToSource relation) {
1003
    if (relation == kReference) {
1004
      array_ = array;
1005
    } else {
1006
      Element* const copy = new Element[a_size];
1007
      CopyArray(array, a_size, copy);
1008
      array_ = copy;
1009
    }
1010
    size_ = a_size;
1011
    relation_to_source_ = relation;
1012
  }
1013
 
1014
  const Element* array_;
1015
  size_t size_;
1016
  RelationToSource relation_to_source_;
1017
 
1018
  GTEST_DISALLOW_ASSIGN_(NativeArray);
1019
};
1020
 
1021
}  // namespace internal
1022
}  // namespace testing
1023
 
1024
#define GTEST_MESSAGE_AT_(file, line, message, result_type) \
1025
  ::testing::internal::AssertHelper(result_type, file, line, message) \
1026
    = ::testing::Message()
1027
 
1028
#define GTEST_MESSAGE_(message, result_type) \
1029
  GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type)
1030
 
1031
#define GTEST_FATAL_FAILURE_(message) \
1032
  return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure)
1033
 
1034
#define GTEST_NONFATAL_FAILURE_(message) \
1035
  GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure)
1036
 
1037
#define GTEST_SUCCESS_(message) \
1038
  GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess)
1039
 
1040
// Suppresses MSVC warnings 4072 (unreachable code) for the code following
1041
// statement if it returns or throws (or doesn't return or throw in some
1042
// situations).
1043
#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \
1044
  if (::testing::internal::AlwaysTrue()) { statement; }
1045
 
1046
#define GTEST_TEST_THROW_(statement, expected_exception, fail) \
1047
  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
1048
  if (::testing::internal::ConstCharPtr gtest_msg = "") { \
1049
    bool gtest_caught_expected = false; \
1050
    try { \
1051
      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
1052
    } \
1053
    catch (expected_exception const&) { \
1054
      gtest_caught_expected = true; \
1055
    } \
1056
    catch (...) { \
1057
      gtest_msg.value = \
1058
          "Expected: " #statement " throws an exception of type " \
1059
          #expected_exception ".\n  Actual: it throws a different type."; \
1060
      goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
1061
    } \
1062
    if (!gtest_caught_expected) { \
1063
      gtest_msg.value = \
1064
          "Expected: " #statement " throws an exception of type " \
1065
          #expected_exception ".\n  Actual: it throws nothing."; \
1066
      goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
1067
    } \
1068
  } else \
1069
    GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \
1070
      fail(gtest_msg.value)
1071
 
1072
#define GTEST_TEST_NO_THROW_(statement, fail) \
1073
  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
1074
  if (::testing::internal::AlwaysTrue()) { \
1075
    try { \
1076
      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
1077
    } \
1078
    catch (...) { \
1079
      goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
1080
    } \
1081
  } else \
1082
    GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \
1083
      fail("Expected: " #statement " doesn't throw an exception.\n" \
1084
           "  Actual: it throws.")
1085
 
1086
#define GTEST_TEST_ANY_THROW_(statement, fail) \
1087
  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
1088
  if (::testing::internal::AlwaysTrue()) { \
1089
    bool gtest_caught_any = false; \
1090
    try { \
1091
      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
1092
    } \
1093
    catch (...) { \
1094
      gtest_caught_any = true; \
1095
    } \
1096
    if (!gtest_caught_any) { \
1097
      goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \
1098
    } \
1099
  } else \
1100
    GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \
1101
      fail("Expected: " #statement " throws an exception.\n" \
1102
           "  Actual: it doesn't.")
1103
 
1104
 
1105
// Implements Boolean test assertions such as EXPECT_TRUE. expression can be
1106
// either a boolean expression or an AssertionResult. text is a textual
1107
// represenation of expression as it was passed into the EXPECT_TRUE.
1108
#define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \
1109
  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
1110
  if (const ::testing::AssertionResult gtest_ar_ = \
1111
      ::testing::AssertionResult(expression)) \
1112
    ; \
1113
  else \
1114
    fail(::testing::internal::GetBoolAssertionFailureMessage(\
1115
        gtest_ar_, text, #actual, #expected).c_str())
1116
 
1117
#define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \
1118
  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
1119
  if (::testing::internal::AlwaysTrue()) { \
1120
    ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \
1121
    GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
1122
    if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \
1123
      goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \
1124
    } \
1125
  } else \
1126
    GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \
1127
      fail("Expected: " #statement " doesn't generate new fatal " \
1128
           "failures in the current thread.\n" \
1129
           "  Actual: it does.")
1130
 
1131
// Expands to the name of the class that implements the given test.
1132
#define GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
1133
  test_case_name##_##test_name##_Test
1134
 
1135
// Helper macro for defining tests.
1136
#define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\
1137
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\
1138
 public:\
1139
  GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\
1140
 private:\
1141
  virtual void TestBody();\
1142
  static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;\
1143
  GTEST_DISALLOW_COPY_AND_ASSIGN_(\
1144
      GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\
1145
};\
1146
\
1147
::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\
1148
  ::test_info_ =\
1149
    ::testing::internal::MakeAndRegisterTestInfo(\
1150
        #test_case_name, #test_name, NULL, NULL, \
1151
        (parent_id), \
1152
        parent_class::SetUpTestCase, \
1153
        parent_class::TearDownTestCase, \
1154
        new ::testing::internal::TestFactoryImpl<\
1155
            GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\
1156
void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
1157
 
1158
#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_