xref: /aosp_15_r20/external/googletest/docs/advanced.md (revision 481dde660366d6f317d242b6974ef1b20adb843c)
1*481dde66SAndroid Build Coastguard Worker# Advanced GoogleTest Topics
2*481dde66SAndroid Build Coastguard Worker
3*481dde66SAndroid Build Coastguard Worker## Introduction
4*481dde66SAndroid Build Coastguard Worker
5*481dde66SAndroid Build Coastguard WorkerNow that you have read the [GoogleTest Primer](primer.md) and learned how to
6*481dde66SAndroid Build Coastguard Workerwrite tests using GoogleTest, it's time to learn some new tricks. This document
7*481dde66SAndroid Build Coastguard Workerwill show you more assertions as well as how to construct complex failure
8*481dde66SAndroid Build Coastguard Workermessages, propagate fatal failures, reuse and speed up your test fixtures, and
9*481dde66SAndroid Build Coastguard Workeruse various flags with your tests.
10*481dde66SAndroid Build Coastguard Worker
11*481dde66SAndroid Build Coastguard Worker## More Assertions
12*481dde66SAndroid Build Coastguard Worker
13*481dde66SAndroid Build Coastguard WorkerThis section covers some less frequently used, but still significant,
14*481dde66SAndroid Build Coastguard Workerassertions.
15*481dde66SAndroid Build Coastguard Worker
16*481dde66SAndroid Build Coastguard Worker### Explicit Success and Failure
17*481dde66SAndroid Build Coastguard Worker
18*481dde66SAndroid Build Coastguard WorkerSee [Explicit Success and Failure](reference/assertions.md#success-failure) in
19*481dde66SAndroid Build Coastguard Workerthe Assertions Reference.
20*481dde66SAndroid Build Coastguard Worker
21*481dde66SAndroid Build Coastguard Worker### Exception Assertions
22*481dde66SAndroid Build Coastguard Worker
23*481dde66SAndroid Build Coastguard WorkerSee [Exception Assertions](reference/assertions.md#exceptions) in the Assertions
24*481dde66SAndroid Build Coastguard WorkerReference.
25*481dde66SAndroid Build Coastguard Worker
26*481dde66SAndroid Build Coastguard Worker### Predicate Assertions for Better Error Messages
27*481dde66SAndroid Build Coastguard Worker
28*481dde66SAndroid Build Coastguard WorkerEven though GoogleTest has a rich set of assertions, they can never be complete,
29*481dde66SAndroid Build Coastguard Workeras it's impossible (nor a good idea) to anticipate all scenarios a user might
30*481dde66SAndroid Build Coastguard Workerrun into. Therefore, sometimes a user has to use `EXPECT_TRUE()` to check a
31*481dde66SAndroid Build Coastguard Workercomplex expression, for lack of a better macro. This has the problem of not
32*481dde66SAndroid Build Coastguard Workershowing you the values of the parts of the expression, making it hard to
33*481dde66SAndroid Build Coastguard Workerunderstand what went wrong. As a workaround, some users choose to construct the
34*481dde66SAndroid Build Coastguard Workerfailure message by themselves, streaming it into `EXPECT_TRUE()`. However, this
35*481dde66SAndroid Build Coastguard Workeris awkward especially when the expression has side-effects or is expensive to
36*481dde66SAndroid Build Coastguard Workerevaluate.
37*481dde66SAndroid Build Coastguard Worker
38*481dde66SAndroid Build Coastguard WorkerGoogleTest gives you three different options to solve this problem:
39*481dde66SAndroid Build Coastguard Worker
40*481dde66SAndroid Build Coastguard Worker#### Using an Existing Boolean Function
41*481dde66SAndroid Build Coastguard Worker
42*481dde66SAndroid Build Coastguard WorkerIf you already have a function or functor that returns `bool` (or a type that
43*481dde66SAndroid Build Coastguard Workercan be implicitly converted to `bool`), you can use it in a *predicate
44*481dde66SAndroid Build Coastguard Workerassertion* to get the function arguments printed for free. See
45*481dde66SAndroid Build Coastguard Worker[`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) in the Assertions
46*481dde66SAndroid Build Coastguard WorkerReference for details.
47*481dde66SAndroid Build Coastguard Worker
48*481dde66SAndroid Build Coastguard Worker#### Using a Function That Returns an AssertionResult
49*481dde66SAndroid Build Coastguard Worker
50*481dde66SAndroid Build Coastguard WorkerWhile `EXPECT_PRED*()` and friends are handy for a quick job, the syntax is not
51*481dde66SAndroid Build Coastguard Workersatisfactory: you have to use different macros for different arities, and it
52*481dde66SAndroid Build Coastguard Workerfeels more like Lisp than C++. The `::testing::AssertionResult` class solves
53*481dde66SAndroid Build Coastguard Workerthis problem.
54*481dde66SAndroid Build Coastguard Worker
55*481dde66SAndroid Build Coastguard WorkerAn `AssertionResult` object represents the result of an assertion (whether it's
56*481dde66SAndroid Build Coastguard Workera success or a failure, and an associated message). You can create an
57*481dde66SAndroid Build Coastguard Worker`AssertionResult` using one of these factory functions:
58*481dde66SAndroid Build Coastguard Worker
59*481dde66SAndroid Build Coastguard Worker```c++
60*481dde66SAndroid Build Coastguard Workernamespace testing {
61*481dde66SAndroid Build Coastguard Worker
62*481dde66SAndroid Build Coastguard Worker// Returns an AssertionResult object to indicate that an assertion has
63*481dde66SAndroid Build Coastguard Worker// succeeded.
64*481dde66SAndroid Build Coastguard WorkerAssertionResult AssertionSuccess();
65*481dde66SAndroid Build Coastguard Worker
66*481dde66SAndroid Build Coastguard Worker// Returns an AssertionResult object to indicate that an assertion has
67*481dde66SAndroid Build Coastguard Worker// failed.
68*481dde66SAndroid Build Coastguard WorkerAssertionResult AssertionFailure();
69*481dde66SAndroid Build Coastguard Worker
70*481dde66SAndroid Build Coastguard Worker}
71*481dde66SAndroid Build Coastguard Worker```
72*481dde66SAndroid Build Coastguard Worker
73*481dde66SAndroid Build Coastguard WorkerYou can then use the `<<` operator to stream messages to the `AssertionResult`
74*481dde66SAndroid Build Coastguard Workerobject.
75*481dde66SAndroid Build Coastguard Worker
76*481dde66SAndroid Build Coastguard WorkerTo provide more readable messages in Boolean assertions (e.g. `EXPECT_TRUE()`),
77*481dde66SAndroid Build Coastguard Workerwrite a predicate function that returns `AssertionResult` instead of `bool`. For
78*481dde66SAndroid Build Coastguard Workerexample, if you define `IsEven()` as:
79*481dde66SAndroid Build Coastguard Worker
80*481dde66SAndroid Build Coastguard Worker```c++
81*481dde66SAndroid Build Coastguard Workertesting::AssertionResult IsEven(int n) {
82*481dde66SAndroid Build Coastguard Worker  if ((n % 2) == 0)
83*481dde66SAndroid Build Coastguard Worker    return testing::AssertionSuccess();
84*481dde66SAndroid Build Coastguard Worker  else
85*481dde66SAndroid Build Coastguard Worker    return testing::AssertionFailure() << n << " is odd";
86*481dde66SAndroid Build Coastguard Worker}
87*481dde66SAndroid Build Coastguard Worker```
88*481dde66SAndroid Build Coastguard Worker
89*481dde66SAndroid Build Coastguard Workerinstead of:
90*481dde66SAndroid Build Coastguard Worker
91*481dde66SAndroid Build Coastguard Worker```c++
92*481dde66SAndroid Build Coastguard Workerbool IsEven(int n) {
93*481dde66SAndroid Build Coastguard Worker  return (n % 2) == 0;
94*481dde66SAndroid Build Coastguard Worker}
95*481dde66SAndroid Build Coastguard Worker```
96*481dde66SAndroid Build Coastguard Worker
97*481dde66SAndroid Build Coastguard Workerthe failed assertion `EXPECT_TRUE(IsEven(Fib(4)))` will print:
98*481dde66SAndroid Build Coastguard Worker
99*481dde66SAndroid Build Coastguard Worker```none
100*481dde66SAndroid Build Coastguard WorkerValue of: IsEven(Fib(4))
101*481dde66SAndroid Build Coastguard Worker  Actual: false (3 is odd)
102*481dde66SAndroid Build Coastguard WorkerExpected: true
103*481dde66SAndroid Build Coastguard Worker```
104*481dde66SAndroid Build Coastguard Worker
105*481dde66SAndroid Build Coastguard Workerinstead of a more opaque
106*481dde66SAndroid Build Coastguard Worker
107*481dde66SAndroid Build Coastguard Worker```none
108*481dde66SAndroid Build Coastguard WorkerValue of: IsEven(Fib(4))
109*481dde66SAndroid Build Coastguard Worker  Actual: false
110*481dde66SAndroid Build Coastguard WorkerExpected: true
111*481dde66SAndroid Build Coastguard Worker```
112*481dde66SAndroid Build Coastguard Worker
113*481dde66SAndroid Build Coastguard WorkerIf you want informative messages in `EXPECT_FALSE` and `ASSERT_FALSE` as well
114*481dde66SAndroid Build Coastguard Worker(one third of Boolean assertions in the Google code base are negative ones), and
115*481dde66SAndroid Build Coastguard Workerare fine with making the predicate slower in the success case, you can supply a
116*481dde66SAndroid Build Coastguard Workersuccess message:
117*481dde66SAndroid Build Coastguard Worker
118*481dde66SAndroid Build Coastguard Worker```c++
119*481dde66SAndroid Build Coastguard Workertesting::AssertionResult IsEven(int n) {
120*481dde66SAndroid Build Coastguard Worker  if ((n % 2) == 0)
121*481dde66SAndroid Build Coastguard Worker    return testing::AssertionSuccess() << n << " is even";
122*481dde66SAndroid Build Coastguard Worker  else
123*481dde66SAndroid Build Coastguard Worker    return testing::AssertionFailure() << n << " is odd";
124*481dde66SAndroid Build Coastguard Worker}
125*481dde66SAndroid Build Coastguard Worker```
126*481dde66SAndroid Build Coastguard Worker
127*481dde66SAndroid Build Coastguard WorkerThen the statement `EXPECT_FALSE(IsEven(Fib(6)))` will print
128*481dde66SAndroid Build Coastguard Worker
129*481dde66SAndroid Build Coastguard Worker```none
130*481dde66SAndroid Build Coastguard Worker  Value of: IsEven(Fib(6))
131*481dde66SAndroid Build Coastguard Worker     Actual: true (8 is even)
132*481dde66SAndroid Build Coastguard Worker  Expected: false
133*481dde66SAndroid Build Coastguard Worker```
134*481dde66SAndroid Build Coastguard Worker
135*481dde66SAndroid Build Coastguard Worker#### Using a Predicate-Formatter
136*481dde66SAndroid Build Coastguard Worker
137*481dde66SAndroid Build Coastguard WorkerIf you find the default message generated by
138*481dde66SAndroid Build Coastguard Worker[`EXPECT_PRED*`](reference/assertions.md#EXPECT_PRED) and
139*481dde66SAndroid Build Coastguard Worker[`EXPECT_TRUE`](reference/assertions.md#EXPECT_TRUE) unsatisfactory, or some
140*481dde66SAndroid Build Coastguard Workerarguments to your predicate do not support streaming to `ostream`, you can
141*481dde66SAndroid Build Coastguard Workerinstead use *predicate-formatter assertions* to *fully* customize how the
142*481dde66SAndroid Build Coastguard Workermessage is formatted. See
143*481dde66SAndroid Build Coastguard Worker[`EXPECT_PRED_FORMAT*`](reference/assertions.md#EXPECT_PRED_FORMAT) in the
144*481dde66SAndroid Build Coastguard WorkerAssertions Reference for details.
145*481dde66SAndroid Build Coastguard Worker
146*481dde66SAndroid Build Coastguard Worker### Floating-Point Comparison
147*481dde66SAndroid Build Coastguard Worker
148*481dde66SAndroid Build Coastguard WorkerSee [Floating-Point Comparison](reference/assertions.md#floating-point) in the
149*481dde66SAndroid Build Coastguard WorkerAssertions Reference.
150*481dde66SAndroid Build Coastguard Worker
151*481dde66SAndroid Build Coastguard Worker#### Floating-Point Predicate-Format Functions
152*481dde66SAndroid Build Coastguard Worker
153*481dde66SAndroid Build Coastguard WorkerSome floating-point operations are useful, but not that often used. In order to
154*481dde66SAndroid Build Coastguard Workeravoid an explosion of new macros, we provide them as predicate-format functions
155*481dde66SAndroid Build Coastguard Workerthat can be used in the predicate assertion macro
156*481dde66SAndroid Build Coastguard Worker[`EXPECT_PRED_FORMAT2`](reference/assertions.md#EXPECT_PRED_FORMAT), for
157*481dde66SAndroid Build Coastguard Workerexample:
158*481dde66SAndroid Build Coastguard Worker
159*481dde66SAndroid Build Coastguard Worker```c++
160*481dde66SAndroid Build Coastguard Workerusing ::testing::FloatLE;
161*481dde66SAndroid Build Coastguard Workerusing ::testing::DoubleLE;
162*481dde66SAndroid Build Coastguard Worker...
163*481dde66SAndroid Build Coastguard WorkerEXPECT_PRED_FORMAT2(FloatLE, val1, val2);
164*481dde66SAndroid Build Coastguard WorkerEXPECT_PRED_FORMAT2(DoubleLE, val1, val2);
165*481dde66SAndroid Build Coastguard Worker```
166*481dde66SAndroid Build Coastguard Worker
167*481dde66SAndroid Build Coastguard WorkerThe above code verifies that `val1` is less than, or approximately equal to,
168*481dde66SAndroid Build Coastguard Worker`val2`.
169*481dde66SAndroid Build Coastguard Worker
170*481dde66SAndroid Build Coastguard Worker### Asserting Using gMock Matchers
171*481dde66SAndroid Build Coastguard Worker
172*481dde66SAndroid Build Coastguard WorkerSee [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) in the Assertions
173*481dde66SAndroid Build Coastguard WorkerReference.
174*481dde66SAndroid Build Coastguard Worker
175*481dde66SAndroid Build Coastguard Worker### More String Assertions
176*481dde66SAndroid Build Coastguard Worker
177*481dde66SAndroid Build Coastguard Worker(Please read the [previous](#asserting-using-gmock-matchers) section first if
178*481dde66SAndroid Build Coastguard Workeryou haven't.)
179*481dde66SAndroid Build Coastguard Worker
180*481dde66SAndroid Build Coastguard WorkerYou can use the gMock [string matchers](reference/matchers.md#string-matchers)
181*481dde66SAndroid Build Coastguard Workerwith [`EXPECT_THAT`](reference/assertions.md#EXPECT_THAT) to do more string
182*481dde66SAndroid Build Coastguard Workercomparison tricks (sub-string, prefix, suffix, regular expression, and etc). For
183*481dde66SAndroid Build Coastguard Workerexample,
184*481dde66SAndroid Build Coastguard Worker
185*481dde66SAndroid Build Coastguard Worker```c++
186*481dde66SAndroid Build Coastguard Workerusing ::testing::HasSubstr;
187*481dde66SAndroid Build Coastguard Workerusing ::testing::MatchesRegex;
188*481dde66SAndroid Build Coastguard Worker...
189*481dde66SAndroid Build Coastguard Worker  ASSERT_THAT(foo_string, HasSubstr("needle"));
190*481dde66SAndroid Build Coastguard Worker  EXPECT_THAT(bar_string, MatchesRegex("\\w*\\d+"));
191*481dde66SAndroid Build Coastguard Worker```
192*481dde66SAndroid Build Coastguard Worker
193*481dde66SAndroid Build Coastguard Worker### Windows HRESULT assertions
194*481dde66SAndroid Build Coastguard Worker
195*481dde66SAndroid Build Coastguard WorkerSee [Windows HRESULT Assertions](reference/assertions.md#HRESULT) in the
196*481dde66SAndroid Build Coastguard WorkerAssertions Reference.
197*481dde66SAndroid Build Coastguard Worker
198*481dde66SAndroid Build Coastguard Worker### Type Assertions
199*481dde66SAndroid Build Coastguard Worker
200*481dde66SAndroid Build Coastguard WorkerYou can call the function
201*481dde66SAndroid Build Coastguard Worker
202*481dde66SAndroid Build Coastguard Worker```c++
203*481dde66SAndroid Build Coastguard Worker::testing::StaticAssertTypeEq<T1, T2>();
204*481dde66SAndroid Build Coastguard Worker```
205*481dde66SAndroid Build Coastguard Worker
206*481dde66SAndroid Build Coastguard Workerto assert that types `T1` and `T2` are the same. The function does nothing if
207*481dde66SAndroid Build Coastguard Workerthe assertion is satisfied. If the types are different, the function call will
208*481dde66SAndroid Build Coastguard Workerfail to compile, the compiler error message will say that `T1 and T2 are not the
209*481dde66SAndroid Build Coastguard Workersame type` and most likely (depending on the compiler) show you the actual
210*481dde66SAndroid Build Coastguard Workervalues of `T1` and `T2`. This is mainly useful inside template code.
211*481dde66SAndroid Build Coastguard Worker
212*481dde66SAndroid Build Coastguard Worker**Caveat**: When used inside a member function of a class template or a function
213*481dde66SAndroid Build Coastguard Workertemplate, `StaticAssertTypeEq<T1, T2>()` is effective only if the function is
214*481dde66SAndroid Build Coastguard Workerinstantiated. For example, given:
215*481dde66SAndroid Build Coastguard Worker
216*481dde66SAndroid Build Coastguard Worker```c++
217*481dde66SAndroid Build Coastguard Workertemplate <typename T> class Foo {
218*481dde66SAndroid Build Coastguard Worker public:
219*481dde66SAndroid Build Coastguard Worker  void Bar() { testing::StaticAssertTypeEq<int, T>(); }
220*481dde66SAndroid Build Coastguard Worker};
221*481dde66SAndroid Build Coastguard Worker```
222*481dde66SAndroid Build Coastguard Worker
223*481dde66SAndroid Build Coastguard Workerthe code:
224*481dde66SAndroid Build Coastguard Worker
225*481dde66SAndroid Build Coastguard Worker```c++
226*481dde66SAndroid Build Coastguard Workervoid Test1() { Foo<bool> foo; }
227*481dde66SAndroid Build Coastguard Worker```
228*481dde66SAndroid Build Coastguard Worker
229*481dde66SAndroid Build Coastguard Workerwill not generate a compiler error, as `Foo<bool>::Bar()` is never actually
230*481dde66SAndroid Build Coastguard Workerinstantiated. Instead, you need:
231*481dde66SAndroid Build Coastguard Worker
232*481dde66SAndroid Build Coastguard Worker```c++
233*481dde66SAndroid Build Coastguard Workervoid Test2() { Foo<bool> foo; foo.Bar(); }
234*481dde66SAndroid Build Coastguard Worker```
235*481dde66SAndroid Build Coastguard Worker
236*481dde66SAndroid Build Coastguard Workerto cause a compiler error.
237*481dde66SAndroid Build Coastguard Worker
238*481dde66SAndroid Build Coastguard Worker### Assertion Placement
239*481dde66SAndroid Build Coastguard Worker
240*481dde66SAndroid Build Coastguard WorkerYou can use assertions in any C++ function. In particular, it doesn't have to be
241*481dde66SAndroid Build Coastguard Workera method of the test fixture class. The one constraint is that assertions that
242*481dde66SAndroid Build Coastguard Workergenerate a fatal failure (`FAIL*` and `ASSERT_*`) can only be used in
243*481dde66SAndroid Build Coastguard Workervoid-returning functions. This is a consequence of Google's not using
244*481dde66SAndroid Build Coastguard Workerexceptions. By placing it in a non-void function you'll get a confusing compile
245*481dde66SAndroid Build Coastguard Workererror like `"error: void value not ignored as it ought to be"` or `"cannot
246*481dde66SAndroid Build Coastguard Workerinitialize return object of type 'bool' with an rvalue of type 'void'"` or
247*481dde66SAndroid Build Coastguard Worker`"error: no viable conversion from 'void' to 'string'"`.
248*481dde66SAndroid Build Coastguard Worker
249*481dde66SAndroid Build Coastguard WorkerIf you need to use fatal assertions in a function that returns non-void, one
250*481dde66SAndroid Build Coastguard Workeroption is to make the function return the value in an out parameter instead. For
251*481dde66SAndroid Build Coastguard Workerexample, you can rewrite `T2 Foo(T1 x)` to `void Foo(T1 x, T2* result)`. You
252*481dde66SAndroid Build Coastguard Workerneed to make sure that `*result` contains some sensible value even when the
253*481dde66SAndroid Build Coastguard Workerfunction returns prematurely. As the function now returns `void`, you can use
254*481dde66SAndroid Build Coastguard Workerany assertion inside of it.
255*481dde66SAndroid Build Coastguard Worker
256*481dde66SAndroid Build Coastguard WorkerIf changing the function's type is not an option, you should just use assertions
257*481dde66SAndroid Build Coastguard Workerthat generate non-fatal failures, such as `ADD_FAILURE*` and `EXPECT_*`.
258*481dde66SAndroid Build Coastguard Worker
259*481dde66SAndroid Build Coastguard Worker{: .callout .note}
260*481dde66SAndroid Build Coastguard WorkerNOTE: Constructors and destructors are not considered void-returning functions,
261*481dde66SAndroid Build Coastguard Workeraccording to the C++ language specification, and so you may not use fatal
262*481dde66SAndroid Build Coastguard Workerassertions in them; you'll get a compilation error if you try. Instead, either
263*481dde66SAndroid Build Coastguard Workercall `abort` and crash the entire test executable, or put the fatal assertion in
264*481dde66SAndroid Build Coastguard Workera `SetUp`/`TearDown` function; see
265*481dde66SAndroid Build Coastguard Worker[constructor/destructor vs. `SetUp`/`TearDown`](faq.md#CtorVsSetUp)
266*481dde66SAndroid Build Coastguard Worker
267*481dde66SAndroid Build Coastguard Worker{: .callout .warning}
268*481dde66SAndroid Build Coastguard WorkerWARNING: A fatal assertion in a helper function (private void-returning method)
269*481dde66SAndroid Build Coastguard Workercalled from a constructor or destructor does not terminate the current test, as
270*481dde66SAndroid Build Coastguard Workeryour intuition might suggest: it merely returns from the constructor or
271*481dde66SAndroid Build Coastguard Workerdestructor early, possibly leaving your object in a partially-constructed or
272*481dde66SAndroid Build Coastguard Workerpartially-destructed state! You almost certainly want to `abort` or use
273*481dde66SAndroid Build Coastguard Worker`SetUp`/`TearDown` instead.
274*481dde66SAndroid Build Coastguard Worker
275*481dde66SAndroid Build Coastguard Worker## Skipping test execution
276*481dde66SAndroid Build Coastguard Worker
277*481dde66SAndroid Build Coastguard WorkerRelated to the assertions `SUCCEED()` and `FAIL()`, you can prevent further test
278*481dde66SAndroid Build Coastguard Workerexecution at runtime with the `GTEST_SKIP()` macro. This is useful when you need
279*481dde66SAndroid Build Coastguard Workerto check for preconditions of the system under test during runtime and skip
280*481dde66SAndroid Build Coastguard Workertests in a meaningful way.
281*481dde66SAndroid Build Coastguard Worker
282*481dde66SAndroid Build Coastguard Worker`GTEST_SKIP()` can be used in individual test cases or in the `SetUp()` methods
283*481dde66SAndroid Build Coastguard Workerof classes derived from either `::testing::Environment` or `::testing::Test`.
284*481dde66SAndroid Build Coastguard WorkerFor example:
285*481dde66SAndroid Build Coastguard Worker
286*481dde66SAndroid Build Coastguard Worker```c++
287*481dde66SAndroid Build Coastguard WorkerTEST(SkipTest, DoesSkip) {
288*481dde66SAndroid Build Coastguard Worker  GTEST_SKIP() << "Skipping single test";
289*481dde66SAndroid Build Coastguard Worker  EXPECT_EQ(0, 1);  // Won't fail; it won't be executed
290*481dde66SAndroid Build Coastguard Worker}
291*481dde66SAndroid Build Coastguard Worker
292*481dde66SAndroid Build Coastguard Workerclass SkipFixture : public ::testing::Test {
293*481dde66SAndroid Build Coastguard Worker protected:
294*481dde66SAndroid Build Coastguard Worker  void SetUp() override {
295*481dde66SAndroid Build Coastguard Worker    GTEST_SKIP() << "Skipping all tests for this fixture";
296*481dde66SAndroid Build Coastguard Worker  }
297*481dde66SAndroid Build Coastguard Worker};
298*481dde66SAndroid Build Coastguard Worker
299*481dde66SAndroid Build Coastguard Worker// Tests for SkipFixture won't be executed.
300*481dde66SAndroid Build Coastguard WorkerTEST_F(SkipFixture, SkipsOneTest) {
301*481dde66SAndroid Build Coastguard Worker  EXPECT_EQ(5, 7);  // Won't fail
302*481dde66SAndroid Build Coastguard Worker}
303*481dde66SAndroid Build Coastguard Worker```
304*481dde66SAndroid Build Coastguard Worker
305*481dde66SAndroid Build Coastguard WorkerAs with assertion macros, you can stream a custom message into `GTEST_SKIP()`.
306*481dde66SAndroid Build Coastguard Worker
307*481dde66SAndroid Build Coastguard Worker## Teaching GoogleTest How to Print Your Values
308*481dde66SAndroid Build Coastguard Worker
309*481dde66SAndroid Build Coastguard WorkerWhen a test assertion such as `EXPECT_EQ` fails, GoogleTest prints the argument
310*481dde66SAndroid Build Coastguard Workervalues to help you debug. It does this using a user-extensible value printer.
311*481dde66SAndroid Build Coastguard Worker
312*481dde66SAndroid Build Coastguard WorkerThis printer knows how to print built-in C++ types, native arrays, STL
313*481dde66SAndroid Build Coastguard Workercontainers, and any type that supports the `<<` operator. For other types, it
314*481dde66SAndroid Build Coastguard Workerprints the raw bytes in the value and hopes that you the user can figure it out.
315*481dde66SAndroid Build Coastguard Worker
316*481dde66SAndroid Build Coastguard WorkerAs mentioned earlier, the printer is *extensible*. That means you can teach it
317*481dde66SAndroid Build Coastguard Workerto do a better job at printing your particular type than to dump the bytes. To
318*481dde66SAndroid Build Coastguard Workerdo that, define an `AbslStringify()` overload as a `friend` function template
319*481dde66SAndroid Build Coastguard Workerfor your type:
320*481dde66SAndroid Build Coastguard Worker
321*481dde66SAndroid Build Coastguard Worker```cpp
322*481dde66SAndroid Build Coastguard Workernamespace foo {
323*481dde66SAndroid Build Coastguard Worker
324*481dde66SAndroid Build Coastguard Workerclass Point {  // We want GoogleTest to be able to print instances of this.
325*481dde66SAndroid Build Coastguard Worker  ...
326*481dde66SAndroid Build Coastguard Worker  // Provide a friend overload.
327*481dde66SAndroid Build Coastguard Worker  template <typename Sink>
328*481dde66SAndroid Build Coastguard Worker  friend void AbslStringify(Sink& sink, const Point& point) {
329*481dde66SAndroid Build Coastguard Worker    absl::Format(&sink, "(%d, %d)", point.x, point.y);
330*481dde66SAndroid Build Coastguard Worker  }
331*481dde66SAndroid Build Coastguard Worker
332*481dde66SAndroid Build Coastguard Worker  int x;
333*481dde66SAndroid Build Coastguard Worker  int y;
334*481dde66SAndroid Build Coastguard Worker};
335*481dde66SAndroid Build Coastguard Worker
336*481dde66SAndroid Build Coastguard Worker// If you can't declare the function in the class it's important that the
337*481dde66SAndroid Build Coastguard Worker// AbslStringify overload is defined in the SAME namespace that defines Point.
338*481dde66SAndroid Build Coastguard Worker// C++'s look-up rules rely on that.
339*481dde66SAndroid Build Coastguard Workerenum class EnumWithStringify { kMany = 0, kChoices = 1 };
340*481dde66SAndroid Build Coastguard Worker
341*481dde66SAndroid Build Coastguard Workertemplate <typename Sink>
342*481dde66SAndroid Build Coastguard Workervoid AbslStringify(Sink& sink, EnumWithStringify e) {
343*481dde66SAndroid Build Coastguard Worker  absl::Format(&sink, "%s", e == EnumWithStringify::kMany ? "Many" : "Choices");
344*481dde66SAndroid Build Coastguard Worker}
345*481dde66SAndroid Build Coastguard Worker
346*481dde66SAndroid Build Coastguard Worker}  // namespace foo
347*481dde66SAndroid Build Coastguard Worker```
348*481dde66SAndroid Build Coastguard Worker
349*481dde66SAndroid Build Coastguard Worker{: .callout .note}
350*481dde66SAndroid Build Coastguard WorkerNote: `AbslStringify()` utilizes a generic "sink" buffer to construct its
351*481dde66SAndroid Build Coastguard Workerstring. For more information about supported operations on `AbslStringify()`'s
352*481dde66SAndroid Build Coastguard Workersink, see go/abslstringify.
353*481dde66SAndroid Build Coastguard Worker
354*481dde66SAndroid Build Coastguard Worker`AbslStringify()` can also use `absl::StrFormat`'s catch-all `%v` type specifier
355*481dde66SAndroid Build Coastguard Workerwithin its own format strings to perform type deduction. `Point` above could be
356*481dde66SAndroid Build Coastguard Workerformatted as `"(%v, %v)"` for example, and deduce the `int` values as `%d`.
357*481dde66SAndroid Build Coastguard Worker
358*481dde66SAndroid Build Coastguard WorkerSometimes, `AbslStringify()` might not be an option: your team may wish to print
359*481dde66SAndroid Build Coastguard Workertypes with extra debugging information for testing purposes only. If so, you can
360*481dde66SAndroid Build Coastguard Workerinstead define a `PrintTo()` function like this:
361*481dde66SAndroid Build Coastguard Worker
362*481dde66SAndroid Build Coastguard Worker```c++
363*481dde66SAndroid Build Coastguard Worker#include <ostream>
364*481dde66SAndroid Build Coastguard Worker
365*481dde66SAndroid Build Coastguard Workernamespace foo {
366*481dde66SAndroid Build Coastguard Worker
367*481dde66SAndroid Build Coastguard Workerclass Point {
368*481dde66SAndroid Build Coastguard Worker  ...
369*481dde66SAndroid Build Coastguard Worker  friend void PrintTo(const Point& point, std::ostream* os) {
370*481dde66SAndroid Build Coastguard Worker    *os << "(" << point.x << "," << point.y << ")";
371*481dde66SAndroid Build Coastguard Worker  }
372*481dde66SAndroid Build Coastguard Worker
373*481dde66SAndroid Build Coastguard Worker  int x;
374*481dde66SAndroid Build Coastguard Worker  int y;
375*481dde66SAndroid Build Coastguard Worker};
376*481dde66SAndroid Build Coastguard Worker
377*481dde66SAndroid Build Coastguard Worker// If you can't declare the function in the class it's important that PrintTo()
378*481dde66SAndroid Build Coastguard Worker// is defined in the SAME namespace that defines Point.  C++'s look-up rules
379*481dde66SAndroid Build Coastguard Worker// rely on that.
380*481dde66SAndroid Build Coastguard Workervoid PrintTo(const Point& point, std::ostream* os) {
381*481dde66SAndroid Build Coastguard Worker    *os << "(" << point.x << "," << point.y << ")";
382*481dde66SAndroid Build Coastguard Worker}
383*481dde66SAndroid Build Coastguard Worker
384*481dde66SAndroid Build Coastguard Worker}  // namespace foo
385*481dde66SAndroid Build Coastguard Worker```
386*481dde66SAndroid Build Coastguard Worker
387*481dde66SAndroid Build Coastguard WorkerIf you have defined both `AbslStringify()` and `PrintTo()`, the latter will be
388*481dde66SAndroid Build Coastguard Workerused by GoogleTest. This allows you to customize how the value appears in
389*481dde66SAndroid Build Coastguard WorkerGoogleTest's output without affecting code that relies on the behavior of
390*481dde66SAndroid Build Coastguard Worker`AbslStringify()`.
391*481dde66SAndroid Build Coastguard Worker
392*481dde66SAndroid Build Coastguard WorkerIf you have an existing `<<` operator and would like to define an
393*481dde66SAndroid Build Coastguard Worker`AbslStringify()`, the latter will be used for GoogleTest printing.
394*481dde66SAndroid Build Coastguard Worker
395*481dde66SAndroid Build Coastguard WorkerIf you want to print a value `x` using GoogleTest's value printer yourself, just
396*481dde66SAndroid Build Coastguard Workercall `::testing::PrintToString(x)`, which returns an `std::string`:
397*481dde66SAndroid Build Coastguard Worker
398*481dde66SAndroid Build Coastguard Worker```c++
399*481dde66SAndroid Build Coastguard Workervector<pair<Point, int> > point_ints = GetPointIntVector();
400*481dde66SAndroid Build Coastguard Worker
401*481dde66SAndroid Build Coastguard WorkerEXPECT_TRUE(IsCorrectPointIntVector(point_ints))
402*481dde66SAndroid Build Coastguard Worker    << "point_ints = " << testing::PrintToString(point_ints);
403*481dde66SAndroid Build Coastguard Worker```
404*481dde66SAndroid Build Coastguard Worker
405*481dde66SAndroid Build Coastguard WorkerFor more details regarding `AbslStringify()` and its integration with other
406*481dde66SAndroid Build Coastguard Workerlibraries, see go/abslstringify.
407*481dde66SAndroid Build Coastguard Worker
408*481dde66SAndroid Build Coastguard Worker## Death Tests
409*481dde66SAndroid Build Coastguard Worker
410*481dde66SAndroid Build Coastguard WorkerIn many applications, there are assertions that can cause application failure if
411*481dde66SAndroid Build Coastguard Workera condition is not met. These consistency checks, which ensure that the program
412*481dde66SAndroid Build Coastguard Workeris in a known good state, are there to fail at the earliest possible time after
413*481dde66SAndroid Build Coastguard Workersome program state is corrupted. If the assertion checks the wrong condition,
414*481dde66SAndroid Build Coastguard Workerthen the program may proceed in an erroneous state, which could lead to memory
415*481dde66SAndroid Build Coastguard Workercorruption, security holes, or worse. Hence it is vitally important to test that
416*481dde66SAndroid Build Coastguard Workersuch assertion statements work as expected.
417*481dde66SAndroid Build Coastguard Worker
418*481dde66SAndroid Build Coastguard WorkerSince these precondition checks cause the processes to die, we call such tests
419*481dde66SAndroid Build Coastguard Worker_death tests_. More generally, any test that checks that a program terminates
420*481dde66SAndroid Build Coastguard Worker(except by throwing an exception) in an expected fashion is also a death test.
421*481dde66SAndroid Build Coastguard Worker
422*481dde66SAndroid Build Coastguard WorkerNote that if a piece of code throws an exception, we don't consider it "death"
423*481dde66SAndroid Build Coastguard Workerfor the purpose of death tests, as the caller of the code could catch the
424*481dde66SAndroid Build Coastguard Workerexception and avoid the crash. If you want to verify exceptions thrown by your
425*481dde66SAndroid Build Coastguard Workercode, see [Exception Assertions](#ExceptionAssertions).
426*481dde66SAndroid Build Coastguard Worker
427*481dde66SAndroid Build Coastguard WorkerIf you want to test `EXPECT_*()/ASSERT_*()` failures in your test code, see
428*481dde66SAndroid Build Coastguard Worker["Catching" Failures](#catching-failures).
429*481dde66SAndroid Build Coastguard Worker
430*481dde66SAndroid Build Coastguard Worker### How to Write a Death Test
431*481dde66SAndroid Build Coastguard Worker
432*481dde66SAndroid Build Coastguard WorkerGoogleTest provides assertion macros to support death tests. See
433*481dde66SAndroid Build Coastguard Worker[Death Assertions](reference/assertions.md#death) in the Assertions Reference
434*481dde66SAndroid Build Coastguard Workerfor details.
435*481dde66SAndroid Build Coastguard Worker
436*481dde66SAndroid Build Coastguard WorkerTo write a death test, simply use one of the macros inside your test function.
437*481dde66SAndroid Build Coastguard WorkerFor example,
438*481dde66SAndroid Build Coastguard Worker
439*481dde66SAndroid Build Coastguard Worker```c++
440*481dde66SAndroid Build Coastguard WorkerTEST(MyDeathTest, Foo) {
441*481dde66SAndroid Build Coastguard Worker  // This death test uses a compound statement.
442*481dde66SAndroid Build Coastguard Worker  ASSERT_DEATH({
443*481dde66SAndroid Build Coastguard Worker    int n = 5;
444*481dde66SAndroid Build Coastguard Worker    Foo(&n);
445*481dde66SAndroid Build Coastguard Worker  }, "Error on line .* of Foo()");
446*481dde66SAndroid Build Coastguard Worker}
447*481dde66SAndroid Build Coastguard Worker
448*481dde66SAndroid Build Coastguard WorkerTEST(MyDeathTest, NormalExit) {
449*481dde66SAndroid Build Coastguard Worker  EXPECT_EXIT(NormalExit(), testing::ExitedWithCode(0), "Success");
450*481dde66SAndroid Build Coastguard Worker}
451*481dde66SAndroid Build Coastguard Worker
452*481dde66SAndroid Build Coastguard WorkerTEST(MyDeathTest, KillProcess) {
453*481dde66SAndroid Build Coastguard Worker  EXPECT_EXIT(KillProcess(), testing::KilledBySignal(SIGKILL),
454*481dde66SAndroid Build Coastguard Worker              "Sending myself unblockable signal");
455*481dde66SAndroid Build Coastguard Worker}
456*481dde66SAndroid Build Coastguard Worker```
457*481dde66SAndroid Build Coastguard Worker
458*481dde66SAndroid Build Coastguard Workerverifies that:
459*481dde66SAndroid Build Coastguard Worker
460*481dde66SAndroid Build Coastguard Worker*   calling `Foo(5)` causes the process to die with the given error message,
461*481dde66SAndroid Build Coastguard Worker*   calling `NormalExit()` causes the process to print `"Success"` to stderr and
462*481dde66SAndroid Build Coastguard Worker    exit with exit code 0, and
463*481dde66SAndroid Build Coastguard Worker*   calling `KillProcess()` kills the process with signal `SIGKILL`.
464*481dde66SAndroid Build Coastguard Worker
465*481dde66SAndroid Build Coastguard WorkerThe test function body may contain other assertions and statements as well, if
466*481dde66SAndroid Build Coastguard Workernecessary.
467*481dde66SAndroid Build Coastguard Worker
468*481dde66SAndroid Build Coastguard WorkerNote that a death test only cares about three things:
469*481dde66SAndroid Build Coastguard Worker
470*481dde66SAndroid Build Coastguard Worker1.  does `statement` abort or exit the process?
471*481dde66SAndroid Build Coastguard Worker2.  (in the case of `ASSERT_EXIT` and `EXPECT_EXIT`) does the exit status
472*481dde66SAndroid Build Coastguard Worker    satisfy `predicate`? Or (in the case of `ASSERT_DEATH` and `EXPECT_DEATH`)
473*481dde66SAndroid Build Coastguard Worker    is the exit status non-zero? And
474*481dde66SAndroid Build Coastguard Worker3.  does the stderr output match `matcher`?
475*481dde66SAndroid Build Coastguard Worker
476*481dde66SAndroid Build Coastguard WorkerIn particular, if `statement` generates an `ASSERT_*` or `EXPECT_*` failure, it
477*481dde66SAndroid Build Coastguard Workerwill **not** cause the death test to fail, as GoogleTest assertions don't abort
478*481dde66SAndroid Build Coastguard Workerthe process.
479*481dde66SAndroid Build Coastguard Worker
480*481dde66SAndroid Build Coastguard Worker### Death Test Naming
481*481dde66SAndroid Build Coastguard Worker
482*481dde66SAndroid Build Coastguard Worker{: .callout .important}
483*481dde66SAndroid Build Coastguard WorkerIMPORTANT: We strongly recommend you to follow the convention of naming your
484*481dde66SAndroid Build Coastguard Worker**test suite** (not test) `*DeathTest` when it contains a death test, as
485*481dde66SAndroid Build Coastguard Workerdemonstrated in the above example. The
486*481dde66SAndroid Build Coastguard Worker[Death Tests And Threads](#death-tests-and-threads) section below explains why.
487*481dde66SAndroid Build Coastguard Worker
488*481dde66SAndroid Build Coastguard WorkerIf a test fixture class is shared by normal tests and death tests, you can use
489*481dde66SAndroid Build Coastguard Worker`using` or `typedef` to introduce an alias for the fixture class and avoid
490*481dde66SAndroid Build Coastguard Workerduplicating its code:
491*481dde66SAndroid Build Coastguard Worker
492*481dde66SAndroid Build Coastguard Worker```c++
493*481dde66SAndroid Build Coastguard Workerclass FooTest : public testing::Test { ... };
494*481dde66SAndroid Build Coastguard Worker
495*481dde66SAndroid Build Coastguard Workerusing FooDeathTest = FooTest;
496*481dde66SAndroid Build Coastguard Worker
497*481dde66SAndroid Build Coastguard WorkerTEST_F(FooTest, DoesThis) {
498*481dde66SAndroid Build Coastguard Worker  // normal test
499*481dde66SAndroid Build Coastguard Worker}
500*481dde66SAndroid Build Coastguard Worker
501*481dde66SAndroid Build Coastguard WorkerTEST_F(FooDeathTest, DoesThat) {
502*481dde66SAndroid Build Coastguard Worker  // death test
503*481dde66SAndroid Build Coastguard Worker}
504*481dde66SAndroid Build Coastguard Worker```
505*481dde66SAndroid Build Coastguard Worker
506*481dde66SAndroid Build Coastguard Worker### Regular Expression Syntax
507*481dde66SAndroid Build Coastguard Worker
508*481dde66SAndroid Build Coastguard WorkerWhen built with Bazel and using Abseil, GoogleTest uses the
509*481dde66SAndroid Build Coastguard Worker[RE2](https://github.com/google/re2/wiki/Syntax) syntax. Otherwise, for POSIX
510*481dde66SAndroid Build Coastguard Workersystems (Linux, Cygwin, Mac), GoogleTest uses the
511*481dde66SAndroid Build Coastguard Worker[POSIX extended regular expression](https://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_04)
512*481dde66SAndroid Build Coastguard Workersyntax. To learn about POSIX syntax, you may want to read this
513*481dde66SAndroid Build Coastguard Worker[Wikipedia entry](https://en.wikipedia.org/wiki/Regular_expression#POSIX_extended).
514*481dde66SAndroid Build Coastguard Worker
515*481dde66SAndroid Build Coastguard WorkerOn Windows, GoogleTest uses its own simple regular expression implementation. It
516*481dde66SAndroid Build Coastguard Workerlacks many features. For example, we don't support union (`"x|y"`), grouping
517*481dde66SAndroid Build Coastguard Worker(`"(xy)"`), brackets (`"[xy]"`), and repetition count (`"x{5,7}"`), among
518*481dde66SAndroid Build Coastguard Workerothers. Below is what we do support (`A` denotes a literal character, period
519*481dde66SAndroid Build Coastguard Worker(`.`), or a single `\\ ` escape sequence; `x` and `y` denote regular
520*481dde66SAndroid Build Coastguard Workerexpressions.):
521*481dde66SAndroid Build Coastguard Worker
522*481dde66SAndroid Build Coastguard WorkerExpression | Meaning
523*481dde66SAndroid Build Coastguard Worker---------- | --------------------------------------------------------------
524*481dde66SAndroid Build Coastguard Worker`c`        | matches any literal character `c`
525*481dde66SAndroid Build Coastguard Worker`\\d`      | matches any decimal digit
526*481dde66SAndroid Build Coastguard Worker`\\D`      | matches any character that's not a decimal digit
527*481dde66SAndroid Build Coastguard Worker`\\f`      | matches `\f`
528*481dde66SAndroid Build Coastguard Worker`\\n`      | matches `\n`
529*481dde66SAndroid Build Coastguard Worker`\\r`      | matches `\r`
530*481dde66SAndroid Build Coastguard Worker`\\s`      | matches any ASCII whitespace, including `\n`
531*481dde66SAndroid Build Coastguard Worker`\\S`      | matches any character that's not a whitespace
532*481dde66SAndroid Build Coastguard Worker`\\t`      | matches `\t`
533*481dde66SAndroid Build Coastguard Worker`\\v`      | matches `\v`
534*481dde66SAndroid Build Coastguard Worker`\\w`      | matches any letter, `_`, or decimal digit
535*481dde66SAndroid Build Coastguard Worker`\\W`      | matches any character that `\\w` doesn't match
536*481dde66SAndroid Build Coastguard Worker`\\c`      | matches any literal character `c`, which must be a punctuation
537*481dde66SAndroid Build Coastguard Worker`.`        | matches any single character except `\n`
538*481dde66SAndroid Build Coastguard Worker`A?`       | matches 0 or 1 occurrences of `A`
539*481dde66SAndroid Build Coastguard Worker`A*`       | matches 0 or many occurrences of `A`
540*481dde66SAndroid Build Coastguard Worker`A+`       | matches 1 or many occurrences of `A`
541*481dde66SAndroid Build Coastguard Worker`^`        | matches the beginning of a string (not that of each line)
542*481dde66SAndroid Build Coastguard Worker`$`        | matches the end of a string (not that of each line)
543*481dde66SAndroid Build Coastguard Worker`xy`       | matches `x` followed by `y`
544*481dde66SAndroid Build Coastguard Worker
545*481dde66SAndroid Build Coastguard WorkerTo help you determine which capability is available on your system, GoogleTest
546*481dde66SAndroid Build Coastguard Workerdefines macros to govern which regular expression it is using. The macros are:
547*481dde66SAndroid Build Coastguard Worker`GTEST_USES_SIMPLE_RE=1` or `GTEST_USES_POSIX_RE=1`. If you want your death
548*481dde66SAndroid Build Coastguard Workertests to work in all cases, you can either `#if` on these macros or use the more
549*481dde66SAndroid Build Coastguard Workerlimited syntax only.
550*481dde66SAndroid Build Coastguard Worker
551*481dde66SAndroid Build Coastguard Worker### How It Works
552*481dde66SAndroid Build Coastguard Worker
553*481dde66SAndroid Build Coastguard WorkerSee [Death Assertions](reference/assertions.md#death) in the Assertions
554*481dde66SAndroid Build Coastguard WorkerReference.
555*481dde66SAndroid Build Coastguard Worker
556*481dde66SAndroid Build Coastguard Worker### Death Tests And Threads
557*481dde66SAndroid Build Coastguard Worker
558*481dde66SAndroid Build Coastguard WorkerThe reason for the two death test styles has to do with thread safety. Due to
559*481dde66SAndroid Build Coastguard Workerwell-known problems with forking in the presence of threads, death tests should
560*481dde66SAndroid Build Coastguard Workerbe run in a single-threaded context. Sometimes, however, it isn't feasible to
561*481dde66SAndroid Build Coastguard Workerarrange that kind of environment. For example, statically-initialized modules
562*481dde66SAndroid Build Coastguard Workermay start threads before main is ever reached. Once threads have been created,
563*481dde66SAndroid Build Coastguard Workerit may be difficult or impossible to clean them up.
564*481dde66SAndroid Build Coastguard Worker
565*481dde66SAndroid Build Coastguard WorkerGoogleTest has three features intended to raise awareness of threading issues.
566*481dde66SAndroid Build Coastguard Worker
567*481dde66SAndroid Build Coastguard Worker1.  A warning is emitted if multiple threads are running when a death test is
568*481dde66SAndroid Build Coastguard Worker    encountered.
569*481dde66SAndroid Build Coastguard Worker2.  Test suites with a name ending in "DeathTest" are run before all other
570*481dde66SAndroid Build Coastguard Worker    tests.
571*481dde66SAndroid Build Coastguard Worker3.  It uses `clone()` instead of `fork()` to spawn the child process on Linux
572*481dde66SAndroid Build Coastguard Worker    (`clone()` is not available on Cygwin and Mac), as `fork()` is more likely
573*481dde66SAndroid Build Coastguard Worker    to cause the child to hang when the parent process has multiple threads.
574*481dde66SAndroid Build Coastguard Worker
575*481dde66SAndroid Build Coastguard WorkerIt's perfectly fine to create threads inside a death test statement; they are
576*481dde66SAndroid Build Coastguard Workerexecuted in a separate process and cannot affect the parent.
577*481dde66SAndroid Build Coastguard Worker
578*481dde66SAndroid Build Coastguard Worker### Death Test Styles
579*481dde66SAndroid Build Coastguard Worker
580*481dde66SAndroid Build Coastguard WorkerThe "threadsafe" death test style was introduced in order to help mitigate the
581*481dde66SAndroid Build Coastguard Workerrisks of testing in a possibly multithreaded environment. It trades increased
582*481dde66SAndroid Build Coastguard Workertest execution time (potentially dramatically so) for improved thread safety.
583*481dde66SAndroid Build Coastguard Worker
584*481dde66SAndroid Build Coastguard WorkerThe automated testing framework does not set the style flag. You can choose a
585*481dde66SAndroid Build Coastguard Workerparticular style of death tests by setting the flag programmatically:
586*481dde66SAndroid Build Coastguard Worker
587*481dde66SAndroid Build Coastguard Worker```c++
588*481dde66SAndroid Build Coastguard WorkerGTEST_FLAG_SET(death_test_style, "threadsafe");
589*481dde66SAndroid Build Coastguard Worker```
590*481dde66SAndroid Build Coastguard Worker
591*481dde66SAndroid Build Coastguard WorkerYou can do this in `main()` to set the style for all death tests in the binary,
592*481dde66SAndroid Build Coastguard Workeror in individual tests. Recall that flags are saved before running each test and
593*481dde66SAndroid Build Coastguard Workerrestored afterwards, so you need not do that yourself. For example:
594*481dde66SAndroid Build Coastguard Worker
595*481dde66SAndroid Build Coastguard Worker```c++
596*481dde66SAndroid Build Coastguard Workerint main(int argc, char** argv) {
597*481dde66SAndroid Build Coastguard Worker  testing::InitGoogleTest(&argc, argv);
598*481dde66SAndroid Build Coastguard Worker  GTEST_FLAG_SET(death_test_style, "fast");
599*481dde66SAndroid Build Coastguard Worker  return RUN_ALL_TESTS();
600*481dde66SAndroid Build Coastguard Worker}
601*481dde66SAndroid Build Coastguard Worker
602*481dde66SAndroid Build Coastguard WorkerTEST(MyDeathTest, TestOne) {
603*481dde66SAndroid Build Coastguard Worker  GTEST_FLAG_SET(death_test_style, "threadsafe");
604*481dde66SAndroid Build Coastguard Worker  // This test is run in the "threadsafe" style:
605*481dde66SAndroid Build Coastguard Worker  ASSERT_DEATH(ThisShouldDie(), "");
606*481dde66SAndroid Build Coastguard Worker}
607*481dde66SAndroid Build Coastguard Worker
608*481dde66SAndroid Build Coastguard WorkerTEST(MyDeathTest, TestTwo) {
609*481dde66SAndroid Build Coastguard Worker  // This test is run in the "fast" style:
610*481dde66SAndroid Build Coastguard Worker  ASSERT_DEATH(ThisShouldDie(), "");
611*481dde66SAndroid Build Coastguard Worker}
612*481dde66SAndroid Build Coastguard Worker```
613*481dde66SAndroid Build Coastguard Worker
614*481dde66SAndroid Build Coastguard Worker### Caveats
615*481dde66SAndroid Build Coastguard Worker
616*481dde66SAndroid Build Coastguard WorkerThe `statement` argument of `ASSERT_EXIT()` can be any valid C++ statement. If
617*481dde66SAndroid Build Coastguard Workerit leaves the current function via a `return` statement or by throwing an
618*481dde66SAndroid Build Coastguard Workerexception, the death test is considered to have failed. Some GoogleTest macros
619*481dde66SAndroid Build Coastguard Workermay return from the current function (e.g. `ASSERT_TRUE()`), so be sure to avoid
620*481dde66SAndroid Build Coastguard Workerthem in `statement`.
621*481dde66SAndroid Build Coastguard Worker
622*481dde66SAndroid Build Coastguard WorkerSince `statement` runs in the child process, any in-memory side effect (e.g.
623*481dde66SAndroid Build Coastguard Workermodifying a variable, releasing memory, etc) it causes will *not* be observable
624*481dde66SAndroid Build Coastguard Workerin the parent process. In particular, if you release memory in a death test,
625*481dde66SAndroid Build Coastguard Workeryour program will fail the heap check as the parent process will never see the
626*481dde66SAndroid Build Coastguard Workermemory reclaimed. To solve this problem, you can
627*481dde66SAndroid Build Coastguard Worker
628*481dde66SAndroid Build Coastguard Worker1.  try not to free memory in a death test;
629*481dde66SAndroid Build Coastguard Worker2.  free the memory again in the parent process; or
630*481dde66SAndroid Build Coastguard Worker3.  do not use the heap checker in your program.
631*481dde66SAndroid Build Coastguard Worker
632*481dde66SAndroid Build Coastguard WorkerDue to an implementation detail, you cannot place multiple death test assertions
633*481dde66SAndroid Build Coastguard Workeron the same line; otherwise, compilation will fail with an unobvious error
634*481dde66SAndroid Build Coastguard Workermessage.
635*481dde66SAndroid Build Coastguard Worker
636*481dde66SAndroid Build Coastguard WorkerDespite the improved thread safety afforded by the "threadsafe" style of death
637*481dde66SAndroid Build Coastguard Workertest, thread problems such as deadlock are still possible in the presence of
638*481dde66SAndroid Build Coastguard Workerhandlers registered with `pthread_atfork(3)`.
639*481dde66SAndroid Build Coastguard Worker
640*481dde66SAndroid Build Coastguard Worker## Using Assertions in Sub-routines
641*481dde66SAndroid Build Coastguard Worker
642*481dde66SAndroid Build Coastguard Worker{: .callout .note}
643*481dde66SAndroid Build Coastguard WorkerNote: If you want to put a series of test assertions in a subroutine to check
644*481dde66SAndroid Build Coastguard Workerfor a complex condition, consider using
645*481dde66SAndroid Build Coastguard Worker[a custom GMock matcher](gmock_cook_book.md#NewMatchers) instead. This lets you
646*481dde66SAndroid Build Coastguard Workerprovide a more readable error message in case of failure and avoid all of the
647*481dde66SAndroid Build Coastguard Workerissues described below.
648*481dde66SAndroid Build Coastguard Worker
649*481dde66SAndroid Build Coastguard Worker### Adding Traces to Assertions
650*481dde66SAndroid Build Coastguard Worker
651*481dde66SAndroid Build Coastguard WorkerIf a test sub-routine is called from several places, when an assertion inside it
652*481dde66SAndroid Build Coastguard Workerfails, it can be hard to tell which invocation of the sub-routine the failure is
653*481dde66SAndroid Build Coastguard Workerfrom. You can alleviate this problem using extra logging or custom failure
654*481dde66SAndroid Build Coastguard Workermessages, but that usually clutters up your tests. A better solution is to use
655*481dde66SAndroid Build Coastguard Workerthe `SCOPED_TRACE` macro or the `ScopedTrace` utility:
656*481dde66SAndroid Build Coastguard Worker
657*481dde66SAndroid Build Coastguard Worker```c++
658*481dde66SAndroid Build Coastguard WorkerSCOPED_TRACE(message);
659*481dde66SAndroid Build Coastguard Worker```
660*481dde66SAndroid Build Coastguard Worker
661*481dde66SAndroid Build Coastguard Worker```c++
662*481dde66SAndroid Build Coastguard WorkerScopedTrace trace("file_path", line_number, message);
663*481dde66SAndroid Build Coastguard Worker```
664*481dde66SAndroid Build Coastguard Worker
665*481dde66SAndroid Build Coastguard Workerwhere `message` can be anything streamable to `std::ostream`. `SCOPED_TRACE`
666*481dde66SAndroid Build Coastguard Workermacro will cause the current file name, line number, and the given message to be
667*481dde66SAndroid Build Coastguard Workeradded in every failure message. `ScopedTrace` accepts explicit file name and
668*481dde66SAndroid Build Coastguard Workerline number in arguments, which is useful for writing test helpers. The effect
669*481dde66SAndroid Build Coastguard Workerwill be undone when the control leaves the current lexical scope.
670*481dde66SAndroid Build Coastguard Worker
671*481dde66SAndroid Build Coastguard WorkerFor example,
672*481dde66SAndroid Build Coastguard Worker
673*481dde66SAndroid Build Coastguard Worker```c++
674*481dde66SAndroid Build Coastguard Worker10: void Sub1(int n) {
675*481dde66SAndroid Build Coastguard Worker11:   EXPECT_EQ(Bar(n), 1);
676*481dde66SAndroid Build Coastguard Worker12:   EXPECT_EQ(Bar(n + 1), 2);
677*481dde66SAndroid Build Coastguard Worker13: }
678*481dde66SAndroid Build Coastguard Worker14:
679*481dde66SAndroid Build Coastguard Worker15: TEST(FooTest, Bar) {
680*481dde66SAndroid Build Coastguard Worker16:   {
681*481dde66SAndroid Build Coastguard Worker17:     SCOPED_TRACE("A");  // This trace point will be included in
682*481dde66SAndroid Build Coastguard Worker18:                         // every failure in this scope.
683*481dde66SAndroid Build Coastguard Worker19:     Sub1(1);
684*481dde66SAndroid Build Coastguard Worker20:   }
685*481dde66SAndroid Build Coastguard Worker21:   // Now it won't.
686*481dde66SAndroid Build Coastguard Worker22:   Sub1(9);
687*481dde66SAndroid Build Coastguard Worker23: }
688*481dde66SAndroid Build Coastguard Worker```
689*481dde66SAndroid Build Coastguard Worker
690*481dde66SAndroid Build Coastguard Workercould result in messages like these:
691*481dde66SAndroid Build Coastguard Worker
692*481dde66SAndroid Build Coastguard Worker```none
693*481dde66SAndroid Build Coastguard Workerpath/to/foo_test.cc:11: Failure
694*481dde66SAndroid Build Coastguard WorkerValue of: Bar(n)
695*481dde66SAndroid Build Coastguard WorkerExpected: 1
696*481dde66SAndroid Build Coastguard Worker  Actual: 2
697*481dde66SAndroid Build Coastguard WorkerGoogle Test trace:
698*481dde66SAndroid Build Coastguard Workerpath/to/foo_test.cc:17: A
699*481dde66SAndroid Build Coastguard Worker
700*481dde66SAndroid Build Coastguard Workerpath/to/foo_test.cc:12: Failure
701*481dde66SAndroid Build Coastguard WorkerValue of: Bar(n + 1)
702*481dde66SAndroid Build Coastguard WorkerExpected: 2
703*481dde66SAndroid Build Coastguard Worker  Actual: 3
704*481dde66SAndroid Build Coastguard Worker```
705*481dde66SAndroid Build Coastguard Worker
706*481dde66SAndroid Build Coastguard WorkerWithout the trace, it would've been difficult to know which invocation of
707*481dde66SAndroid Build Coastguard Worker`Sub1()` the two failures come from respectively. (You could add an extra
708*481dde66SAndroid Build Coastguard Workermessage to each assertion in `Sub1()` to indicate the value of `n`, but that's
709*481dde66SAndroid Build Coastguard Workertedious.)
710*481dde66SAndroid Build Coastguard Worker
711*481dde66SAndroid Build Coastguard WorkerSome tips on using `SCOPED_TRACE`:
712*481dde66SAndroid Build Coastguard Worker
713*481dde66SAndroid Build Coastguard Worker1.  With a suitable message, it's often enough to use `SCOPED_TRACE` at the
714*481dde66SAndroid Build Coastguard Worker    beginning of a sub-routine, instead of at each call site.
715*481dde66SAndroid Build Coastguard Worker2.  When calling sub-routines inside a loop, make the loop iterator part of the
716*481dde66SAndroid Build Coastguard Worker    message in `SCOPED_TRACE` such that you can know which iteration the failure
717*481dde66SAndroid Build Coastguard Worker    is from.
718*481dde66SAndroid Build Coastguard Worker3.  Sometimes the line number of the trace point is enough for identifying the
719*481dde66SAndroid Build Coastguard Worker    particular invocation of a sub-routine. In this case, you don't have to
720*481dde66SAndroid Build Coastguard Worker    choose a unique message for `SCOPED_TRACE`. You can simply use `""`.
721*481dde66SAndroid Build Coastguard Worker4.  You can use `SCOPED_TRACE` in an inner scope when there is one in the outer
722*481dde66SAndroid Build Coastguard Worker    scope. In this case, all active trace points will be included in the failure
723*481dde66SAndroid Build Coastguard Worker    messages, in reverse order they are encountered.
724*481dde66SAndroid Build Coastguard Worker5.  The trace dump is clickable in Emacs - hit `return` on a line number and
725*481dde66SAndroid Build Coastguard Worker    you'll be taken to that line in the source file!
726*481dde66SAndroid Build Coastguard Worker
727*481dde66SAndroid Build Coastguard Worker### Propagating Fatal Failures
728*481dde66SAndroid Build Coastguard Worker
729*481dde66SAndroid Build Coastguard WorkerA common pitfall when using `ASSERT_*` and `FAIL*` is not understanding that
730*481dde66SAndroid Build Coastguard Workerwhen they fail they only abort the _current function_, not the entire test. For
731*481dde66SAndroid Build Coastguard Workerexample, the following test will segfault:
732*481dde66SAndroid Build Coastguard Worker
733*481dde66SAndroid Build Coastguard Worker```c++
734*481dde66SAndroid Build Coastguard Workervoid Subroutine() {
735*481dde66SAndroid Build Coastguard Worker  // Generates a fatal failure and aborts the current function.
736*481dde66SAndroid Build Coastguard Worker  ASSERT_EQ(1, 2);
737*481dde66SAndroid Build Coastguard Worker
738*481dde66SAndroid Build Coastguard Worker  // The following won't be executed.
739*481dde66SAndroid Build Coastguard Worker  ...
740*481dde66SAndroid Build Coastguard Worker}
741*481dde66SAndroid Build Coastguard Worker
742*481dde66SAndroid Build Coastguard WorkerTEST(FooTest, Bar) {
743*481dde66SAndroid Build Coastguard Worker  Subroutine();  // The intended behavior is for the fatal failure
744*481dde66SAndroid Build Coastguard Worker                 // in Subroutine() to abort the entire test.
745*481dde66SAndroid Build Coastguard Worker
746*481dde66SAndroid Build Coastguard Worker  // The actual behavior: the function goes on after Subroutine() returns.
747*481dde66SAndroid Build Coastguard Worker  int* p = nullptr;
748*481dde66SAndroid Build Coastguard Worker  *p = 3;  // Segfault!
749*481dde66SAndroid Build Coastguard Worker}
750*481dde66SAndroid Build Coastguard Worker```
751*481dde66SAndroid Build Coastguard Worker
752*481dde66SAndroid Build Coastguard WorkerTo alleviate this, GoogleTest provides three different solutions. You could use
753*481dde66SAndroid Build Coastguard Workereither exceptions, the `(ASSERT|EXPECT)_NO_FATAL_FAILURE` assertions or the
754*481dde66SAndroid Build Coastguard Worker`HasFatalFailure()` function. They are described in the following two
755*481dde66SAndroid Build Coastguard Workersubsections.
756*481dde66SAndroid Build Coastguard Worker
757*481dde66SAndroid Build Coastguard Worker#### Asserting on Subroutines with an exception
758*481dde66SAndroid Build Coastguard Worker
759*481dde66SAndroid Build Coastguard WorkerThe following code can turn ASSERT-failure into an exception:
760*481dde66SAndroid Build Coastguard Worker
761*481dde66SAndroid Build Coastguard Worker```c++
762*481dde66SAndroid Build Coastguard Workerclass ThrowListener : public testing::EmptyTestEventListener {
763*481dde66SAndroid Build Coastguard Worker  void OnTestPartResult(const testing::TestPartResult& result) override {
764*481dde66SAndroid Build Coastguard Worker    if (result.type() == testing::TestPartResult::kFatalFailure) {
765*481dde66SAndroid Build Coastguard Worker      throw testing::AssertionException(result);
766*481dde66SAndroid Build Coastguard Worker    }
767*481dde66SAndroid Build Coastguard Worker  }
768*481dde66SAndroid Build Coastguard Worker};
769*481dde66SAndroid Build Coastguard Workerint main(int argc, char** argv) {
770*481dde66SAndroid Build Coastguard Worker  ...
771*481dde66SAndroid Build Coastguard Worker  testing::UnitTest::GetInstance()->listeners().Append(new ThrowListener);
772*481dde66SAndroid Build Coastguard Worker  return RUN_ALL_TESTS();
773*481dde66SAndroid Build Coastguard Worker}
774*481dde66SAndroid Build Coastguard Worker```
775*481dde66SAndroid Build Coastguard Worker
776*481dde66SAndroid Build Coastguard WorkerThis listener should be added after other listeners if you have any, otherwise
777*481dde66SAndroid Build Coastguard Workerthey won't see failed `OnTestPartResult`.
778*481dde66SAndroid Build Coastguard Worker
779*481dde66SAndroid Build Coastguard Worker#### Asserting on Subroutines
780*481dde66SAndroid Build Coastguard Worker
781*481dde66SAndroid Build Coastguard WorkerAs shown above, if your test calls a subroutine that has an `ASSERT_*` failure
782*481dde66SAndroid Build Coastguard Workerin it, the test will continue after the subroutine returns. This may not be what
783*481dde66SAndroid Build Coastguard Workeryou want.
784*481dde66SAndroid Build Coastguard Worker
785*481dde66SAndroid Build Coastguard WorkerOften people want fatal failures to propagate like exceptions. For that
786*481dde66SAndroid Build Coastguard WorkerGoogleTest offers the following macros:
787*481dde66SAndroid Build Coastguard Worker
788*481dde66SAndroid Build Coastguard WorkerFatal assertion                       | Nonfatal assertion                    | Verifies
789*481dde66SAndroid Build Coastguard Worker------------------------------------- | ------------------------------------- | --------
790*481dde66SAndroid Build Coastguard Worker`ASSERT_NO_FATAL_FAILURE(statement);` | `EXPECT_NO_FATAL_FAILURE(statement);` | `statement` doesn't generate any new fatal failures in the current thread.
791*481dde66SAndroid Build Coastguard Worker
792*481dde66SAndroid Build Coastguard WorkerOnly failures in the thread that executes the assertion are checked to determine
793*481dde66SAndroid Build Coastguard Workerthe result of this type of assertions. If `statement` creates new threads,
794*481dde66SAndroid Build Coastguard Workerfailures in these threads are ignored.
795*481dde66SAndroid Build Coastguard Worker
796*481dde66SAndroid Build Coastguard WorkerExamples:
797*481dde66SAndroid Build Coastguard Worker
798*481dde66SAndroid Build Coastguard Worker```c++
799*481dde66SAndroid Build Coastguard WorkerASSERT_NO_FATAL_FAILURE(Foo());
800*481dde66SAndroid Build Coastguard Worker
801*481dde66SAndroid Build Coastguard Workerint i;
802*481dde66SAndroid Build Coastguard WorkerEXPECT_NO_FATAL_FAILURE({
803*481dde66SAndroid Build Coastguard Worker  i = Bar();
804*481dde66SAndroid Build Coastguard Worker});
805*481dde66SAndroid Build Coastguard Worker```
806*481dde66SAndroid Build Coastguard Worker
807*481dde66SAndroid Build Coastguard WorkerAssertions from multiple threads are currently not supported on Windows.
808*481dde66SAndroid Build Coastguard Worker
809*481dde66SAndroid Build Coastguard Worker#### Checking for Failures in the Current Test
810*481dde66SAndroid Build Coastguard Worker
811*481dde66SAndroid Build Coastguard Worker`HasFatalFailure()` in the `::testing::Test` class returns `true` if an
812*481dde66SAndroid Build Coastguard Workerassertion in the current test has suffered a fatal failure. This allows
813*481dde66SAndroid Build Coastguard Workerfunctions to catch fatal failures in a sub-routine and return early.
814*481dde66SAndroid Build Coastguard Worker
815*481dde66SAndroid Build Coastguard Worker```c++
816*481dde66SAndroid Build Coastguard Workerclass Test {
817*481dde66SAndroid Build Coastguard Worker public:
818*481dde66SAndroid Build Coastguard Worker  ...
819*481dde66SAndroid Build Coastguard Worker  static bool HasFatalFailure();
820*481dde66SAndroid Build Coastguard Worker};
821*481dde66SAndroid Build Coastguard Worker```
822*481dde66SAndroid Build Coastguard Worker
823*481dde66SAndroid Build Coastguard WorkerThe typical usage, which basically simulates the behavior of a thrown exception,
824*481dde66SAndroid Build Coastguard Workeris:
825*481dde66SAndroid Build Coastguard Worker
826*481dde66SAndroid Build Coastguard Worker```c++
827*481dde66SAndroid Build Coastguard WorkerTEST(FooTest, Bar) {
828*481dde66SAndroid Build Coastguard Worker  Subroutine();
829*481dde66SAndroid Build Coastguard Worker  // Aborts if Subroutine() had a fatal failure.
830*481dde66SAndroid Build Coastguard Worker  if (HasFatalFailure()) return;
831*481dde66SAndroid Build Coastguard Worker
832*481dde66SAndroid Build Coastguard Worker  // The following won't be executed.
833*481dde66SAndroid Build Coastguard Worker  ...
834*481dde66SAndroid Build Coastguard Worker}
835*481dde66SAndroid Build Coastguard Worker```
836*481dde66SAndroid Build Coastguard Worker
837*481dde66SAndroid Build Coastguard WorkerIf `HasFatalFailure()` is used outside of `TEST()` , `TEST_F()` , or a test
838*481dde66SAndroid Build Coastguard Workerfixture, you must add the `::testing::Test::` prefix, as in:
839*481dde66SAndroid Build Coastguard Worker
840*481dde66SAndroid Build Coastguard Worker```c++
841*481dde66SAndroid Build Coastguard Workerif (testing::Test::HasFatalFailure()) return;
842*481dde66SAndroid Build Coastguard Worker```
843*481dde66SAndroid Build Coastguard Worker
844*481dde66SAndroid Build Coastguard WorkerSimilarly, `HasNonfatalFailure()` returns `true` if the current test has at
845*481dde66SAndroid Build Coastguard Workerleast one non-fatal failure, and `HasFailure()` returns `true` if the current
846*481dde66SAndroid Build Coastguard Workertest has at least one failure of either kind.
847*481dde66SAndroid Build Coastguard Worker
848*481dde66SAndroid Build Coastguard Worker## Logging Additional Information
849*481dde66SAndroid Build Coastguard Worker
850*481dde66SAndroid Build Coastguard WorkerIn your test code, you can call `RecordProperty("key", value)` to log additional
851*481dde66SAndroid Build Coastguard Workerinformation, where `value` can be either a string or an `int`. The *last* value
852*481dde66SAndroid Build Coastguard Workerrecorded for a key will be emitted to the
853*481dde66SAndroid Build Coastguard Worker[XML output](#generating-an-xml-report) if you specify one. For example, the
854*481dde66SAndroid Build Coastguard Workertest
855*481dde66SAndroid Build Coastguard Worker
856*481dde66SAndroid Build Coastguard Worker```c++
857*481dde66SAndroid Build Coastguard WorkerTEST_F(WidgetUsageTest, MinAndMaxWidgets) {
858*481dde66SAndroid Build Coastguard Worker  RecordProperty("MaximumWidgets", ComputeMaxUsage());
859*481dde66SAndroid Build Coastguard Worker  RecordProperty("MinimumWidgets", ComputeMinUsage());
860*481dde66SAndroid Build Coastguard Worker}
861*481dde66SAndroid Build Coastguard Worker```
862*481dde66SAndroid Build Coastguard Worker
863*481dde66SAndroid Build Coastguard Workerwill output XML like this:
864*481dde66SAndroid Build Coastguard Worker
865*481dde66SAndroid Build Coastguard Worker```xml
866*481dde66SAndroid Build Coastguard Worker  ...
867*481dde66SAndroid Build Coastguard Worker    <testcase name="MinAndMaxWidgets" file="test.cpp" line="1" status="run" time="0.006" classname="WidgetUsageTest" MaximumWidgets="12" MinimumWidgets="9" />
868*481dde66SAndroid Build Coastguard Worker  ...
869*481dde66SAndroid Build Coastguard Worker```
870*481dde66SAndroid Build Coastguard Worker
871*481dde66SAndroid Build Coastguard Worker{: .callout .note}
872*481dde66SAndroid Build Coastguard Worker> NOTE:
873*481dde66SAndroid Build Coastguard Worker>
874*481dde66SAndroid Build Coastguard Worker> *   `RecordProperty()` is a static member of the `Test` class. Therefore it
875*481dde66SAndroid Build Coastguard Worker>     needs to be prefixed with `::testing::Test::` if used outside of the
876*481dde66SAndroid Build Coastguard Worker>     `TEST` body and the test fixture class.
877*481dde66SAndroid Build Coastguard Worker> *   *`key`* must be a valid XML attribute name, and cannot conflict with the
878*481dde66SAndroid Build Coastguard Worker>     ones already used by GoogleTest (`name`, `status`, `time`, `classname`,
879*481dde66SAndroid Build Coastguard Worker>     `type_param`, and `value_param`).
880*481dde66SAndroid Build Coastguard Worker> *   Calling `RecordProperty()` outside of the lifespan of a test is allowed.
881*481dde66SAndroid Build Coastguard Worker>     If it's called outside of a test but between a test suite's
882*481dde66SAndroid Build Coastguard Worker>     `SetUpTestSuite()` and `TearDownTestSuite()` methods, it will be
883*481dde66SAndroid Build Coastguard Worker>     attributed to the XML element for the test suite. If it's called outside
884*481dde66SAndroid Build Coastguard Worker>     of all test suites (e.g. in a test environment), it will be attributed to
885*481dde66SAndroid Build Coastguard Worker>     the top-level XML element.
886*481dde66SAndroid Build Coastguard Worker
887*481dde66SAndroid Build Coastguard Worker## Sharing Resources Between Tests in the Same Test Suite
888*481dde66SAndroid Build Coastguard Worker
889*481dde66SAndroid Build Coastguard WorkerGoogleTest creates a new test fixture object for each test in order to make
890*481dde66SAndroid Build Coastguard Workertests independent and easier to debug. However, sometimes tests use resources
891*481dde66SAndroid Build Coastguard Workerthat are expensive to set up, making the one-copy-per-test model prohibitively
892*481dde66SAndroid Build Coastguard Workerexpensive.
893*481dde66SAndroid Build Coastguard Worker
894*481dde66SAndroid Build Coastguard WorkerIf the tests don't change the resource, there's no harm in their sharing a
895*481dde66SAndroid Build Coastguard Workersingle resource copy. So, in addition to per-test set-up/tear-down, GoogleTest
896*481dde66SAndroid Build Coastguard Workeralso supports per-test-suite set-up/tear-down. To use it:
897*481dde66SAndroid Build Coastguard Worker
898*481dde66SAndroid Build Coastguard Worker1.  In your test fixture class (say `FooTest` ), declare as `static` some member
899*481dde66SAndroid Build Coastguard Worker    variables to hold the shared resources.
900*481dde66SAndroid Build Coastguard Worker2.  Outside your test fixture class (typically just below it), define those
901*481dde66SAndroid Build Coastguard Worker    member variables, optionally giving them initial values.
902*481dde66SAndroid Build Coastguard Worker3.  In the same test fixture class, define a public member function `static void
903*481dde66SAndroid Build Coastguard Worker    SetUpTestSuite()` (remember not to spell it as **`SetupTestSuite`** with a
904*481dde66SAndroid Build Coastguard Worker    small `u`!) to set up the shared resources and a `static void
905*481dde66SAndroid Build Coastguard Worker    TearDownTestSuite()` function to tear them down.
906*481dde66SAndroid Build Coastguard Worker
907*481dde66SAndroid Build Coastguard WorkerThat's it! GoogleTest automatically calls `SetUpTestSuite()` before running the
908*481dde66SAndroid Build Coastguard Worker*first test* in the `FooTest` test suite (i.e. before creating the first
909*481dde66SAndroid Build Coastguard Worker`FooTest` object), and calls `TearDownTestSuite()` after running the *last test*
910*481dde66SAndroid Build Coastguard Workerin it (i.e. after deleting the last `FooTest` object). In between, the tests can
911*481dde66SAndroid Build Coastguard Workeruse the shared resources.
912*481dde66SAndroid Build Coastguard Worker
913*481dde66SAndroid Build Coastguard WorkerRemember that the test order is undefined, so your code can't depend on a test
914*481dde66SAndroid Build Coastguard Workerpreceding or following another. Also, the tests must either not modify the state
915*481dde66SAndroid Build Coastguard Workerof any shared resource, or, if they do modify the state, they must restore the
916*481dde66SAndroid Build Coastguard Workerstate to its original value before passing control to the next test.
917*481dde66SAndroid Build Coastguard Worker
918*481dde66SAndroid Build Coastguard WorkerNote that `SetUpTestSuite()` may be called multiple times for a test fixture
919*481dde66SAndroid Build Coastguard Workerclass that has derived classes, so you should not expect code in the function
920*481dde66SAndroid Build Coastguard Workerbody to be run only once. Also, derived classes still have access to shared
921*481dde66SAndroid Build Coastguard Workerresources defined as static members, so careful consideration is needed when
922*481dde66SAndroid Build Coastguard Workermanaging shared resources to avoid memory leaks if shared resources are not
923*481dde66SAndroid Build Coastguard Workerproperly cleaned up in `TearDownTestSuite()`.
924*481dde66SAndroid Build Coastguard Worker
925*481dde66SAndroid Build Coastguard WorkerHere's an example of per-test-suite set-up and tear-down:
926*481dde66SAndroid Build Coastguard Worker
927*481dde66SAndroid Build Coastguard Worker```c++
928*481dde66SAndroid Build Coastguard Workerclass FooTest : public testing::Test {
929*481dde66SAndroid Build Coastguard Worker protected:
930*481dde66SAndroid Build Coastguard Worker  // Per-test-suite set-up.
931*481dde66SAndroid Build Coastguard Worker  // Called before the first test in this test suite.
932*481dde66SAndroid Build Coastguard Worker  // Can be omitted if not needed.
933*481dde66SAndroid Build Coastguard Worker  static void SetUpTestSuite() {
934*481dde66SAndroid Build Coastguard Worker    shared_resource_ = new ...;
935*481dde66SAndroid Build Coastguard Worker
936*481dde66SAndroid Build Coastguard Worker    // If `shared_resource_` is **not deleted** in `TearDownTestSuite()`,
937*481dde66SAndroid Build Coastguard Worker    // reallocation should be prevented because `SetUpTestSuite()` may be called
938*481dde66SAndroid Build Coastguard Worker    // in subclasses of FooTest and lead to memory leak.
939*481dde66SAndroid Build Coastguard Worker    //
940*481dde66SAndroid Build Coastguard Worker    // if (shared_resource_ == nullptr) {
941*481dde66SAndroid Build Coastguard Worker    //   shared_resource_ = new ...;
942*481dde66SAndroid Build Coastguard Worker    // }
943*481dde66SAndroid Build Coastguard Worker  }
944*481dde66SAndroid Build Coastguard Worker
945*481dde66SAndroid Build Coastguard Worker  // Per-test-suite tear-down.
946*481dde66SAndroid Build Coastguard Worker  // Called after the last test in this test suite.
947*481dde66SAndroid Build Coastguard Worker  // Can be omitted if not needed.
948*481dde66SAndroid Build Coastguard Worker  static void TearDownTestSuite() {
949*481dde66SAndroid Build Coastguard Worker    delete shared_resource_;
950*481dde66SAndroid Build Coastguard Worker    shared_resource_ = nullptr;
951*481dde66SAndroid Build Coastguard Worker  }
952*481dde66SAndroid Build Coastguard Worker
953*481dde66SAndroid Build Coastguard Worker  // You can define per-test set-up logic as usual.
954*481dde66SAndroid Build Coastguard Worker  void SetUp() override { ... }
955*481dde66SAndroid Build Coastguard Worker
956*481dde66SAndroid Build Coastguard Worker  // You can define per-test tear-down logic as usual.
957*481dde66SAndroid Build Coastguard Worker  void TearDown() override { ... }
958*481dde66SAndroid Build Coastguard Worker
959*481dde66SAndroid Build Coastguard Worker  // Some expensive resource shared by all tests.
960*481dde66SAndroid Build Coastguard Worker  static T* shared_resource_;
961*481dde66SAndroid Build Coastguard Worker};
962*481dde66SAndroid Build Coastguard Worker
963*481dde66SAndroid Build Coastguard WorkerT* FooTest::shared_resource_ = nullptr;
964*481dde66SAndroid Build Coastguard Worker
965*481dde66SAndroid Build Coastguard WorkerTEST_F(FooTest, Test1) {
966*481dde66SAndroid Build Coastguard Worker  ... you can refer to shared_resource_ here ...
967*481dde66SAndroid Build Coastguard Worker}
968*481dde66SAndroid Build Coastguard Worker
969*481dde66SAndroid Build Coastguard WorkerTEST_F(FooTest, Test2) {
970*481dde66SAndroid Build Coastguard Worker  ... you can refer to shared_resource_ here ...
971*481dde66SAndroid Build Coastguard Worker}
972*481dde66SAndroid Build Coastguard Worker```
973*481dde66SAndroid Build Coastguard Worker
974*481dde66SAndroid Build Coastguard Worker{: .callout .note}
975*481dde66SAndroid Build Coastguard WorkerNOTE: Though the above code declares `SetUpTestSuite()` protected, it may
976*481dde66SAndroid Build Coastguard Workersometimes be necessary to declare it public, such as when using it with
977*481dde66SAndroid Build Coastguard Worker`TEST_P`.
978*481dde66SAndroid Build Coastguard Worker
979*481dde66SAndroid Build Coastguard Worker## Global Set-Up and Tear-Down
980*481dde66SAndroid Build Coastguard Worker
981*481dde66SAndroid Build Coastguard WorkerJust as you can do set-up and tear-down at the test level and the test suite
982*481dde66SAndroid Build Coastguard Workerlevel, you can also do it at the test program level. Here's how.
983*481dde66SAndroid Build Coastguard Worker
984*481dde66SAndroid Build Coastguard WorkerFirst, you subclass the `::testing::Environment` class to define a test
985*481dde66SAndroid Build Coastguard Workerenvironment, which knows how to set-up and tear-down:
986*481dde66SAndroid Build Coastguard Worker
987*481dde66SAndroid Build Coastguard Worker```c++
988*481dde66SAndroid Build Coastguard Workerclass Environment : public ::testing::Environment {
989*481dde66SAndroid Build Coastguard Worker public:
990*481dde66SAndroid Build Coastguard Worker  ~Environment() override {}
991*481dde66SAndroid Build Coastguard Worker
992*481dde66SAndroid Build Coastguard Worker  // Override this to define how to set up the environment.
993*481dde66SAndroid Build Coastguard Worker  void SetUp() override {}
994*481dde66SAndroid Build Coastguard Worker
995*481dde66SAndroid Build Coastguard Worker  // Override this to define how to tear down the environment.
996*481dde66SAndroid Build Coastguard Worker  void TearDown() override {}
997*481dde66SAndroid Build Coastguard Worker};
998*481dde66SAndroid Build Coastguard Worker```
999*481dde66SAndroid Build Coastguard Worker
1000*481dde66SAndroid Build Coastguard WorkerThen, you register an instance of your environment class with GoogleTest by
1001*481dde66SAndroid Build Coastguard Workercalling the `::testing::AddGlobalTestEnvironment()` function:
1002*481dde66SAndroid Build Coastguard Worker
1003*481dde66SAndroid Build Coastguard Worker```c++
1004*481dde66SAndroid Build Coastguard WorkerEnvironment* AddGlobalTestEnvironment(Environment* env);
1005*481dde66SAndroid Build Coastguard Worker```
1006*481dde66SAndroid Build Coastguard Worker
1007*481dde66SAndroid Build Coastguard WorkerNow, when `RUN_ALL_TESTS()` is invoked, it first calls the `SetUp()` method. The
1008*481dde66SAndroid Build Coastguard Workertests are then executed, provided that none of the environments have reported
1009*481dde66SAndroid Build Coastguard Workerfatal failures and `GTEST_SKIP()` has not been invoked. Finally, `TearDown()` is
1010*481dde66SAndroid Build Coastguard Workercalled.
1011*481dde66SAndroid Build Coastguard Worker
1012*481dde66SAndroid Build Coastguard WorkerNote that `SetUp()` and `TearDown()` are only invoked if there is at least one
1013*481dde66SAndroid Build Coastguard Workertest to be performed. Importantly, `TearDown()` is executed even if the test is
1014*481dde66SAndroid Build Coastguard Workernot run due to a fatal failure or `GTEST_SKIP()`.
1015*481dde66SAndroid Build Coastguard Worker
1016*481dde66SAndroid Build Coastguard WorkerCalling `SetUp()` and `TearDown()` for each iteration depends on the flag
1017*481dde66SAndroid Build Coastguard Worker`gtest_recreate_environments_when_repeating`. `SetUp()` and `TearDown()` are
1018*481dde66SAndroid Build Coastguard Workercalled for each environment object when the object is recreated for each
1019*481dde66SAndroid Build Coastguard Workeriteration. However, if test environments are not recreated for each iteration,
1020*481dde66SAndroid Build Coastguard Worker`SetUp()` is called only on the first iteration, and `TearDown()` is called only
1021*481dde66SAndroid Build Coastguard Workeron the last iteration.
1022*481dde66SAndroid Build Coastguard Worker
1023*481dde66SAndroid Build Coastguard WorkerIt's OK to register multiple environment objects. In this suite, their `SetUp()`
1024*481dde66SAndroid Build Coastguard Workerwill be called in the order they are registered, and their `TearDown()` will be
1025*481dde66SAndroid Build Coastguard Workercalled in the reverse order.
1026*481dde66SAndroid Build Coastguard Worker
1027*481dde66SAndroid Build Coastguard WorkerNote that GoogleTest takes ownership of the registered environment objects.
1028*481dde66SAndroid Build Coastguard WorkerTherefore **do not delete them** by yourself.
1029*481dde66SAndroid Build Coastguard Worker
1030*481dde66SAndroid Build Coastguard WorkerYou should call `AddGlobalTestEnvironment()` before `RUN_ALL_TESTS()` is called,
1031*481dde66SAndroid Build Coastguard Workerprobably in `main()`. If you use `gtest_main`, you need to call this before
1032*481dde66SAndroid Build Coastguard Worker`main()` starts for it to take effect. One way to do this is to define a global
1033*481dde66SAndroid Build Coastguard Workervariable like this:
1034*481dde66SAndroid Build Coastguard Worker
1035*481dde66SAndroid Build Coastguard Worker```c++
1036*481dde66SAndroid Build Coastguard Workertesting::Environment* const foo_env =
1037*481dde66SAndroid Build Coastguard Worker    testing::AddGlobalTestEnvironment(new FooEnvironment);
1038*481dde66SAndroid Build Coastguard Worker```
1039*481dde66SAndroid Build Coastguard Worker
1040*481dde66SAndroid Build Coastguard WorkerHowever, we strongly recommend you to write your own `main()` and call
1041*481dde66SAndroid Build Coastguard Worker`AddGlobalTestEnvironment()` there, as relying on initialization of global
1042*481dde66SAndroid Build Coastguard Workervariables makes the code harder to read and may cause problems when you register
1043*481dde66SAndroid Build Coastguard Workermultiple environments from different translation units and the environments have
1044*481dde66SAndroid Build Coastguard Workerdependencies among them (remember that the compiler doesn't guarantee the order
1045*481dde66SAndroid Build Coastguard Workerin which global variables from different translation units are initialized).
1046*481dde66SAndroid Build Coastguard Worker
1047*481dde66SAndroid Build Coastguard Worker## Value-Parameterized Tests
1048*481dde66SAndroid Build Coastguard Worker
1049*481dde66SAndroid Build Coastguard Worker*Value-parameterized tests* allow you to test your code with different
1050*481dde66SAndroid Build Coastguard Workerparameters without writing multiple copies of the same test. This is useful in a
1051*481dde66SAndroid Build Coastguard Workernumber of situations, for example:
1052*481dde66SAndroid Build Coastguard Worker
1053*481dde66SAndroid Build Coastguard Worker*   You have a piece of code whose behavior is affected by one or more
1054*481dde66SAndroid Build Coastguard Worker    command-line flags. You want to make sure your code performs correctly for
1055*481dde66SAndroid Build Coastguard Worker    various values of those flags.
1056*481dde66SAndroid Build Coastguard Worker*   You want to test different implementations of an OO interface.
1057*481dde66SAndroid Build Coastguard Worker*   You want to test your code over various inputs (a.k.a. data-driven testing).
1058*481dde66SAndroid Build Coastguard Worker    This feature is easy to abuse, so please exercise your good sense when doing
1059*481dde66SAndroid Build Coastguard Worker    it!
1060*481dde66SAndroid Build Coastguard Worker
1061*481dde66SAndroid Build Coastguard Worker### How to Write Value-Parameterized Tests
1062*481dde66SAndroid Build Coastguard Worker
1063*481dde66SAndroid Build Coastguard WorkerTo write value-parameterized tests, first you should define a fixture class. It
1064*481dde66SAndroid Build Coastguard Workermust be derived from both `testing::Test` and `testing::WithParamInterface<T>`
1065*481dde66SAndroid Build Coastguard Worker(the latter is a pure interface), where `T` is the type of your parameter
1066*481dde66SAndroid Build Coastguard Workervalues. For convenience, you can just derive the fixture class from
1067*481dde66SAndroid Build Coastguard Worker`testing::TestWithParam<T>`, which itself is derived from both `testing::Test`
1068*481dde66SAndroid Build Coastguard Workerand `testing::WithParamInterface<T>`. `T` can be any copyable type. If it's a
1069*481dde66SAndroid Build Coastguard Workerraw pointer, you are responsible for managing the lifespan of the pointed
1070*481dde66SAndroid Build Coastguard Workervalues.
1071*481dde66SAndroid Build Coastguard Worker
1072*481dde66SAndroid Build Coastguard Worker{: .callout .note}
1073*481dde66SAndroid Build Coastguard WorkerNOTE: If your test fixture defines `SetUpTestSuite()` or `TearDownTestSuite()`
1074*481dde66SAndroid Build Coastguard Workerthey must be declared **public** rather than **protected** in order to use
1075*481dde66SAndroid Build Coastguard Worker`TEST_P`.
1076*481dde66SAndroid Build Coastguard Worker
1077*481dde66SAndroid Build Coastguard Worker```c++
1078*481dde66SAndroid Build Coastguard Workerclass FooTest :
1079*481dde66SAndroid Build Coastguard Worker    public testing::TestWithParam<absl::string_view> {
1080*481dde66SAndroid Build Coastguard Worker  // You can implement all the usual fixture class members here.
1081*481dde66SAndroid Build Coastguard Worker  // To access the test parameter, call GetParam() from class
1082*481dde66SAndroid Build Coastguard Worker  // TestWithParam<T>.
1083*481dde66SAndroid Build Coastguard Worker};
1084*481dde66SAndroid Build Coastguard Worker
1085*481dde66SAndroid Build Coastguard Worker// Or, when you want to add parameters to a pre-existing fixture class:
1086*481dde66SAndroid Build Coastguard Workerclass BaseTest : public testing::Test {
1087*481dde66SAndroid Build Coastguard Worker  ...
1088*481dde66SAndroid Build Coastguard Worker};
1089*481dde66SAndroid Build Coastguard Workerclass BarTest : public BaseTest,
1090*481dde66SAndroid Build Coastguard Worker                public testing::WithParamInterface<absl::string_view> {
1091*481dde66SAndroid Build Coastguard Worker  ...
1092*481dde66SAndroid Build Coastguard Worker};
1093*481dde66SAndroid Build Coastguard Worker```
1094*481dde66SAndroid Build Coastguard Worker
1095*481dde66SAndroid Build Coastguard WorkerThen, use the `TEST_P` macro to define as many test patterns using this fixture
1096*481dde66SAndroid Build Coastguard Workeras you want. The `_P` suffix is for "parameterized" or "pattern", whichever you
1097*481dde66SAndroid Build Coastguard Workerprefer to think.
1098*481dde66SAndroid Build Coastguard Worker
1099*481dde66SAndroid Build Coastguard Worker```c++
1100*481dde66SAndroid Build Coastguard WorkerTEST_P(FooTest, DoesBlah) {
1101*481dde66SAndroid Build Coastguard Worker  // Inside a test, access the test parameter with the GetParam() method
1102*481dde66SAndroid Build Coastguard Worker  // of the TestWithParam<T> class:
1103*481dde66SAndroid Build Coastguard Worker  EXPECT_TRUE(foo.Blah(GetParam()));
1104*481dde66SAndroid Build Coastguard Worker  ...
1105*481dde66SAndroid Build Coastguard Worker}
1106*481dde66SAndroid Build Coastguard Worker
1107*481dde66SAndroid Build Coastguard WorkerTEST_P(FooTest, HasBlahBlah) {
1108*481dde66SAndroid Build Coastguard Worker  ...
1109*481dde66SAndroid Build Coastguard Worker}
1110*481dde66SAndroid Build Coastguard Worker```
1111*481dde66SAndroid Build Coastguard Worker
1112*481dde66SAndroid Build Coastguard WorkerFinally, you can use the `INSTANTIATE_TEST_SUITE_P` macro to instantiate the
1113*481dde66SAndroid Build Coastguard Workertest suite with any set of parameters you want. GoogleTest defines a number of
1114*481dde66SAndroid Build Coastguard Workerfunctions for generating test parameters—see details at
1115*481dde66SAndroid Build Coastguard Worker[`INSTANTIATE_TEST_SUITE_P`](reference/testing.md#INSTANTIATE_TEST_SUITE_P) in
1116*481dde66SAndroid Build Coastguard Workerthe Testing Reference.
1117*481dde66SAndroid Build Coastguard Worker
1118*481dde66SAndroid Build Coastguard WorkerFor example, the following statement will instantiate tests from the `FooTest`
1119*481dde66SAndroid Build Coastguard Workertest suite each with parameter values `"meeny"`, `"miny"`, and `"moe"` using the
1120*481dde66SAndroid Build Coastguard Worker[`Values`](reference/testing.md#param-generators) parameter generator:
1121*481dde66SAndroid Build Coastguard Worker
1122*481dde66SAndroid Build Coastguard Worker```c++
1123*481dde66SAndroid Build Coastguard WorkerINSTANTIATE_TEST_SUITE_P(MeenyMinyMoe,
1124*481dde66SAndroid Build Coastguard Worker                         FooTest,
1125*481dde66SAndroid Build Coastguard Worker                         testing::Values("meeny", "miny", "moe"));
1126*481dde66SAndroid Build Coastguard Worker```
1127*481dde66SAndroid Build Coastguard Worker
1128*481dde66SAndroid Build Coastguard Worker{: .callout .note}
1129*481dde66SAndroid Build Coastguard WorkerNOTE: The code above must be placed at global or namespace scope, not at
1130*481dde66SAndroid Build Coastguard Workerfunction scope.
1131*481dde66SAndroid Build Coastguard Worker
1132*481dde66SAndroid Build Coastguard WorkerThe first argument to `INSTANTIATE_TEST_SUITE_P` is a unique name for the
1133*481dde66SAndroid Build Coastguard Workerinstantiation of the test suite. The next argument is the name of the test
1134*481dde66SAndroid Build Coastguard Workerpattern, and the last is the
1135*481dde66SAndroid Build Coastguard Worker[parameter generator](reference/testing.md#param-generators).
1136*481dde66SAndroid Build Coastguard Worker
1137*481dde66SAndroid Build Coastguard WorkerThe parameter generator expression is not evaluated until GoogleTest is
1138*481dde66SAndroid Build Coastguard Workerinitialized (via `InitGoogleTest()`). Any prior initialization done in the
1139*481dde66SAndroid Build Coastguard Worker`main` function will be accessible from the parameter generator, for example,
1140*481dde66SAndroid Build Coastguard Workerthe results of flag parsing.
1141*481dde66SAndroid Build Coastguard Worker
1142*481dde66SAndroid Build Coastguard WorkerYou can instantiate a test pattern more than once, so to distinguish different
1143*481dde66SAndroid Build Coastguard Workerinstances of the pattern, the instantiation name is added as a prefix to the
1144*481dde66SAndroid Build Coastguard Workeractual test suite name. Remember to pick unique prefixes for different
1145*481dde66SAndroid Build Coastguard Workerinstantiations. The tests from the instantiation above will have these names:
1146*481dde66SAndroid Build Coastguard Worker
1147*481dde66SAndroid Build Coastguard Worker*   `MeenyMinyMoe/FooTest.DoesBlah/0` for `"meeny"`
1148*481dde66SAndroid Build Coastguard Worker*   `MeenyMinyMoe/FooTest.DoesBlah/1` for `"miny"`
1149*481dde66SAndroid Build Coastguard Worker*   `MeenyMinyMoe/FooTest.DoesBlah/2` for `"moe"`
1150*481dde66SAndroid Build Coastguard Worker*   `MeenyMinyMoe/FooTest.HasBlahBlah/0` for `"meeny"`
1151*481dde66SAndroid Build Coastguard Worker*   `MeenyMinyMoe/FooTest.HasBlahBlah/1` for `"miny"`
1152*481dde66SAndroid Build Coastguard Worker*   `MeenyMinyMoe/FooTest.HasBlahBlah/2` for `"moe"`
1153*481dde66SAndroid Build Coastguard Worker
1154*481dde66SAndroid Build Coastguard WorkerYou can use these names in [`--gtest_filter`](#running-a-subset-of-the-tests).
1155*481dde66SAndroid Build Coastguard Worker
1156*481dde66SAndroid Build Coastguard WorkerThe following statement will instantiate all tests from `FooTest` again, each
1157*481dde66SAndroid Build Coastguard Workerwith parameter values `"cat"` and `"dog"` using the
1158*481dde66SAndroid Build Coastguard Worker[`ValuesIn`](reference/testing.md#param-generators) parameter generator:
1159*481dde66SAndroid Build Coastguard Worker
1160*481dde66SAndroid Build Coastguard Worker```c++
1161*481dde66SAndroid Build Coastguard Workerconstexpr absl::string_view kPets[] = {"cat", "dog"};
1162*481dde66SAndroid Build Coastguard WorkerINSTANTIATE_TEST_SUITE_P(Pets, FooTest, testing::ValuesIn(kPets));
1163*481dde66SAndroid Build Coastguard Worker```
1164*481dde66SAndroid Build Coastguard Worker
1165*481dde66SAndroid Build Coastguard WorkerThe tests from the instantiation above will have these names:
1166*481dde66SAndroid Build Coastguard Worker
1167*481dde66SAndroid Build Coastguard Worker*   `Pets/FooTest.DoesBlah/0` for `"cat"`
1168*481dde66SAndroid Build Coastguard Worker*   `Pets/FooTest.DoesBlah/1` for `"dog"`
1169*481dde66SAndroid Build Coastguard Worker*   `Pets/FooTest.HasBlahBlah/0` for `"cat"`
1170*481dde66SAndroid Build Coastguard Worker*   `Pets/FooTest.HasBlahBlah/1` for `"dog"`
1171*481dde66SAndroid Build Coastguard Worker
1172*481dde66SAndroid Build Coastguard WorkerPlease note that `INSTANTIATE_TEST_SUITE_P` will instantiate *all* tests in the
1173*481dde66SAndroid Build Coastguard Workergiven test suite, whether their definitions come before or *after* the
1174*481dde66SAndroid Build Coastguard Worker`INSTANTIATE_TEST_SUITE_P` statement.
1175*481dde66SAndroid Build Coastguard Worker
1176*481dde66SAndroid Build Coastguard WorkerAdditionally, by default, every `TEST_P` without a corresponding
1177*481dde66SAndroid Build Coastguard Worker`INSTANTIATE_TEST_SUITE_P` causes a failing test in test suite
1178*481dde66SAndroid Build Coastguard Worker`GoogleTestVerification`. If you have a test suite where that omission is not an
1179*481dde66SAndroid Build Coastguard Workererror, for example it is in a library that may be linked in for other reasons or
1180*481dde66SAndroid Build Coastguard Workerwhere the list of test cases is dynamic and may be empty, then this check can be
1181*481dde66SAndroid Build Coastguard Workersuppressed by tagging the test suite:
1182*481dde66SAndroid Build Coastguard Worker
1183*481dde66SAndroid Build Coastguard Worker```c++
1184*481dde66SAndroid Build Coastguard WorkerGTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(FooTest);
1185*481dde66SAndroid Build Coastguard Worker```
1186*481dde66SAndroid Build Coastguard Worker
1187*481dde66SAndroid Build Coastguard WorkerYou can see [sample7_unittest.cc] and [sample8_unittest.cc] for more examples.
1188*481dde66SAndroid Build Coastguard Worker
1189*481dde66SAndroid Build Coastguard Worker[sample7_unittest.cc]: https://github.com/google/googletest/blob/main/googletest/samples/sample7_unittest.cc "Parameterized Test example"
1190*481dde66SAndroid Build Coastguard Worker[sample8_unittest.cc]: https://github.com/google/googletest/blob/main/googletest/samples/sample8_unittest.cc "Parameterized Test example with multiple parameters"
1191*481dde66SAndroid Build Coastguard Worker
1192*481dde66SAndroid Build Coastguard Worker### Creating Value-Parameterized Abstract Tests
1193*481dde66SAndroid Build Coastguard Worker
1194*481dde66SAndroid Build Coastguard WorkerIn the above, we define and instantiate `FooTest` in the *same* source file.
1195*481dde66SAndroid Build Coastguard WorkerSometimes you may want to define value-parameterized tests in a library and let
1196*481dde66SAndroid Build Coastguard Workerother people instantiate them later. This pattern is known as *abstract tests*.
1197*481dde66SAndroid Build Coastguard WorkerAs an example of its application, when you are designing an interface you can
1198*481dde66SAndroid Build Coastguard Workerwrite a standard suite of abstract tests (perhaps using a factory function as
1199*481dde66SAndroid Build Coastguard Workerthe test parameter) that all implementations of the interface are expected to
1200*481dde66SAndroid Build Coastguard Workerpass. When someone implements the interface, they can instantiate your suite to
1201*481dde66SAndroid Build Coastguard Workerget all the interface-conformance tests for free.
1202*481dde66SAndroid Build Coastguard Worker
1203*481dde66SAndroid Build Coastguard WorkerTo define abstract tests, you should organize your code like this:
1204*481dde66SAndroid Build Coastguard Worker
1205*481dde66SAndroid Build Coastguard Worker1.  Put the definition of the parameterized test fixture class (e.g. `FooTest`)
1206*481dde66SAndroid Build Coastguard Worker    in a header file, say `foo_param_test.h`. Think of this as *declaring* your
1207*481dde66SAndroid Build Coastguard Worker    abstract tests.
1208*481dde66SAndroid Build Coastguard Worker2.  Put the `TEST_P` definitions in `foo_param_test.cc`, which includes
1209*481dde66SAndroid Build Coastguard Worker    `foo_param_test.h`. Think of this as *implementing* your abstract tests.
1210*481dde66SAndroid Build Coastguard Worker
1211*481dde66SAndroid Build Coastguard WorkerOnce they are defined, you can instantiate them by including `foo_param_test.h`,
1212*481dde66SAndroid Build Coastguard Workerinvoking `INSTANTIATE_TEST_SUITE_P()`, and depending on the library target that
1213*481dde66SAndroid Build Coastguard Workercontains `foo_param_test.cc`. You can instantiate the same abstract test suite
1214*481dde66SAndroid Build Coastguard Workermultiple times, possibly in different source files.
1215*481dde66SAndroid Build Coastguard Worker
1216*481dde66SAndroid Build Coastguard Worker### Specifying Names for Value-Parameterized Test Parameters
1217*481dde66SAndroid Build Coastguard Worker
1218*481dde66SAndroid Build Coastguard WorkerThe optional last argument to `INSTANTIATE_TEST_SUITE_P()` allows the user to
1219*481dde66SAndroid Build Coastguard Workerspecify a function or functor that generates custom test name suffixes based on
1220*481dde66SAndroid Build Coastguard Workerthe test parameters. The function should accept one argument of type
1221*481dde66SAndroid Build Coastguard Worker`testing::TestParamInfo<class ParamType>`, and return `std::string`.
1222*481dde66SAndroid Build Coastguard Worker
1223*481dde66SAndroid Build Coastguard Worker`testing::PrintToStringParamName` is a builtin test suffix generator that
1224*481dde66SAndroid Build Coastguard Workerreturns the value of `testing::PrintToString(GetParam())`. It does not work for
1225*481dde66SAndroid Build Coastguard Worker`std::string` or C strings.
1226*481dde66SAndroid Build Coastguard Worker
1227*481dde66SAndroid Build Coastguard Worker{: .callout .note}
1228*481dde66SAndroid Build Coastguard WorkerNOTE: test names must be non-empty, unique, and may only contain ASCII
1229*481dde66SAndroid Build Coastguard Workeralphanumeric characters. In particular, they
1230*481dde66SAndroid Build Coastguard Worker[should not contain underscores](faq.md#why-should-test-suite-names-and-test-names-not-contain-underscore)
1231*481dde66SAndroid Build Coastguard Worker
1232*481dde66SAndroid Build Coastguard Worker```c++
1233*481dde66SAndroid Build Coastguard Workerclass MyTestSuite : public testing::TestWithParam<int> {};
1234*481dde66SAndroid Build Coastguard Worker
1235*481dde66SAndroid Build Coastguard WorkerTEST_P(MyTestSuite, MyTest)
1236*481dde66SAndroid Build Coastguard Worker{
1237*481dde66SAndroid Build Coastguard Worker  std::cout << "Example Test Param: " << GetParam() << std::endl;
1238*481dde66SAndroid Build Coastguard Worker}
1239*481dde66SAndroid Build Coastguard Worker
1240*481dde66SAndroid Build Coastguard WorkerINSTANTIATE_TEST_SUITE_P(MyGroup, MyTestSuite, testing::Range(0, 10),
1241*481dde66SAndroid Build Coastguard Worker                         testing::PrintToStringParamName());
1242*481dde66SAndroid Build Coastguard Worker```
1243*481dde66SAndroid Build Coastguard Worker
1244*481dde66SAndroid Build Coastguard WorkerProviding a custom functor allows for more control over test parameter name
1245*481dde66SAndroid Build Coastguard Workergeneration, especially for types where the automatic conversion does not
1246*481dde66SAndroid Build Coastguard Workergenerate helpful parameter names (e.g. strings as demonstrated above). The
1247*481dde66SAndroid Build Coastguard Workerfollowing example illustrates this for multiple parameters, an enumeration type
1248*481dde66SAndroid Build Coastguard Workerand a string, and also demonstrates how to combine generators. It uses a lambda
1249*481dde66SAndroid Build Coastguard Workerfor conciseness:
1250*481dde66SAndroid Build Coastguard Worker
1251*481dde66SAndroid Build Coastguard Worker```c++
1252*481dde66SAndroid Build Coastguard Workerenum class MyType { MY_FOO = 0, MY_BAR = 1 };
1253*481dde66SAndroid Build Coastguard Worker
1254*481dde66SAndroid Build Coastguard Workerclass MyTestSuite : public testing::TestWithParam<std::tuple<MyType, std::string>> {
1255*481dde66SAndroid Build Coastguard Worker};
1256*481dde66SAndroid Build Coastguard Worker
1257*481dde66SAndroid Build Coastguard WorkerINSTANTIATE_TEST_SUITE_P(
1258*481dde66SAndroid Build Coastguard Worker    MyGroup, MyTestSuite,
1259*481dde66SAndroid Build Coastguard Worker    testing::Combine(
1260*481dde66SAndroid Build Coastguard Worker        testing::Values(MyType::MY_FOO, MyType::MY_BAR),
1261*481dde66SAndroid Build Coastguard Worker        testing::Values("A", "B")),
1262*481dde66SAndroid Build Coastguard Worker    [](const testing::TestParamInfo<MyTestSuite::ParamType>& info) {
1263*481dde66SAndroid Build Coastguard Worker      std::string name = absl::StrCat(
1264*481dde66SAndroid Build Coastguard Worker          std::get<0>(info.param) == MyType::MY_FOO ? "Foo" : "Bar",
1265*481dde66SAndroid Build Coastguard Worker          std::get<1>(info.param));
1266*481dde66SAndroid Build Coastguard Worker      absl::c_replace_if(name, [](char c) { return !std::isalnum(c); }, '_');
1267*481dde66SAndroid Build Coastguard Worker      return name;
1268*481dde66SAndroid Build Coastguard Worker    });
1269*481dde66SAndroid Build Coastguard Worker```
1270*481dde66SAndroid Build Coastguard Worker
1271*481dde66SAndroid Build Coastguard Worker## Typed Tests
1272*481dde66SAndroid Build Coastguard Worker
1273*481dde66SAndroid Build Coastguard WorkerSuppose you have multiple implementations of the same interface and want to make
1274*481dde66SAndroid Build Coastguard Workersure that all of them satisfy some common requirements. Or, you may have defined
1275*481dde66SAndroid Build Coastguard Workerseveral types that are supposed to conform to the same "concept" and you want to
1276*481dde66SAndroid Build Coastguard Workerverify it. In both cases, you want the same test logic repeated for different
1277*481dde66SAndroid Build Coastguard Workertypes.
1278*481dde66SAndroid Build Coastguard Worker
1279*481dde66SAndroid Build Coastguard WorkerWhile you can write one `TEST` or `TEST_F` for each type you want to test (and
1280*481dde66SAndroid Build Coastguard Workeryou may even factor the test logic into a function template that you invoke from
1281*481dde66SAndroid Build Coastguard Workerthe `TEST`), it's tedious and doesn't scale: if you want `m` tests over `n`
1282*481dde66SAndroid Build Coastguard Workertypes, you'll end up writing `m*n` `TEST`s.
1283*481dde66SAndroid Build Coastguard Worker
1284*481dde66SAndroid Build Coastguard Worker*Typed tests* allow you to repeat the same test logic over a list of types. You
1285*481dde66SAndroid Build Coastguard Workeronly need to write the test logic once, although you must know the type list
1286*481dde66SAndroid Build Coastguard Workerwhen writing typed tests. Here's how you do it:
1287*481dde66SAndroid Build Coastguard Worker
1288*481dde66SAndroid Build Coastguard WorkerFirst, define a fixture class template. It should be parameterized by a type.
1289*481dde66SAndroid Build Coastguard WorkerRemember to derive it from `::testing::Test`:
1290*481dde66SAndroid Build Coastguard Worker
1291*481dde66SAndroid Build Coastguard Worker```c++
1292*481dde66SAndroid Build Coastguard Workertemplate <typename T>
1293*481dde66SAndroid Build Coastguard Workerclass FooTest : public testing::Test {
1294*481dde66SAndroid Build Coastguard Worker public:
1295*481dde66SAndroid Build Coastguard Worker  ...
1296*481dde66SAndroid Build Coastguard Worker  using List = std::list<T>;
1297*481dde66SAndroid Build Coastguard Worker  static T shared_;
1298*481dde66SAndroid Build Coastguard Worker  T value_;
1299*481dde66SAndroid Build Coastguard Worker};
1300*481dde66SAndroid Build Coastguard Worker```
1301*481dde66SAndroid Build Coastguard Worker
1302*481dde66SAndroid Build Coastguard WorkerNext, associate a list of types with the test suite, which will be repeated for
1303*481dde66SAndroid Build Coastguard Workereach type in the list:
1304*481dde66SAndroid Build Coastguard Worker
1305*481dde66SAndroid Build Coastguard Worker```c++
1306*481dde66SAndroid Build Coastguard Workerusing MyTypes = ::testing::Types<char, int, unsigned int>;
1307*481dde66SAndroid Build Coastguard WorkerTYPED_TEST_SUITE(FooTest, MyTypes);
1308*481dde66SAndroid Build Coastguard Worker```
1309*481dde66SAndroid Build Coastguard Worker
1310*481dde66SAndroid Build Coastguard WorkerThe type alias (`using` or `typedef`) is necessary for the `TYPED_TEST_SUITE`
1311*481dde66SAndroid Build Coastguard Workermacro to parse correctly. Otherwise the compiler will think that each comma in
1312*481dde66SAndroid Build Coastguard Workerthe type list introduces a new macro argument.
1313*481dde66SAndroid Build Coastguard Worker
1314*481dde66SAndroid Build Coastguard WorkerThen, use `TYPED_TEST()` instead of `TEST_F()` to define a typed test for this
1315*481dde66SAndroid Build Coastguard Workertest suite. You can repeat this as many times as you want:
1316*481dde66SAndroid Build Coastguard Worker
1317*481dde66SAndroid Build Coastguard Worker```c++
1318*481dde66SAndroid Build Coastguard WorkerTYPED_TEST(FooTest, DoesBlah) {
1319*481dde66SAndroid Build Coastguard Worker  // Inside a test, refer to the special name TypeParam to get the type
1320*481dde66SAndroid Build Coastguard Worker  // parameter.  Since we are inside a derived class template, C++ requires
1321*481dde66SAndroid Build Coastguard Worker  // us to visit the members of FooTest via 'this'.
1322*481dde66SAndroid Build Coastguard Worker  TypeParam n = this->value_;
1323*481dde66SAndroid Build Coastguard Worker
1324*481dde66SAndroid Build Coastguard Worker  // To visit static members of the fixture, add the 'TestFixture::'
1325*481dde66SAndroid Build Coastguard Worker  // prefix.
1326*481dde66SAndroid Build Coastguard Worker  n += TestFixture::shared_;
1327*481dde66SAndroid Build Coastguard Worker
1328*481dde66SAndroid Build Coastguard Worker  // To refer to typedefs in the fixture, add the 'typename TestFixture::'
1329*481dde66SAndroid Build Coastguard Worker  // prefix.  The 'typename' is required to satisfy the compiler.
1330*481dde66SAndroid Build Coastguard Worker  typename TestFixture::List values;
1331*481dde66SAndroid Build Coastguard Worker
1332*481dde66SAndroid Build Coastguard Worker  values.push_back(n);
1333*481dde66SAndroid Build Coastguard Worker  ...
1334*481dde66SAndroid Build Coastguard Worker}
1335*481dde66SAndroid Build Coastguard Worker
1336*481dde66SAndroid Build Coastguard WorkerTYPED_TEST(FooTest, HasPropertyA) { ... }
1337*481dde66SAndroid Build Coastguard Worker```
1338*481dde66SAndroid Build Coastguard Worker
1339*481dde66SAndroid Build Coastguard WorkerYou can see [sample6_unittest.cc] for a complete example.
1340*481dde66SAndroid Build Coastguard Worker
1341*481dde66SAndroid Build Coastguard Worker[sample6_unittest.cc]: https://github.com/google/googletest/blob/main/googletest/samples/sample6_unittest.cc "Typed Test example"
1342*481dde66SAndroid Build Coastguard Worker
1343*481dde66SAndroid Build Coastguard Worker## Type-Parameterized Tests
1344*481dde66SAndroid Build Coastguard Worker
1345*481dde66SAndroid Build Coastguard Worker*Type-parameterized tests* are like typed tests, except that they don't require
1346*481dde66SAndroid Build Coastguard Workeryou to know the list of types ahead of time. Instead, you can define the test
1347*481dde66SAndroid Build Coastguard Workerlogic first and instantiate it with different type lists later. You can even
1348*481dde66SAndroid Build Coastguard Workerinstantiate it more than once in the same program.
1349*481dde66SAndroid Build Coastguard Worker
1350*481dde66SAndroid Build Coastguard WorkerIf you are designing an interface or concept, you can define a suite of
1351*481dde66SAndroid Build Coastguard Workertype-parameterized tests to verify properties that any valid implementation of
1352*481dde66SAndroid Build Coastguard Workerthe interface/concept should have. Then, the author of each implementation can
1353*481dde66SAndroid Build Coastguard Workerjust instantiate the test suite with their type to verify that it conforms to
1354*481dde66SAndroid Build Coastguard Workerthe requirements, without having to write similar tests repeatedly. Here's an
1355*481dde66SAndroid Build Coastguard Workerexample:
1356*481dde66SAndroid Build Coastguard Worker
1357*481dde66SAndroid Build Coastguard WorkerFirst, define a fixture class template, as we did with typed tests:
1358*481dde66SAndroid Build Coastguard Worker
1359*481dde66SAndroid Build Coastguard Worker```c++
1360*481dde66SAndroid Build Coastguard Workertemplate <typename T>
1361*481dde66SAndroid Build Coastguard Workerclass FooTest : public testing::Test {
1362*481dde66SAndroid Build Coastguard Worker  void DoSomethingInteresting();
1363*481dde66SAndroid Build Coastguard Worker  ...
1364*481dde66SAndroid Build Coastguard Worker};
1365*481dde66SAndroid Build Coastguard Worker```
1366*481dde66SAndroid Build Coastguard Worker
1367*481dde66SAndroid Build Coastguard WorkerNext, declare that you will define a type-parameterized test suite:
1368*481dde66SAndroid Build Coastguard Worker
1369*481dde66SAndroid Build Coastguard Worker```c++
1370*481dde66SAndroid Build Coastguard WorkerTYPED_TEST_SUITE_P(FooTest);
1371*481dde66SAndroid Build Coastguard Worker```
1372*481dde66SAndroid Build Coastguard Worker
1373*481dde66SAndroid Build Coastguard WorkerThen, use `TYPED_TEST_P()` to define a type-parameterized test. You can repeat
1374*481dde66SAndroid Build Coastguard Workerthis as many times as you want:
1375*481dde66SAndroid Build Coastguard Worker
1376*481dde66SAndroid Build Coastguard Worker```c++
1377*481dde66SAndroid Build Coastguard WorkerTYPED_TEST_P(FooTest, DoesBlah) {
1378*481dde66SAndroid Build Coastguard Worker  // Inside a test, refer to TypeParam to get the type parameter.
1379*481dde66SAndroid Build Coastguard Worker  TypeParam n = 0;
1380*481dde66SAndroid Build Coastguard Worker
1381*481dde66SAndroid Build Coastguard Worker  // You will need to use `this` explicitly to refer to fixture members.
1382*481dde66SAndroid Build Coastguard Worker  this->DoSomethingInteresting()
1383*481dde66SAndroid Build Coastguard Worker  ...
1384*481dde66SAndroid Build Coastguard Worker}
1385*481dde66SAndroid Build Coastguard Worker
1386*481dde66SAndroid Build Coastguard WorkerTYPED_TEST_P(FooTest, HasPropertyA) { ... }
1387*481dde66SAndroid Build Coastguard Worker```
1388*481dde66SAndroid Build Coastguard Worker
1389*481dde66SAndroid Build Coastguard WorkerNow the tricky part: you need to register all test patterns using the
1390*481dde66SAndroid Build Coastguard Worker`REGISTER_TYPED_TEST_SUITE_P` macro before you can instantiate them. The first
1391*481dde66SAndroid Build Coastguard Workerargument of the macro is the test suite name; the rest are the names of the
1392*481dde66SAndroid Build Coastguard Workertests in this test suite:
1393*481dde66SAndroid Build Coastguard Worker
1394*481dde66SAndroid Build Coastguard Worker```c++
1395*481dde66SAndroid Build Coastguard WorkerREGISTER_TYPED_TEST_SUITE_P(FooTest,
1396*481dde66SAndroid Build Coastguard Worker                            DoesBlah, HasPropertyA);
1397*481dde66SAndroid Build Coastguard Worker```
1398*481dde66SAndroid Build Coastguard Worker
1399*481dde66SAndroid Build Coastguard WorkerFinally, you are free to instantiate the pattern with the types you want. If you
1400*481dde66SAndroid Build Coastguard Workerput the above code in a header file, you can `#include` it in multiple C++
1401*481dde66SAndroid Build Coastguard Workersource files and instantiate it multiple times.
1402*481dde66SAndroid Build Coastguard Worker
1403*481dde66SAndroid Build Coastguard Worker```c++
1404*481dde66SAndroid Build Coastguard Workerusing MyTypes = ::testing::Types<char, int, unsigned int>;
1405*481dde66SAndroid Build Coastguard WorkerINSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
1406*481dde66SAndroid Build Coastguard Worker```
1407*481dde66SAndroid Build Coastguard Worker
1408*481dde66SAndroid Build Coastguard WorkerTo distinguish different instances of the pattern, the first argument to the
1409*481dde66SAndroid Build Coastguard Worker`INSTANTIATE_TYPED_TEST_SUITE_P` macro is a prefix that will be added to the
1410*481dde66SAndroid Build Coastguard Workeractual test suite name. Remember to pick unique prefixes for different
1411*481dde66SAndroid Build Coastguard Workerinstances.
1412*481dde66SAndroid Build Coastguard Worker
1413*481dde66SAndroid Build Coastguard WorkerIn the special case where the type list contains only one type, you can write
1414*481dde66SAndroid Build Coastguard Workerthat type directly without `::testing::Types<...>`, like this:
1415*481dde66SAndroid Build Coastguard Worker
1416*481dde66SAndroid Build Coastguard Worker```c++
1417*481dde66SAndroid Build Coastguard WorkerINSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, int);
1418*481dde66SAndroid Build Coastguard Worker```
1419*481dde66SAndroid Build Coastguard Worker
1420*481dde66SAndroid Build Coastguard WorkerYou can see [sample6_unittest.cc] for a complete example.
1421*481dde66SAndroid Build Coastguard Worker
1422*481dde66SAndroid Build Coastguard Worker## Testing Private Code
1423*481dde66SAndroid Build Coastguard Worker
1424*481dde66SAndroid Build Coastguard WorkerIf you change your software's internal implementation, your tests should not
1425*481dde66SAndroid Build Coastguard Workerbreak as long as the change is not observable by users. Therefore, **per the
1426*481dde66SAndroid Build Coastguard Workerblack-box testing principle, most of the time you should test your code through
1427*481dde66SAndroid Build Coastguard Workerits public interfaces.**
1428*481dde66SAndroid Build Coastguard Worker
1429*481dde66SAndroid Build Coastguard Worker**If you still find yourself needing to test internal implementation code,
1430*481dde66SAndroid Build Coastguard Workerconsider if there's a better design.** The desire to test internal
1431*481dde66SAndroid Build Coastguard Workerimplementation is often a sign that the class is doing too much. Consider
1432*481dde66SAndroid Build Coastguard Workerextracting an implementation class, and testing it. Then use that implementation
1433*481dde66SAndroid Build Coastguard Workerclass in the original class.
1434*481dde66SAndroid Build Coastguard Worker
1435*481dde66SAndroid Build Coastguard WorkerIf you absolutely have to test non-public interface code though, you can. There
1436*481dde66SAndroid Build Coastguard Workerare two cases to consider:
1437*481dde66SAndroid Build Coastguard Worker
1438*481dde66SAndroid Build Coastguard Worker*   Static functions ( *not* the same as static member functions!) or unnamed
1439*481dde66SAndroid Build Coastguard Worker    namespaces, and
1440*481dde66SAndroid Build Coastguard Worker*   Private or protected class members
1441*481dde66SAndroid Build Coastguard Worker
1442*481dde66SAndroid Build Coastguard WorkerTo test them, we use the following special techniques:
1443*481dde66SAndroid Build Coastguard Worker
1444*481dde66SAndroid Build Coastguard Worker*   Both static functions and definitions/declarations in an unnamed namespace
1445*481dde66SAndroid Build Coastguard Worker    are only visible within the same translation unit. To test them, you can
1446*481dde66SAndroid Build Coastguard Worker    `#include` the entire `.cc` file being tested in your `*_test.cc` file.
1447*481dde66SAndroid Build Coastguard Worker    (#including `.cc` files is not a good way to reuse code - you should not do
1448*481dde66SAndroid Build Coastguard Worker    this in production code!)
1449*481dde66SAndroid Build Coastguard Worker
1450*481dde66SAndroid Build Coastguard Worker    However, a better approach is to move the private code into the
1451*481dde66SAndroid Build Coastguard Worker    `foo::internal` namespace, where `foo` is the namespace your project
1452*481dde66SAndroid Build Coastguard Worker    normally uses, and put the private declarations in a `*-internal.h` file.
1453*481dde66SAndroid Build Coastguard Worker    Your production `.cc` files and your tests are allowed to include this
1454*481dde66SAndroid Build Coastguard Worker    internal header, but your clients are not. This way, you can fully test your
1455*481dde66SAndroid Build Coastguard Worker    internal implementation without leaking it to your clients.
1456*481dde66SAndroid Build Coastguard Worker
1457*481dde66SAndroid Build Coastguard Worker*   Private class members are only accessible from within the class or by
1458*481dde66SAndroid Build Coastguard Worker    friends. To access a class' private members, you can declare your test
1459*481dde66SAndroid Build Coastguard Worker    fixture as a friend to the class and define accessors in your fixture. Tests
1460*481dde66SAndroid Build Coastguard Worker    using the fixture can then access the private members of your production
1461*481dde66SAndroid Build Coastguard Worker    class via the accessors in the fixture. Note that even though your fixture
1462*481dde66SAndroid Build Coastguard Worker    is a friend to your production class, your tests are not automatically
1463*481dde66SAndroid Build Coastguard Worker    friends to it, as they are technically defined in sub-classes of the
1464*481dde66SAndroid Build Coastguard Worker    fixture.
1465*481dde66SAndroid Build Coastguard Worker
1466*481dde66SAndroid Build Coastguard Worker    Another way to test private members is to refactor them into an
1467*481dde66SAndroid Build Coastguard Worker    implementation class, which is then declared in a `*-internal.h` file. Your
1468*481dde66SAndroid Build Coastguard Worker    clients aren't allowed to include this header but your tests can. Such is
1469*481dde66SAndroid Build Coastguard Worker    called the
1470*481dde66SAndroid Build Coastguard Worker    [Pimpl](https://www.gamedev.net/articles/programming/general-and-gameplay-programming/the-c-pimpl-r1794/)
1471*481dde66SAndroid Build Coastguard Worker    (Private Implementation) idiom.
1472*481dde66SAndroid Build Coastguard Worker
1473*481dde66SAndroid Build Coastguard Worker    Or, you can declare an individual test as a friend of your class by adding
1474*481dde66SAndroid Build Coastguard Worker    this line in the class body:
1475*481dde66SAndroid Build Coastguard Worker
1476*481dde66SAndroid Build Coastguard Worker    ```c++
1477*481dde66SAndroid Build Coastguard Worker        FRIEND_TEST(TestSuiteName, TestName);
1478*481dde66SAndroid Build Coastguard Worker    ```
1479*481dde66SAndroid Build Coastguard Worker
1480*481dde66SAndroid Build Coastguard Worker    For example,
1481*481dde66SAndroid Build Coastguard Worker
1482*481dde66SAndroid Build Coastguard Worker    ```c++
1483*481dde66SAndroid Build Coastguard Worker    // foo.h
1484*481dde66SAndroid Build Coastguard Worker    class Foo {
1485*481dde66SAndroid Build Coastguard Worker      ...
1486*481dde66SAndroid Build Coastguard Worker     private:
1487*481dde66SAndroid Build Coastguard Worker      FRIEND_TEST(FooTest, BarReturnsZeroOnNull);
1488*481dde66SAndroid Build Coastguard Worker
1489*481dde66SAndroid Build Coastguard Worker      int Bar(void* x);
1490*481dde66SAndroid Build Coastguard Worker    };
1491*481dde66SAndroid Build Coastguard Worker
1492*481dde66SAndroid Build Coastguard Worker    // foo_test.cc
1493*481dde66SAndroid Build Coastguard Worker    ...
1494*481dde66SAndroid Build Coastguard Worker    TEST(FooTest, BarReturnsZeroOnNull) {
1495*481dde66SAndroid Build Coastguard Worker      Foo foo;
1496*481dde66SAndroid Build Coastguard Worker      EXPECT_EQ(foo.Bar(NULL), 0);  // Uses Foo's private member Bar().
1497*481dde66SAndroid Build Coastguard Worker    }
1498*481dde66SAndroid Build Coastguard Worker    ```
1499*481dde66SAndroid Build Coastguard Worker
1500*481dde66SAndroid Build Coastguard Worker    Pay special attention when your class is defined in a namespace. If you want
1501*481dde66SAndroid Build Coastguard Worker    your test fixtures and tests to be friends of your class, then they must be
1502*481dde66SAndroid Build Coastguard Worker    defined in the exact same namespace (no anonymous or inline namespaces).
1503*481dde66SAndroid Build Coastguard Worker
1504*481dde66SAndroid Build Coastguard Worker    For example, if the code to be tested looks like:
1505*481dde66SAndroid Build Coastguard Worker
1506*481dde66SAndroid Build Coastguard Worker    ```c++
1507*481dde66SAndroid Build Coastguard Worker    namespace my_namespace {
1508*481dde66SAndroid Build Coastguard Worker
1509*481dde66SAndroid Build Coastguard Worker    class Foo {
1510*481dde66SAndroid Build Coastguard Worker      friend class FooTest;
1511*481dde66SAndroid Build Coastguard Worker      FRIEND_TEST(FooTest, Bar);
1512*481dde66SAndroid Build Coastguard Worker      FRIEND_TEST(FooTest, Baz);
1513*481dde66SAndroid Build Coastguard Worker      ... definition of the class Foo ...
1514*481dde66SAndroid Build Coastguard Worker    };
1515*481dde66SAndroid Build Coastguard Worker
1516*481dde66SAndroid Build Coastguard Worker    }  // namespace my_namespace
1517*481dde66SAndroid Build Coastguard Worker    ```
1518*481dde66SAndroid Build Coastguard Worker
1519*481dde66SAndroid Build Coastguard Worker    Your test code should be something like:
1520*481dde66SAndroid Build Coastguard Worker
1521*481dde66SAndroid Build Coastguard Worker    ```c++
1522*481dde66SAndroid Build Coastguard Worker    namespace my_namespace {
1523*481dde66SAndroid Build Coastguard Worker
1524*481dde66SAndroid Build Coastguard Worker    class FooTest : public testing::Test {
1525*481dde66SAndroid Build Coastguard Worker     protected:
1526*481dde66SAndroid Build Coastguard Worker      ...
1527*481dde66SAndroid Build Coastguard Worker    };
1528*481dde66SAndroid Build Coastguard Worker
1529*481dde66SAndroid Build Coastguard Worker    TEST_F(FooTest, Bar) { ... }
1530*481dde66SAndroid Build Coastguard Worker    TEST_F(FooTest, Baz) { ... }
1531*481dde66SAndroid Build Coastguard Worker
1532*481dde66SAndroid Build Coastguard Worker    }  // namespace my_namespace
1533*481dde66SAndroid Build Coastguard Worker    ```
1534*481dde66SAndroid Build Coastguard Worker
1535*481dde66SAndroid Build Coastguard Worker## "Catching" Failures
1536*481dde66SAndroid Build Coastguard Worker
1537*481dde66SAndroid Build Coastguard WorkerIf you are building a testing utility on top of GoogleTest, you'll want to test
1538*481dde66SAndroid Build Coastguard Workeryour utility. What framework would you use to test it? GoogleTest, of course.
1539*481dde66SAndroid Build Coastguard Worker
1540*481dde66SAndroid Build Coastguard WorkerThe challenge is to verify that your testing utility reports failures correctly.
1541*481dde66SAndroid Build Coastguard WorkerIn frameworks that report a failure by throwing an exception, you could catch
1542*481dde66SAndroid Build Coastguard Workerthe exception and assert on it. But GoogleTest doesn't use exceptions, so how do
1543*481dde66SAndroid Build Coastguard Workerwe test that a piece of code generates an expected failure?
1544*481dde66SAndroid Build Coastguard Worker
1545*481dde66SAndroid Build Coastguard Worker`"gtest/gtest-spi.h"` contains some constructs to do this.
1546*481dde66SAndroid Build Coastguard WorkerAfter #including this header, you can use
1547*481dde66SAndroid Build Coastguard Worker
1548*481dde66SAndroid Build Coastguard Worker```c++
1549*481dde66SAndroid Build Coastguard Worker  EXPECT_FATAL_FAILURE(statement, substring);
1550*481dde66SAndroid Build Coastguard Worker```
1551*481dde66SAndroid Build Coastguard Worker
1552*481dde66SAndroid Build Coastguard Workerto assert that `statement` generates a fatal (e.g. `ASSERT_*`) failure in the
1553*481dde66SAndroid Build Coastguard Workercurrent thread whose message contains the given `substring`, or use
1554*481dde66SAndroid Build Coastguard Worker
1555*481dde66SAndroid Build Coastguard Worker```c++
1556*481dde66SAndroid Build Coastguard Worker  EXPECT_NONFATAL_FAILURE(statement, substring);
1557*481dde66SAndroid Build Coastguard Worker```
1558*481dde66SAndroid Build Coastguard Worker
1559*481dde66SAndroid Build Coastguard Workerif you are expecting a non-fatal (e.g. `EXPECT_*`) failure.
1560*481dde66SAndroid Build Coastguard Worker
1561*481dde66SAndroid Build Coastguard WorkerOnly failures in the current thread are checked to determine the result of this
1562*481dde66SAndroid Build Coastguard Workertype of expectations. If `statement` creates new threads, failures in these
1563*481dde66SAndroid Build Coastguard Workerthreads are also ignored. If you want to catch failures in other threads as
1564*481dde66SAndroid Build Coastguard Workerwell, use one of the following macros instead:
1565*481dde66SAndroid Build Coastguard Worker
1566*481dde66SAndroid Build Coastguard Worker```c++
1567*481dde66SAndroid Build Coastguard Worker  EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substring);
1568*481dde66SAndroid Build Coastguard Worker  EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substring);
1569*481dde66SAndroid Build Coastguard Worker```
1570*481dde66SAndroid Build Coastguard Worker
1571*481dde66SAndroid Build Coastguard Worker{: .callout .note}
1572*481dde66SAndroid Build Coastguard WorkerNOTE: Assertions from multiple threads are currently not supported on Windows.
1573*481dde66SAndroid Build Coastguard Worker
1574*481dde66SAndroid Build Coastguard WorkerFor technical reasons, there are some caveats:
1575*481dde66SAndroid Build Coastguard Worker
1576*481dde66SAndroid Build Coastguard Worker1.  You cannot stream a failure message to either macro.
1577*481dde66SAndroid Build Coastguard Worker
1578*481dde66SAndroid Build Coastguard Worker2.  `statement` in `EXPECT_FATAL_FAILURE{_ON_ALL_THREADS}()` cannot reference
1579*481dde66SAndroid Build Coastguard Worker    local non-static variables or non-static members of `this` object.
1580*481dde66SAndroid Build Coastguard Worker
1581*481dde66SAndroid Build Coastguard Worker3.  `statement` in `EXPECT_FATAL_FAILURE{_ON_ALL_THREADS}()` cannot return a
1582*481dde66SAndroid Build Coastguard Worker    value.
1583*481dde66SAndroid Build Coastguard Worker
1584*481dde66SAndroid Build Coastguard Worker## Registering tests programmatically
1585*481dde66SAndroid Build Coastguard Worker
1586*481dde66SAndroid Build Coastguard WorkerThe `TEST` macros handle the vast majority of all use cases, but there are few
1587*481dde66SAndroid Build Coastguard Workerwhere runtime registration logic is required. For those cases, the framework
1588*481dde66SAndroid Build Coastguard Workerprovides the `::testing::RegisterTest` that allows callers to register arbitrary
1589*481dde66SAndroid Build Coastguard Workertests dynamically.
1590*481dde66SAndroid Build Coastguard Worker
1591*481dde66SAndroid Build Coastguard WorkerThis is an advanced API only to be used when the `TEST` macros are insufficient.
1592*481dde66SAndroid Build Coastguard WorkerThe macros should be preferred when possible, as they avoid most of the
1593*481dde66SAndroid Build Coastguard Workercomplexity of calling this function.
1594*481dde66SAndroid Build Coastguard Worker
1595*481dde66SAndroid Build Coastguard WorkerIt provides the following signature:
1596*481dde66SAndroid Build Coastguard Worker
1597*481dde66SAndroid Build Coastguard Worker```c++
1598*481dde66SAndroid Build Coastguard Workertemplate <typename Factory>
1599*481dde66SAndroid Build Coastguard WorkerTestInfo* RegisterTest(const char* test_suite_name, const char* test_name,
1600*481dde66SAndroid Build Coastguard Worker                       const char* type_param, const char* value_param,
1601*481dde66SAndroid Build Coastguard Worker                       const char* file, int line, Factory factory);
1602*481dde66SAndroid Build Coastguard Worker```
1603*481dde66SAndroid Build Coastguard Worker
1604*481dde66SAndroid Build Coastguard WorkerThe `factory` argument is a factory callable (move-constructible) object or
1605*481dde66SAndroid Build Coastguard Workerfunction pointer that creates a new instance of the Test object. It handles
1606*481dde66SAndroid Build Coastguard Workerownership to the caller. The signature of the callable is `Fixture*()`, where
1607*481dde66SAndroid Build Coastguard Worker`Fixture` is the test fixture class for the test. All tests registered with the
1608*481dde66SAndroid Build Coastguard Workersame `test_suite_name` must return the same fixture type. This is checked at
1609*481dde66SAndroid Build Coastguard Workerruntime.
1610*481dde66SAndroid Build Coastguard Worker
1611*481dde66SAndroid Build Coastguard WorkerThe framework will infer the fixture class from the factory and will call the
1612*481dde66SAndroid Build Coastguard Worker`SetUpTestSuite` and `TearDownTestSuite` for it.
1613*481dde66SAndroid Build Coastguard Worker
1614*481dde66SAndroid Build Coastguard WorkerMust be called before `RUN_ALL_TESTS()` is invoked, otherwise behavior is
1615*481dde66SAndroid Build Coastguard Workerundefined.
1616*481dde66SAndroid Build Coastguard Worker
1617*481dde66SAndroid Build Coastguard WorkerUse case example:
1618*481dde66SAndroid Build Coastguard Worker
1619*481dde66SAndroid Build Coastguard Worker```c++
1620*481dde66SAndroid Build Coastguard Workerclass MyFixture : public testing::Test {
1621*481dde66SAndroid Build Coastguard Worker public:
1622*481dde66SAndroid Build Coastguard Worker  // All of these optional, just like in regular macro usage.
1623*481dde66SAndroid Build Coastguard Worker  static void SetUpTestSuite() { ... }
1624*481dde66SAndroid Build Coastguard Worker  static void TearDownTestSuite() { ... }
1625*481dde66SAndroid Build Coastguard Worker  void SetUp() override { ... }
1626*481dde66SAndroid Build Coastguard Worker  void TearDown() override { ... }
1627*481dde66SAndroid Build Coastguard Worker};
1628*481dde66SAndroid Build Coastguard Worker
1629*481dde66SAndroid Build Coastguard Workerclass MyTest : public MyFixture {
1630*481dde66SAndroid Build Coastguard Worker public:
1631*481dde66SAndroid Build Coastguard Worker  explicit MyTest(int data) : data_(data) {}
1632*481dde66SAndroid Build Coastguard Worker  void TestBody() override { ... }
1633*481dde66SAndroid Build Coastguard Worker
1634*481dde66SAndroid Build Coastguard Worker private:
1635*481dde66SAndroid Build Coastguard Worker  int data_;
1636*481dde66SAndroid Build Coastguard Worker};
1637*481dde66SAndroid Build Coastguard Worker
1638*481dde66SAndroid Build Coastguard Workervoid RegisterMyTests(const std::vector<int>& values) {
1639*481dde66SAndroid Build Coastguard Worker  for (int v : values) {
1640*481dde66SAndroid Build Coastguard Worker    testing::RegisterTest(
1641*481dde66SAndroid Build Coastguard Worker        "MyFixture", ("Test" + std::to_string(v)).c_str(), nullptr,
1642*481dde66SAndroid Build Coastguard Worker        std::to_string(v).c_str(),
1643*481dde66SAndroid Build Coastguard Worker        __FILE__, __LINE__,
1644*481dde66SAndroid Build Coastguard Worker        // Important to use the fixture type as the return type here.
1645*481dde66SAndroid Build Coastguard Worker        [=]() -> MyFixture* { return new MyTest(v); });
1646*481dde66SAndroid Build Coastguard Worker  }
1647*481dde66SAndroid Build Coastguard Worker}
1648*481dde66SAndroid Build Coastguard Worker...
1649*481dde66SAndroid Build Coastguard Workerint main(int argc, char** argv) {
1650*481dde66SAndroid Build Coastguard Worker  testing::InitGoogleTest(&argc, argv);
1651*481dde66SAndroid Build Coastguard Worker  std::vector<int> values_to_test = LoadValuesFromConfig();
1652*481dde66SAndroid Build Coastguard Worker  RegisterMyTests(values_to_test);
1653*481dde66SAndroid Build Coastguard Worker  ...
1654*481dde66SAndroid Build Coastguard Worker  return RUN_ALL_TESTS();
1655*481dde66SAndroid Build Coastguard Worker}
1656*481dde66SAndroid Build Coastguard Worker```
1657*481dde66SAndroid Build Coastguard Worker
1658*481dde66SAndroid Build Coastguard Worker## Getting the Current Test's Name
1659*481dde66SAndroid Build Coastguard Worker
1660*481dde66SAndroid Build Coastguard WorkerSometimes a function may need to know the name of the currently running test.
1661*481dde66SAndroid Build Coastguard WorkerFor example, you may be using the `SetUp()` method of your test fixture to set
1662*481dde66SAndroid Build Coastguard Workerthe golden file name based on which test is running. The
1663*481dde66SAndroid Build Coastguard Worker[`TestInfo`](reference/testing.md#TestInfo) class has this information.
1664*481dde66SAndroid Build Coastguard Worker
1665*481dde66SAndroid Build Coastguard WorkerTo obtain a `TestInfo` object for the currently running test, call
1666*481dde66SAndroid Build Coastguard Worker`current_test_info()` on the [`UnitTest`](reference/testing.md#UnitTest)
1667*481dde66SAndroid Build Coastguard Workersingleton object:
1668*481dde66SAndroid Build Coastguard Worker
1669*481dde66SAndroid Build Coastguard Worker```c++
1670*481dde66SAndroid Build Coastguard Worker  // Gets information about the currently running test.
1671*481dde66SAndroid Build Coastguard Worker  // Do NOT delete the returned object - it's managed by the UnitTest class.
1672*481dde66SAndroid Build Coastguard Worker  const testing::TestInfo* const test_info =
1673*481dde66SAndroid Build Coastguard Worker      testing::UnitTest::GetInstance()->current_test_info();
1674*481dde66SAndroid Build Coastguard Worker
1675*481dde66SAndroid Build Coastguard Worker  printf("We are in test %s of test suite %s.\n",
1676*481dde66SAndroid Build Coastguard Worker         test_info->name(),
1677*481dde66SAndroid Build Coastguard Worker         test_info->test_suite_name());
1678*481dde66SAndroid Build Coastguard Worker```
1679*481dde66SAndroid Build Coastguard Worker
1680*481dde66SAndroid Build Coastguard Worker`current_test_info()` returns a null pointer if no test is running. In
1681*481dde66SAndroid Build Coastguard Workerparticular, you cannot find the test suite name in `SetUpTestSuite()`,
1682*481dde66SAndroid Build Coastguard Worker`TearDownTestSuite()` (where you know the test suite name implicitly), or
1683*481dde66SAndroid Build Coastguard Workerfunctions called from them.
1684*481dde66SAndroid Build Coastguard Worker
1685*481dde66SAndroid Build Coastguard Worker## Extending GoogleTest by Handling Test Events
1686*481dde66SAndroid Build Coastguard Worker
1687*481dde66SAndroid Build Coastguard WorkerGoogleTest provides an **event listener API** to let you receive notifications
1688*481dde66SAndroid Build Coastguard Workerabout the progress of a test program and test failures. The events you can
1689*481dde66SAndroid Build Coastguard Workerlisten to include the start and end of the test program, a test suite, or a test
1690*481dde66SAndroid Build Coastguard Workermethod, among others. You may use this API to augment or replace the standard
1691*481dde66SAndroid Build Coastguard Workerconsole output, replace the XML output, or provide a completely different form
1692*481dde66SAndroid Build Coastguard Workerof output, such as a GUI or a database. You can also use test events as
1693*481dde66SAndroid Build Coastguard Workercheckpoints to implement a resource leak checker, for example.
1694*481dde66SAndroid Build Coastguard Worker
1695*481dde66SAndroid Build Coastguard Worker### Defining Event Listeners
1696*481dde66SAndroid Build Coastguard Worker
1697*481dde66SAndroid Build Coastguard WorkerTo define a event listener, you subclass either
1698*481dde66SAndroid Build Coastguard Worker[`testing::TestEventListener`](reference/testing.md#TestEventListener) or
1699*481dde66SAndroid Build Coastguard Worker[`testing::EmptyTestEventListener`](reference/testing.md#EmptyTestEventListener)
1700*481dde66SAndroid Build Coastguard WorkerThe former is an (abstract) interface, where *each pure virtual method can be
1701*481dde66SAndroid Build Coastguard Workeroverridden to handle a test event* (For example, when a test starts, the
1702*481dde66SAndroid Build Coastguard Worker`OnTestStart()` method will be called.). The latter provides an empty
1703*481dde66SAndroid Build Coastguard Workerimplementation of all methods in the interface, such that a subclass only needs
1704*481dde66SAndroid Build Coastguard Workerto override the methods it cares about.
1705*481dde66SAndroid Build Coastguard Worker
1706*481dde66SAndroid Build Coastguard WorkerWhen an event is fired, its context is passed to the handler function as an
1707*481dde66SAndroid Build Coastguard Workerargument. The following argument types are used:
1708*481dde66SAndroid Build Coastguard Worker
1709*481dde66SAndroid Build Coastguard Worker*   UnitTest reflects the state of the entire test program,
1710*481dde66SAndroid Build Coastguard Worker*   TestSuite has information about a test suite, which can contain one or more
1711*481dde66SAndroid Build Coastguard Worker    tests,
1712*481dde66SAndroid Build Coastguard Worker*   TestInfo contains the state of a test, and
1713*481dde66SAndroid Build Coastguard Worker*   TestPartResult represents the result of a test assertion.
1714*481dde66SAndroid Build Coastguard Worker
1715*481dde66SAndroid Build Coastguard WorkerAn event handler function can examine the argument it receives to find out
1716*481dde66SAndroid Build Coastguard Workerinteresting information about the event and the test program's state.
1717*481dde66SAndroid Build Coastguard Worker
1718*481dde66SAndroid Build Coastguard WorkerHere's an example:
1719*481dde66SAndroid Build Coastguard Worker
1720*481dde66SAndroid Build Coastguard Worker```c++
1721*481dde66SAndroid Build Coastguard Worker  class MinimalistPrinter : public testing::EmptyTestEventListener {
1722*481dde66SAndroid Build Coastguard Worker    // Called before a test starts.
1723*481dde66SAndroid Build Coastguard Worker    void OnTestStart(const testing::TestInfo& test_info) override {
1724*481dde66SAndroid Build Coastguard Worker      printf("*** Test %s.%s starting.\n",
1725*481dde66SAndroid Build Coastguard Worker             test_info.test_suite_name(), test_info.name());
1726*481dde66SAndroid Build Coastguard Worker    }
1727*481dde66SAndroid Build Coastguard Worker
1728*481dde66SAndroid Build Coastguard Worker    // Called after a failed assertion or a SUCCESS().
1729*481dde66SAndroid Build Coastguard Worker    void OnTestPartResult(const testing::TestPartResult& test_part_result) override {
1730*481dde66SAndroid Build Coastguard Worker      printf("%s in %s:%d\n%s\n",
1731*481dde66SAndroid Build Coastguard Worker             test_part_result.failed() ? "*** Failure" : "Success",
1732*481dde66SAndroid Build Coastguard Worker             test_part_result.file_name(),
1733*481dde66SAndroid Build Coastguard Worker             test_part_result.line_number(),
1734*481dde66SAndroid Build Coastguard Worker             test_part_result.summary());
1735*481dde66SAndroid Build Coastguard Worker    }
1736*481dde66SAndroid Build Coastguard Worker
1737*481dde66SAndroid Build Coastguard Worker    // Called after a test ends.
1738*481dde66SAndroid Build Coastguard Worker    void OnTestEnd(const testing::TestInfo& test_info) override {
1739*481dde66SAndroid Build Coastguard Worker      printf("*** Test %s.%s ending.\n",
1740*481dde66SAndroid Build Coastguard Worker             test_info.test_suite_name(), test_info.name());
1741*481dde66SAndroid Build Coastguard Worker    }
1742*481dde66SAndroid Build Coastguard Worker  };
1743*481dde66SAndroid Build Coastguard Worker```
1744*481dde66SAndroid Build Coastguard Worker
1745*481dde66SAndroid Build Coastguard Worker### Using Event Listeners
1746*481dde66SAndroid Build Coastguard Worker
1747*481dde66SAndroid Build Coastguard WorkerTo use the event listener you have defined, add an instance of it to the
1748*481dde66SAndroid Build Coastguard WorkerGoogleTest event listener list (represented by class
1749*481dde66SAndroid Build Coastguard Worker[`TestEventListeners`](reference/testing.md#TestEventListeners) - note the "s"
1750*481dde66SAndroid Build Coastguard Workerat the end of the name) in your `main()` function, before calling
1751*481dde66SAndroid Build Coastguard Worker`RUN_ALL_TESTS()`:
1752*481dde66SAndroid Build Coastguard Worker
1753*481dde66SAndroid Build Coastguard Worker```c++
1754*481dde66SAndroid Build Coastguard Workerint main(int argc, char** argv) {
1755*481dde66SAndroid Build Coastguard Worker  testing::InitGoogleTest(&argc, argv);
1756*481dde66SAndroid Build Coastguard Worker  // Gets hold of the event listener list.
1757*481dde66SAndroid Build Coastguard Worker  testing::TestEventListeners& listeners =
1758*481dde66SAndroid Build Coastguard Worker      testing::UnitTest::GetInstance()->listeners();
1759*481dde66SAndroid Build Coastguard Worker  // Adds a listener to the end.  GoogleTest takes the ownership.
1760*481dde66SAndroid Build Coastguard Worker  listeners.Append(new MinimalistPrinter);
1761*481dde66SAndroid Build Coastguard Worker  return RUN_ALL_TESTS();
1762*481dde66SAndroid Build Coastguard Worker}
1763*481dde66SAndroid Build Coastguard Worker```
1764*481dde66SAndroid Build Coastguard Worker
1765*481dde66SAndroid Build Coastguard WorkerThere's only one problem: the default test result printer is still in effect, so
1766*481dde66SAndroid Build Coastguard Workerits output will mingle with the output from your minimalist printer. To suppress
1767*481dde66SAndroid Build Coastguard Workerthe default printer, just release it from the event listener list and delete it.
1768*481dde66SAndroid Build Coastguard WorkerYou can do so by adding one line:
1769*481dde66SAndroid Build Coastguard Worker
1770*481dde66SAndroid Build Coastguard Worker```c++
1771*481dde66SAndroid Build Coastguard Worker  ...
1772*481dde66SAndroid Build Coastguard Worker  delete listeners.Release(listeners.default_result_printer());
1773*481dde66SAndroid Build Coastguard Worker  listeners.Append(new MinimalistPrinter);
1774*481dde66SAndroid Build Coastguard Worker  return RUN_ALL_TESTS();
1775*481dde66SAndroid Build Coastguard Worker```
1776*481dde66SAndroid Build Coastguard Worker
1777*481dde66SAndroid Build Coastguard WorkerNow, sit back and enjoy a completely different output from your tests. For more
1778*481dde66SAndroid Build Coastguard Workerdetails, see [sample9_unittest.cc].
1779*481dde66SAndroid Build Coastguard Worker
1780*481dde66SAndroid Build Coastguard Worker[sample9_unittest.cc]: https://github.com/google/googletest/blob/main/googletest/samples/sample9_unittest.cc "Event listener example"
1781*481dde66SAndroid Build Coastguard Worker
1782*481dde66SAndroid Build Coastguard WorkerYou may append more than one listener to the list. When an `On*Start()` or
1783*481dde66SAndroid Build Coastguard Worker`OnTestPartResult()` event is fired, the listeners will receive it in the order
1784*481dde66SAndroid Build Coastguard Workerthey appear in the list (since new listeners are added to the end of the list,
1785*481dde66SAndroid Build Coastguard Workerthe default text printer and the default XML generator will receive the event
1786*481dde66SAndroid Build Coastguard Workerfirst). An `On*End()` event will be received by the listeners in the *reverse*
1787*481dde66SAndroid Build Coastguard Workerorder. This allows output by listeners added later to be framed by output from
1788*481dde66SAndroid Build Coastguard Workerlisteners added earlier.
1789*481dde66SAndroid Build Coastguard Worker
1790*481dde66SAndroid Build Coastguard Worker### Generating Failures in Listeners
1791*481dde66SAndroid Build Coastguard Worker
1792*481dde66SAndroid Build Coastguard WorkerYou may use failure-raising macros (`EXPECT_*()`, `ASSERT_*()`, `FAIL()`, etc)
1793*481dde66SAndroid Build Coastguard Workerwhen processing an event. There are some restrictions:
1794*481dde66SAndroid Build Coastguard Worker
1795*481dde66SAndroid Build Coastguard Worker1.  You cannot generate any failure in `OnTestPartResult()` (otherwise it will
1796*481dde66SAndroid Build Coastguard Worker    cause `OnTestPartResult()` to be called recursively).
1797*481dde66SAndroid Build Coastguard Worker2.  A listener that handles `OnTestPartResult()` is not allowed to generate any
1798*481dde66SAndroid Build Coastguard Worker    failure.
1799*481dde66SAndroid Build Coastguard Worker
1800*481dde66SAndroid Build Coastguard WorkerWhen you add listeners to the listener list, you should put listeners that
1801*481dde66SAndroid Build Coastguard Workerhandle `OnTestPartResult()` *before* listeners that can generate failures. This
1802*481dde66SAndroid Build Coastguard Workerensures that failures generated by the latter are attributed to the right test
1803*481dde66SAndroid Build Coastguard Workerby the former.
1804*481dde66SAndroid Build Coastguard Worker
1805*481dde66SAndroid Build Coastguard WorkerSee [sample10_unittest.cc] for an example of a failure-raising listener.
1806*481dde66SAndroid Build Coastguard Worker
1807*481dde66SAndroid Build Coastguard Worker[sample10_unittest.cc]: https://github.com/google/googletest/blob/main/googletest/samples/sample10_unittest.cc "Failure-raising listener example"
1808*481dde66SAndroid Build Coastguard Worker
1809*481dde66SAndroid Build Coastguard Worker## Running Test Programs: Advanced Options
1810*481dde66SAndroid Build Coastguard Worker
1811*481dde66SAndroid Build Coastguard WorkerGoogleTest test programs are ordinary executables. Once built, you can run them
1812*481dde66SAndroid Build Coastguard Workerdirectly and affect their behavior via the following environment variables
1813*481dde66SAndroid Build Coastguard Workerand/or command line flags. For the flags to work, your programs must call
1814*481dde66SAndroid Build Coastguard Worker`::testing::InitGoogleTest()` before calling `RUN_ALL_TESTS()`.
1815*481dde66SAndroid Build Coastguard Worker
1816*481dde66SAndroid Build Coastguard WorkerTo see a list of supported flags and their usage, please run your test program
1817*481dde66SAndroid Build Coastguard Workerwith the `--help` flag.
1818*481dde66SAndroid Build Coastguard Worker
1819*481dde66SAndroid Build Coastguard WorkerIf an option is specified both by an environment variable and by a flag, the
1820*481dde66SAndroid Build Coastguard Workerlatter takes precedence.
1821*481dde66SAndroid Build Coastguard Worker
1822*481dde66SAndroid Build Coastguard Worker### Selecting Tests
1823*481dde66SAndroid Build Coastguard Worker
1824*481dde66SAndroid Build Coastguard Worker#### Listing Test Names
1825*481dde66SAndroid Build Coastguard Worker
1826*481dde66SAndroid Build Coastguard WorkerSometimes it is necessary to list the available tests in a program before
1827*481dde66SAndroid Build Coastguard Workerrunning them so that a filter may be applied if needed. Including the flag
1828*481dde66SAndroid Build Coastguard Worker`--gtest_list_tests` overrides all other flags and lists tests in the following
1829*481dde66SAndroid Build Coastguard Workerformat:
1830*481dde66SAndroid Build Coastguard Worker
1831*481dde66SAndroid Build Coastguard Worker```none
1832*481dde66SAndroid Build Coastguard WorkerTestSuite1.
1833*481dde66SAndroid Build Coastguard Worker  TestName1
1834*481dde66SAndroid Build Coastguard Worker  TestName2
1835*481dde66SAndroid Build Coastguard WorkerTestSuite2.
1836*481dde66SAndroid Build Coastguard Worker  TestName
1837*481dde66SAndroid Build Coastguard Worker```
1838*481dde66SAndroid Build Coastguard Worker
1839*481dde66SAndroid Build Coastguard WorkerNone of the tests listed are actually run if the flag is provided. There is no
1840*481dde66SAndroid Build Coastguard Workercorresponding environment variable for this flag.
1841*481dde66SAndroid Build Coastguard Worker
1842*481dde66SAndroid Build Coastguard Worker#### Running a Subset of the Tests
1843*481dde66SAndroid Build Coastguard Worker
1844*481dde66SAndroid Build Coastguard WorkerBy default, a GoogleTest program runs all tests the user has defined. Sometimes,
1845*481dde66SAndroid Build Coastguard Workeryou want to run only a subset of the tests (e.g. for debugging or quickly
1846*481dde66SAndroid Build Coastguard Workerverifying a change). If you set the `GTEST_FILTER` environment variable or the
1847*481dde66SAndroid Build Coastguard Worker`--gtest_filter` flag to a filter string, GoogleTest will only run the tests
1848*481dde66SAndroid Build Coastguard Workerwhose full names (in the form of `TestSuiteName.TestName`) match the filter.
1849*481dde66SAndroid Build Coastguard Worker
1850*481dde66SAndroid Build Coastguard WorkerThe format of a filter is a '`:`'-separated list of wildcard patterns (called
1851*481dde66SAndroid Build Coastguard Workerthe *positive patterns*) optionally followed by a '`-`' and another
1852*481dde66SAndroid Build Coastguard Worker'`:`'-separated pattern list (called the *negative patterns*). A test matches
1853*481dde66SAndroid Build Coastguard Workerthe filter if and only if it matches any of the positive patterns but does not
1854*481dde66SAndroid Build Coastguard Workermatch any of the negative patterns.
1855*481dde66SAndroid Build Coastguard Worker
1856*481dde66SAndroid Build Coastguard WorkerA pattern may contain `'*'` (matches any string) or `'?'` (matches any single
1857*481dde66SAndroid Build Coastguard Workercharacter). For convenience, the filter `'*-NegativePatterns'` can be also
1858*481dde66SAndroid Build Coastguard Workerwritten as `'-NegativePatterns'`.
1859*481dde66SAndroid Build Coastguard Worker
1860*481dde66SAndroid Build Coastguard WorkerFor example:
1861*481dde66SAndroid Build Coastguard Worker
1862*481dde66SAndroid Build Coastguard Worker*   `./foo_test` Has no flag, and thus runs all its tests.
1863*481dde66SAndroid Build Coastguard Worker*   `./foo_test --gtest_filter=*` Also runs everything, due to the single
1864*481dde66SAndroid Build Coastguard Worker    match-everything `*` value.
1865*481dde66SAndroid Build Coastguard Worker*   `./foo_test --gtest_filter=FooTest.*` Runs everything in test suite
1866*481dde66SAndroid Build Coastguard Worker    `FooTest` .
1867*481dde66SAndroid Build Coastguard Worker*   `./foo_test --gtest_filter=*Null*:*Constructor*` Runs any test whose full
1868*481dde66SAndroid Build Coastguard Worker    name contains either `"Null"` or `"Constructor"` .
1869*481dde66SAndroid Build Coastguard Worker*   `./foo_test --gtest_filter=-*DeathTest.*` Runs all non-death tests.
1870*481dde66SAndroid Build Coastguard Worker*   `./foo_test --gtest_filter=FooTest.*-FooTest.Bar` Runs everything in test
1871*481dde66SAndroid Build Coastguard Worker    suite `FooTest` except `FooTest.Bar`.
1872*481dde66SAndroid Build Coastguard Worker*   `./foo_test --gtest_filter=FooTest.*:BarTest.*-FooTest.Bar:BarTest.Foo` Runs
1873*481dde66SAndroid Build Coastguard Worker    everything in test suite `FooTest` except `FooTest.Bar` and everything in
1874*481dde66SAndroid Build Coastguard Worker    test suite `BarTest` except `BarTest.Foo`.
1875*481dde66SAndroid Build Coastguard Worker
1876*481dde66SAndroid Build Coastguard Worker#### Stop test execution upon first failure
1877*481dde66SAndroid Build Coastguard Worker
1878*481dde66SAndroid Build Coastguard WorkerBy default, a GoogleTest program runs all tests the user has defined. In some
1879*481dde66SAndroid Build Coastguard Workercases (e.g. iterative test development & execution) it may be desirable stop
1880*481dde66SAndroid Build Coastguard Workertest execution upon first failure (trading improved latency for completeness).
1881*481dde66SAndroid Build Coastguard WorkerIf `GTEST_FAIL_FAST` environment variable or `--gtest_fail_fast` flag is set,
1882*481dde66SAndroid Build Coastguard Workerthe test runner will stop execution as soon as the first test failure is found.
1883*481dde66SAndroid Build Coastguard Worker
1884*481dde66SAndroid Build Coastguard Worker#### Temporarily Disabling Tests
1885*481dde66SAndroid Build Coastguard Worker
1886*481dde66SAndroid Build Coastguard WorkerIf you have a broken test that you cannot fix right away, you can add the
1887*481dde66SAndroid Build Coastguard Worker`DISABLED_` prefix to its name. This will exclude it from execution. This is
1888*481dde66SAndroid Build Coastguard Workerbetter than commenting out the code or using `#if 0`, as disabled tests are
1889*481dde66SAndroid Build Coastguard Workerstill compiled (and thus won't rot).
1890*481dde66SAndroid Build Coastguard Worker
1891*481dde66SAndroid Build Coastguard WorkerIf you need to disable all tests in a test suite, you can either add `DISABLED_`
1892*481dde66SAndroid Build Coastguard Workerto the front of the name of each test, or alternatively add it to the front of
1893*481dde66SAndroid Build Coastguard Workerthe test suite name.
1894*481dde66SAndroid Build Coastguard Worker
1895*481dde66SAndroid Build Coastguard WorkerFor example, the following tests won't be run by GoogleTest, even though they
1896*481dde66SAndroid Build Coastguard Workerwill still be compiled:
1897*481dde66SAndroid Build Coastguard Worker
1898*481dde66SAndroid Build Coastguard Worker```c++
1899*481dde66SAndroid Build Coastguard Worker// Tests that Foo does Abc.
1900*481dde66SAndroid Build Coastguard WorkerTEST(FooTest, DISABLED_DoesAbc) { ... }
1901*481dde66SAndroid Build Coastguard Worker
1902*481dde66SAndroid Build Coastguard Workerclass DISABLED_BarTest : public testing::Test { ... };
1903*481dde66SAndroid Build Coastguard Worker
1904*481dde66SAndroid Build Coastguard Worker// Tests that Bar does Xyz.
1905*481dde66SAndroid Build Coastguard WorkerTEST_F(DISABLED_BarTest, DoesXyz) { ... }
1906*481dde66SAndroid Build Coastguard Worker```
1907*481dde66SAndroid Build Coastguard Worker
1908*481dde66SAndroid Build Coastguard Worker{: .callout .note}
1909*481dde66SAndroid Build Coastguard WorkerNOTE: This feature should only be used for temporary pain-relief. You still have
1910*481dde66SAndroid Build Coastguard Workerto fix the disabled tests at a later date. As a reminder, GoogleTest will print
1911*481dde66SAndroid Build Coastguard Workera banner warning you if a test program contains any disabled tests.
1912*481dde66SAndroid Build Coastguard Worker
1913*481dde66SAndroid Build Coastguard Worker{: .callout .tip}
1914*481dde66SAndroid Build Coastguard WorkerTIP: You can easily count the number of disabled tests you have using
1915*481dde66SAndroid Build Coastguard Worker`grep`. This number can be used as a metric for
1916*481dde66SAndroid Build Coastguard Workerimproving your test quality.
1917*481dde66SAndroid Build Coastguard Worker
1918*481dde66SAndroid Build Coastguard Worker#### Temporarily Enabling Disabled Tests
1919*481dde66SAndroid Build Coastguard Worker
1920*481dde66SAndroid Build Coastguard WorkerTo include disabled tests in test execution, just invoke the test program with
1921*481dde66SAndroid Build Coastguard Workerthe `--gtest_also_run_disabled_tests` flag or set the
1922*481dde66SAndroid Build Coastguard Worker`GTEST_ALSO_RUN_DISABLED_TESTS` environment variable to a value other than `0`.
1923*481dde66SAndroid Build Coastguard WorkerYou can combine this with the `--gtest_filter` flag to further select which
1924*481dde66SAndroid Build Coastguard Workerdisabled tests to run.
1925*481dde66SAndroid Build Coastguard Worker
1926*481dde66SAndroid Build Coastguard Worker### Repeating the Tests
1927*481dde66SAndroid Build Coastguard Worker
1928*481dde66SAndroid Build Coastguard WorkerOnce in a while you'll run into a test whose result is hit-or-miss. Perhaps it
1929*481dde66SAndroid Build Coastguard Workerwill fail only 1% of the time, making it rather hard to reproduce the bug under
1930*481dde66SAndroid Build Coastguard Workera debugger. This can be a major source of frustration.
1931*481dde66SAndroid Build Coastguard Worker
1932*481dde66SAndroid Build Coastguard WorkerThe `--gtest_repeat` flag allows you to repeat all (or selected) test methods in
1933*481dde66SAndroid Build Coastguard Workera program many times. Hopefully, a flaky test will eventually fail and give you
1934*481dde66SAndroid Build Coastguard Workera chance to debug. Here's how to use it:
1935*481dde66SAndroid Build Coastguard Worker
1936*481dde66SAndroid Build Coastguard Worker```none
1937*481dde66SAndroid Build Coastguard Worker$ foo_test --gtest_repeat=1000
1938*481dde66SAndroid Build Coastguard WorkerRepeat foo_test 1000 times and don't stop at failures.
1939*481dde66SAndroid Build Coastguard Worker
1940*481dde66SAndroid Build Coastguard Worker$ foo_test --gtest_repeat=-1
1941*481dde66SAndroid Build Coastguard WorkerA negative count means repeating forever.
1942*481dde66SAndroid Build Coastguard Worker
1943*481dde66SAndroid Build Coastguard Worker$ foo_test --gtest_repeat=1000 --gtest_break_on_failure
1944*481dde66SAndroid Build Coastguard WorkerRepeat foo_test 1000 times, stopping at the first failure.  This
1945*481dde66SAndroid Build Coastguard Workeris especially useful when running under a debugger: when the test
1946*481dde66SAndroid Build Coastguard Workerfails, it will drop into the debugger and you can then inspect
1947*481dde66SAndroid Build Coastguard Workervariables and stacks.
1948*481dde66SAndroid Build Coastguard Worker
1949*481dde66SAndroid Build Coastguard Worker$ foo_test --gtest_repeat=1000 --gtest_filter=FooBar.*
1950*481dde66SAndroid Build Coastguard WorkerRepeat the tests whose name matches the filter 1000 times.
1951*481dde66SAndroid Build Coastguard Worker```
1952*481dde66SAndroid Build Coastguard Worker
1953*481dde66SAndroid Build Coastguard WorkerIf your test program contains
1954*481dde66SAndroid Build Coastguard Worker[global set-up/tear-down](#global-set-up-and-tear-down) code, it will be
1955*481dde66SAndroid Build Coastguard Workerrepeated in each iteration as well, as the flakiness may be in it. To avoid
1956*481dde66SAndroid Build Coastguard Workerrepeating global set-up/tear-down, specify
1957*481dde66SAndroid Build Coastguard Worker`--gtest_recreate_environments_when_repeating=false`{.nowrap}.
1958*481dde66SAndroid Build Coastguard Worker
1959*481dde66SAndroid Build Coastguard WorkerYou can also specify the repeat count by setting the `GTEST_REPEAT` environment
1960*481dde66SAndroid Build Coastguard Workervariable.
1961*481dde66SAndroid Build Coastguard Worker
1962*481dde66SAndroid Build Coastguard Worker### Shuffling the Tests
1963*481dde66SAndroid Build Coastguard Worker
1964*481dde66SAndroid Build Coastguard WorkerYou can specify the `--gtest_shuffle` flag (or set the `GTEST_SHUFFLE`
1965*481dde66SAndroid Build Coastguard Workerenvironment variable to `1`) to run the tests in a program in a random order.
1966*481dde66SAndroid Build Coastguard WorkerThis helps to reveal bad dependencies between tests.
1967*481dde66SAndroid Build Coastguard Worker
1968*481dde66SAndroid Build Coastguard WorkerBy default, GoogleTest uses a random seed calculated from the current time.
1969*481dde66SAndroid Build Coastguard WorkerTherefore you'll get a different order every time. The console output includes
1970*481dde66SAndroid Build Coastguard Workerthe random seed value, such that you can reproduce an order-related test failure
1971*481dde66SAndroid Build Coastguard Workerlater. To specify the random seed explicitly, use the `--gtest_random_seed=SEED`
1972*481dde66SAndroid Build Coastguard Workerflag (or set the `GTEST_RANDOM_SEED` environment variable), where `SEED` is an
1973*481dde66SAndroid Build Coastguard Workerinteger in the range [0, 99999]. The seed value 0 is special: it tells
1974*481dde66SAndroid Build Coastguard WorkerGoogleTest to do the default behavior of calculating the seed from the current
1975*481dde66SAndroid Build Coastguard Workertime.
1976*481dde66SAndroid Build Coastguard Worker
1977*481dde66SAndroid Build Coastguard WorkerIf you combine this with `--gtest_repeat=N`, GoogleTest will pick a different
1978*481dde66SAndroid Build Coastguard Workerrandom seed and re-shuffle the tests in each iteration.
1979*481dde66SAndroid Build Coastguard Worker
1980*481dde66SAndroid Build Coastguard Worker### Distributing Test Functions to Multiple Machines
1981*481dde66SAndroid Build Coastguard Worker
1982*481dde66SAndroid Build Coastguard WorkerIf you have more than one machine you can use to run a test program, you might
1983*481dde66SAndroid Build Coastguard Workerwant to run the test functions in parallel and get the result faster. We call
1984*481dde66SAndroid Build Coastguard Workerthis technique *sharding*, where each machine is called a *shard*.
1985*481dde66SAndroid Build Coastguard Worker
1986*481dde66SAndroid Build Coastguard WorkerGoogleTest is compatible with test sharding. To take advantage of this feature,
1987*481dde66SAndroid Build Coastguard Workeryour test runner (not part of GoogleTest) needs to do the following:
1988*481dde66SAndroid Build Coastguard Worker
1989*481dde66SAndroid Build Coastguard Worker1.  Allocate a number of machines (shards) to run the tests.
1990*481dde66SAndroid Build Coastguard Worker1.  On each shard, set the `GTEST_TOTAL_SHARDS` environment variable to the total
1991*481dde66SAndroid Build Coastguard Worker    number of shards. It must be the same for all shards.
1992*481dde66SAndroid Build Coastguard Worker1.  On each shard, set the `GTEST_SHARD_INDEX` environment variable to the index
1993*481dde66SAndroid Build Coastguard Worker    of the shard. Different shards must be assigned different indices, which
1994*481dde66SAndroid Build Coastguard Worker    must be in the range `[0, GTEST_TOTAL_SHARDS - 1]`.
1995*481dde66SAndroid Build Coastguard Worker1.  Run the same test program on all shards. When GoogleTest sees the above two
1996*481dde66SAndroid Build Coastguard Worker    environment variables, it will select a subset of the test functions to run.
1997*481dde66SAndroid Build Coastguard Worker    Across all shards, each test function in the program will be run exactly
1998*481dde66SAndroid Build Coastguard Worker    once.
1999*481dde66SAndroid Build Coastguard Worker1.  Wait for all shards to finish, then collect and report the results.
2000*481dde66SAndroid Build Coastguard Worker
2001*481dde66SAndroid Build Coastguard WorkerYour project may have tests that were written without GoogleTest and thus don't
2002*481dde66SAndroid Build Coastguard Workerunderstand this protocol. In order for your test runner to figure out which test
2003*481dde66SAndroid Build Coastguard Workersupports sharding, it can set the environment variable `GTEST_SHARD_STATUS_FILE`
2004*481dde66SAndroid Build Coastguard Workerto a non-existent file path. If a test program supports sharding, it will create
2005*481dde66SAndroid Build Coastguard Workerthis file to acknowledge that fact; otherwise it will not create it. The actual
2006*481dde66SAndroid Build Coastguard Workercontents of the file are not important at this time, although we may put some
2007*481dde66SAndroid Build Coastguard Workeruseful information in it in the future.
2008*481dde66SAndroid Build Coastguard Worker
2009*481dde66SAndroid Build Coastguard WorkerHere's an example to make it clear. Suppose you have a test program `foo_test`
2010*481dde66SAndroid Build Coastguard Workerthat contains the following 5 test functions:
2011*481dde66SAndroid Build Coastguard Worker
2012*481dde66SAndroid Build Coastguard Worker```
2013*481dde66SAndroid Build Coastguard WorkerTEST(A, V)
2014*481dde66SAndroid Build Coastguard WorkerTEST(A, W)
2015*481dde66SAndroid Build Coastguard WorkerTEST(B, X)
2016*481dde66SAndroid Build Coastguard WorkerTEST(B, Y)
2017*481dde66SAndroid Build Coastguard WorkerTEST(B, Z)
2018*481dde66SAndroid Build Coastguard Worker```
2019*481dde66SAndroid Build Coastguard Worker
2020*481dde66SAndroid Build Coastguard WorkerSuppose you have 3 machines at your disposal. To run the test functions in
2021*481dde66SAndroid Build Coastguard Workerparallel, you would set `GTEST_TOTAL_SHARDS` to 3 on all machines, and set
2022*481dde66SAndroid Build Coastguard Worker`GTEST_SHARD_INDEX` to 0, 1, and 2 on the machines respectively. Then you would
2023*481dde66SAndroid Build Coastguard Workerrun the same `foo_test` on each machine.
2024*481dde66SAndroid Build Coastguard Worker
2025*481dde66SAndroid Build Coastguard WorkerGoogleTest reserves the right to change how the work is distributed across the
2026*481dde66SAndroid Build Coastguard Workershards, but here's one possible scenario:
2027*481dde66SAndroid Build Coastguard Worker
2028*481dde66SAndroid Build Coastguard Worker*   Machine #0 runs `A.V` and `B.X`.
2029*481dde66SAndroid Build Coastguard Worker*   Machine #1 runs `A.W` and `B.Y`.
2030*481dde66SAndroid Build Coastguard Worker*   Machine #2 runs `B.Z`.
2031*481dde66SAndroid Build Coastguard Worker
2032*481dde66SAndroid Build Coastguard Worker### Controlling Test Output
2033*481dde66SAndroid Build Coastguard Worker
2034*481dde66SAndroid Build Coastguard Worker#### Colored Terminal Output
2035*481dde66SAndroid Build Coastguard Worker
2036*481dde66SAndroid Build Coastguard WorkerGoogleTest can use colors in its terminal output to make it easier to spot the
2037*481dde66SAndroid Build Coastguard Workerimportant information:
2038*481dde66SAndroid Build Coastguard Worker
2039*481dde66SAndroid Build Coastguard Worker<pre>...
2040*481dde66SAndroid Build Coastguard Worker<font color="green">[----------]</font> 1 test from FooTest
2041*481dde66SAndroid Build Coastguard Worker<font color="green">[ RUN      ]</font> FooTest.DoesAbc
2042*481dde66SAndroid Build Coastguard Worker<font color="green">[       OK ]</font> FooTest.DoesAbc
2043*481dde66SAndroid Build Coastguard Worker<font color="green">[----------]</font> 2 tests from BarTest
2044*481dde66SAndroid Build Coastguard Worker<font color="green">[ RUN      ]</font> BarTest.HasXyzProperty
2045*481dde66SAndroid Build Coastguard Worker<font color="green">[       OK ]</font> BarTest.HasXyzProperty
2046*481dde66SAndroid Build Coastguard Worker<font color="green">[ RUN      ]</font> BarTest.ReturnsTrueOnSuccess
2047*481dde66SAndroid Build Coastguard Worker... some error messages ...
2048*481dde66SAndroid Build Coastguard Worker<font color="red">[   FAILED ]</font> BarTest.ReturnsTrueOnSuccess
2049*481dde66SAndroid Build Coastguard Worker...
2050*481dde66SAndroid Build Coastguard Worker<font color="green">[==========]</font> 30 tests from 14 test suites ran.
2051*481dde66SAndroid Build Coastguard Worker<font color="green">[   PASSED ]</font> 28 tests.
2052*481dde66SAndroid Build Coastguard Worker<font color="red">[   FAILED ]</font> 2 tests, listed below:
2053*481dde66SAndroid Build Coastguard Worker<font color="red">[   FAILED ]</font> BarTest.ReturnsTrueOnSuccess
2054*481dde66SAndroid Build Coastguard Worker<font color="red">[   FAILED ]</font> AnotherTest.DoesXyz
2055*481dde66SAndroid Build Coastguard Worker
2056*481dde66SAndroid Build Coastguard Worker 2 FAILED TESTS
2057*481dde66SAndroid Build Coastguard Worker</pre>
2058*481dde66SAndroid Build Coastguard Worker
2059*481dde66SAndroid Build Coastguard WorkerYou can set the `GTEST_COLOR` environment variable or the `--gtest_color`
2060*481dde66SAndroid Build Coastguard Workercommand line flag to `yes`, `no`, or `auto` (the default) to enable colors,
2061*481dde66SAndroid Build Coastguard Workerdisable colors, or let GoogleTest decide. When the value is `auto`, GoogleTest
2062*481dde66SAndroid Build Coastguard Workerwill use colors if and only if the output goes to a terminal and (on non-Windows
2063*481dde66SAndroid Build Coastguard Workerplatforms) the `TERM` environment variable is set to `xterm` or `xterm-color`.
2064*481dde66SAndroid Build Coastguard Worker
2065*481dde66SAndroid Build Coastguard Worker#### Suppressing test passes
2066*481dde66SAndroid Build Coastguard Worker
2067*481dde66SAndroid Build Coastguard WorkerBy default, GoogleTest prints 1 line of output for each test, indicating if it
2068*481dde66SAndroid Build Coastguard Workerpassed or failed. To show only test failures, run the test program with
2069*481dde66SAndroid Build Coastguard Worker`--gtest_brief=1`, or set the GTEST_BRIEF environment variable to `1`.
2070*481dde66SAndroid Build Coastguard Worker
2071*481dde66SAndroid Build Coastguard Worker#### Suppressing the Elapsed Time
2072*481dde66SAndroid Build Coastguard Worker
2073*481dde66SAndroid Build Coastguard WorkerBy default, GoogleTest prints the time it takes to run each test. To disable
2074*481dde66SAndroid Build Coastguard Workerthat, run the test program with the `--gtest_print_time=0` command line flag, or
2075*481dde66SAndroid Build Coastguard Workerset the GTEST_PRINT_TIME environment variable to `0`.
2076*481dde66SAndroid Build Coastguard Worker
2077*481dde66SAndroid Build Coastguard Worker#### Suppressing UTF-8 Text Output
2078*481dde66SAndroid Build Coastguard Worker
2079*481dde66SAndroid Build Coastguard WorkerIn case of assertion failures, GoogleTest prints expected and actual values of
2080*481dde66SAndroid Build Coastguard Workertype `string` both as hex-encoded strings as well as in readable UTF-8 text if
2081*481dde66SAndroid Build Coastguard Workerthey contain valid non-ASCII UTF-8 characters. If you want to suppress the UTF-8
2082*481dde66SAndroid Build Coastguard Workertext because, for example, you don't have an UTF-8 compatible output medium, run
2083*481dde66SAndroid Build Coastguard Workerthe test program with `--gtest_print_utf8=0` or set the `GTEST_PRINT_UTF8`
2084*481dde66SAndroid Build Coastguard Workerenvironment variable to `0`.
2085*481dde66SAndroid Build Coastguard Worker
2086*481dde66SAndroid Build Coastguard Worker#### Generating an XML Report
2087*481dde66SAndroid Build Coastguard Worker
2088*481dde66SAndroid Build Coastguard WorkerGoogleTest can emit a detailed XML report to a file in addition to its normal
2089*481dde66SAndroid Build Coastguard Workertextual output. The report contains the duration of each test, and thus can help
2090*481dde66SAndroid Build Coastguard Workeryou identify slow tests.
2091*481dde66SAndroid Build Coastguard Worker
2092*481dde66SAndroid Build Coastguard WorkerTo generate the XML report, set the `GTEST_OUTPUT` environment variable or the
2093*481dde66SAndroid Build Coastguard Worker`--gtest_output` flag to the string `"xml:path_to_output_file"`, which will
2094*481dde66SAndroid Build Coastguard Workercreate the file at the given location. You can also just use the string `"xml"`,
2095*481dde66SAndroid Build Coastguard Workerin which case the output can be found in the `test_detail.xml` file in the
2096*481dde66SAndroid Build Coastguard Workercurrent directory.
2097*481dde66SAndroid Build Coastguard Worker
2098*481dde66SAndroid Build Coastguard WorkerIf you specify a directory (for example, `"xml:output/directory/"` on Linux or
2099*481dde66SAndroid Build Coastguard Worker`"xml:output\directory\"` on Windows), GoogleTest will create the XML file in
2100*481dde66SAndroid Build Coastguard Workerthat directory, named after the test executable (e.g. `foo_test.xml` for test
2101*481dde66SAndroid Build Coastguard Workerprogram `foo_test` or `foo_test.exe`). If the file already exists (perhaps left
2102*481dde66SAndroid Build Coastguard Workerover from a previous run), GoogleTest will pick a different name (e.g.
2103*481dde66SAndroid Build Coastguard Worker`foo_test_1.xml`) to avoid overwriting it.
2104*481dde66SAndroid Build Coastguard Worker
2105*481dde66SAndroid Build Coastguard WorkerThe report is based on the `junitreport` Ant task. Since that format was
2106*481dde66SAndroid Build Coastguard Workeroriginally intended for Java, a little interpretation is required to make it
2107*481dde66SAndroid Build Coastguard Workerapply to GoogleTest tests, as shown here:
2108*481dde66SAndroid Build Coastguard Worker
2109*481dde66SAndroid Build Coastguard Worker```xml
2110*481dde66SAndroid Build Coastguard Worker<testsuites name="AllTests" ...>
2111*481dde66SAndroid Build Coastguard Worker  <testsuite name="test_case_name" ...>
2112*481dde66SAndroid Build Coastguard Worker    <testcase    name="test_name" ...>
2113*481dde66SAndroid Build Coastguard Worker      <failure message="..."/>
2114*481dde66SAndroid Build Coastguard Worker      <failure message="..."/>
2115*481dde66SAndroid Build Coastguard Worker      <failure message="..."/>
2116*481dde66SAndroid Build Coastguard Worker    </testcase>
2117*481dde66SAndroid Build Coastguard Worker  </testsuite>
2118*481dde66SAndroid Build Coastguard Worker</testsuites>
2119*481dde66SAndroid Build Coastguard Worker```
2120*481dde66SAndroid Build Coastguard Worker
2121*481dde66SAndroid Build Coastguard Worker*   The root `<testsuites>` element corresponds to the entire test program.
2122*481dde66SAndroid Build Coastguard Worker*   `<testsuite>` elements correspond to GoogleTest test suites.
2123*481dde66SAndroid Build Coastguard Worker*   `<testcase>` elements correspond to GoogleTest test functions.
2124*481dde66SAndroid Build Coastguard Worker
2125*481dde66SAndroid Build Coastguard WorkerFor instance, the following program
2126*481dde66SAndroid Build Coastguard Worker
2127*481dde66SAndroid Build Coastguard Worker```c++
2128*481dde66SAndroid Build Coastguard WorkerTEST(MathTest, Addition) { ... }
2129*481dde66SAndroid Build Coastguard WorkerTEST(MathTest, Subtraction) { ... }
2130*481dde66SAndroid Build Coastguard WorkerTEST(LogicTest, NonContradiction) { ... }
2131*481dde66SAndroid Build Coastguard Worker```
2132*481dde66SAndroid Build Coastguard Worker
2133*481dde66SAndroid Build Coastguard Workercould generate this report:
2134*481dde66SAndroid Build Coastguard Worker
2135*481dde66SAndroid Build Coastguard Worker```xml
2136*481dde66SAndroid Build Coastguard Worker<?xml version="1.0" encoding="UTF-8"?>
2137*481dde66SAndroid Build Coastguard Worker<testsuites tests="3" failures="1" errors="0" time="0.035" timestamp="2011-10-31T18:52:42" name="AllTests">
2138*481dde66SAndroid Build Coastguard Worker  <testsuite name="MathTest" tests="2" failures="1" errors="0" time="0.015">
2139*481dde66SAndroid Build Coastguard Worker    <testcase name="Addition" file="test.cpp" line="1" status="run" time="0.007" classname="">
2140*481dde66SAndroid Build Coastguard Worker      <failure message="Value of: add(1, 1)&#x0A;  Actual: 3&#x0A;Expected: 2" type="">...</failure>
2141*481dde66SAndroid Build Coastguard Worker      <failure message="Value of: add(1, -1)&#x0A;  Actual: 1&#x0A;Expected: 0" type="">...</failure>
2142*481dde66SAndroid Build Coastguard Worker    </testcase>
2143*481dde66SAndroid Build Coastguard Worker    <testcase name="Subtraction" file="test.cpp" line="2" status="run" time="0.005" classname="">
2144*481dde66SAndroid Build Coastguard Worker    </testcase>
2145*481dde66SAndroid Build Coastguard Worker  </testsuite>
2146*481dde66SAndroid Build Coastguard Worker  <testsuite name="LogicTest" tests="1" failures="0" errors="0" time="0.005">
2147*481dde66SAndroid Build Coastguard Worker    <testcase name="NonContradiction" file="test.cpp" line="3" status="run" time="0.005" classname="">
2148*481dde66SAndroid Build Coastguard Worker    </testcase>
2149*481dde66SAndroid Build Coastguard Worker  </testsuite>
2150*481dde66SAndroid Build Coastguard Worker</testsuites>
2151*481dde66SAndroid Build Coastguard Worker```
2152*481dde66SAndroid Build Coastguard Worker
2153*481dde66SAndroid Build Coastguard WorkerThings to note:
2154*481dde66SAndroid Build Coastguard Worker
2155*481dde66SAndroid Build Coastguard Worker*   The `tests` attribute of a `<testsuites>` or `<testsuite>` element tells how
2156*481dde66SAndroid Build Coastguard Worker    many test functions the GoogleTest program or test suite contains, while the
2157*481dde66SAndroid Build Coastguard Worker    `failures` attribute tells how many of them failed.
2158*481dde66SAndroid Build Coastguard Worker
2159*481dde66SAndroid Build Coastguard Worker*   The `time` attribute expresses the duration of the test, test suite, or
2160*481dde66SAndroid Build Coastguard Worker    entire test program in seconds.
2161*481dde66SAndroid Build Coastguard Worker
2162*481dde66SAndroid Build Coastguard Worker*   The `timestamp` attribute records the local date and time of the test
2163*481dde66SAndroid Build Coastguard Worker    execution.
2164*481dde66SAndroid Build Coastguard Worker
2165*481dde66SAndroid Build Coastguard Worker*   The `file` and `line` attributes record the source file location, where the
2166*481dde66SAndroid Build Coastguard Worker    test was defined.
2167*481dde66SAndroid Build Coastguard Worker
2168*481dde66SAndroid Build Coastguard Worker*   Each `<failure>` element corresponds to a single failed GoogleTest
2169*481dde66SAndroid Build Coastguard Worker    assertion.
2170*481dde66SAndroid Build Coastguard Worker
2171*481dde66SAndroid Build Coastguard Worker#### Generating a JSON Report
2172*481dde66SAndroid Build Coastguard Worker
2173*481dde66SAndroid Build Coastguard WorkerGoogleTest can also emit a JSON report as an alternative format to XML. To
2174*481dde66SAndroid Build Coastguard Workergenerate the JSON report, set the `GTEST_OUTPUT` environment variable or the
2175*481dde66SAndroid Build Coastguard Worker`--gtest_output` flag to the string `"json:path_to_output_file"`, which will
2176*481dde66SAndroid Build Coastguard Workercreate the file at the given location. You can also just use the string
2177*481dde66SAndroid Build Coastguard Worker`"json"`, in which case the output can be found in the `test_detail.json` file
2178*481dde66SAndroid Build Coastguard Workerin the current directory.
2179*481dde66SAndroid Build Coastguard Worker
2180*481dde66SAndroid Build Coastguard WorkerThe report format conforms to the following JSON Schema:
2181*481dde66SAndroid Build Coastguard Worker
2182*481dde66SAndroid Build Coastguard Worker```json
2183*481dde66SAndroid Build Coastguard Worker{
2184*481dde66SAndroid Build Coastguard Worker  "$schema": "https://json-schema.org/schema#",
2185*481dde66SAndroid Build Coastguard Worker  "type": "object",
2186*481dde66SAndroid Build Coastguard Worker  "definitions": {
2187*481dde66SAndroid Build Coastguard Worker    "TestCase": {
2188*481dde66SAndroid Build Coastguard Worker      "type": "object",
2189*481dde66SAndroid Build Coastguard Worker      "properties": {
2190*481dde66SAndroid Build Coastguard Worker        "name": { "type": "string" },
2191*481dde66SAndroid Build Coastguard Worker        "tests": { "type": "integer" },
2192*481dde66SAndroid Build Coastguard Worker        "failures": { "type": "integer" },
2193*481dde66SAndroid Build Coastguard Worker        "disabled": { "type": "integer" },
2194*481dde66SAndroid Build Coastguard Worker        "time": { "type": "string" },
2195*481dde66SAndroid Build Coastguard Worker        "testsuite": {
2196*481dde66SAndroid Build Coastguard Worker          "type": "array",
2197*481dde66SAndroid Build Coastguard Worker          "items": {
2198*481dde66SAndroid Build Coastguard Worker            "$ref": "#/definitions/TestInfo"
2199*481dde66SAndroid Build Coastguard Worker          }
2200*481dde66SAndroid Build Coastguard Worker        }
2201*481dde66SAndroid Build Coastguard Worker      }
2202*481dde66SAndroid Build Coastguard Worker    },
2203*481dde66SAndroid Build Coastguard Worker    "TestInfo": {
2204*481dde66SAndroid Build Coastguard Worker      "type": "object",
2205*481dde66SAndroid Build Coastguard Worker      "properties": {
2206*481dde66SAndroid Build Coastguard Worker        "name": { "type": "string" },
2207*481dde66SAndroid Build Coastguard Worker        "file": { "type": "string" },
2208*481dde66SAndroid Build Coastguard Worker        "line": { "type": "integer" },
2209*481dde66SAndroid Build Coastguard Worker        "status": {
2210*481dde66SAndroid Build Coastguard Worker          "type": "string",
2211*481dde66SAndroid Build Coastguard Worker          "enum": ["RUN", "NOTRUN"]
2212*481dde66SAndroid Build Coastguard Worker        },
2213*481dde66SAndroid Build Coastguard Worker        "time": { "type": "string" },
2214*481dde66SAndroid Build Coastguard Worker        "classname": { "type": "string" },
2215*481dde66SAndroid Build Coastguard Worker        "failures": {
2216*481dde66SAndroid Build Coastguard Worker          "type": "array",
2217*481dde66SAndroid Build Coastguard Worker          "items": {
2218*481dde66SAndroid Build Coastguard Worker            "$ref": "#/definitions/Failure"
2219*481dde66SAndroid Build Coastguard Worker          }
2220*481dde66SAndroid Build Coastguard Worker        }
2221*481dde66SAndroid Build Coastguard Worker      }
2222*481dde66SAndroid Build Coastguard Worker    },
2223*481dde66SAndroid Build Coastguard Worker    "Failure": {
2224*481dde66SAndroid Build Coastguard Worker      "type": "object",
2225*481dde66SAndroid Build Coastguard Worker      "properties": {
2226*481dde66SAndroid Build Coastguard Worker        "failures": { "type": "string" },
2227*481dde66SAndroid Build Coastguard Worker        "type": { "type": "string" }
2228*481dde66SAndroid Build Coastguard Worker      }
2229*481dde66SAndroid Build Coastguard Worker    }
2230*481dde66SAndroid Build Coastguard Worker  },
2231*481dde66SAndroid Build Coastguard Worker  "properties": {
2232*481dde66SAndroid Build Coastguard Worker    "tests": { "type": "integer" },
2233*481dde66SAndroid Build Coastguard Worker    "failures": { "type": "integer" },
2234*481dde66SAndroid Build Coastguard Worker    "disabled": { "type": "integer" },
2235*481dde66SAndroid Build Coastguard Worker    "errors": { "type": "integer" },
2236*481dde66SAndroid Build Coastguard Worker    "timestamp": {
2237*481dde66SAndroid Build Coastguard Worker      "type": "string",
2238*481dde66SAndroid Build Coastguard Worker      "format": "date-time"
2239*481dde66SAndroid Build Coastguard Worker    },
2240*481dde66SAndroid Build Coastguard Worker    "time": { "type": "string" },
2241*481dde66SAndroid Build Coastguard Worker    "name": { "type": "string" },
2242*481dde66SAndroid Build Coastguard Worker    "testsuites": {
2243*481dde66SAndroid Build Coastguard Worker      "type": "array",
2244*481dde66SAndroid Build Coastguard Worker      "items": {
2245*481dde66SAndroid Build Coastguard Worker        "$ref": "#/definitions/TestCase"
2246*481dde66SAndroid Build Coastguard Worker      }
2247*481dde66SAndroid Build Coastguard Worker    }
2248*481dde66SAndroid Build Coastguard Worker  }
2249*481dde66SAndroid Build Coastguard Worker}
2250*481dde66SAndroid Build Coastguard Worker```
2251*481dde66SAndroid Build Coastguard Worker
2252*481dde66SAndroid Build Coastguard WorkerThe report uses the format that conforms to the following Proto3 using the
2253*481dde66SAndroid Build Coastguard Worker[JSON encoding](https://developers.google.com/protocol-buffers/docs/proto3#json):
2254*481dde66SAndroid Build Coastguard Worker
2255*481dde66SAndroid Build Coastguard Worker```proto
2256*481dde66SAndroid Build Coastguard Workersyntax = "proto3";
2257*481dde66SAndroid Build Coastguard Worker
2258*481dde66SAndroid Build Coastguard Workerpackage googletest;
2259*481dde66SAndroid Build Coastguard Worker
2260*481dde66SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto";
2261*481dde66SAndroid Build Coastguard Workerimport "google/protobuf/duration.proto";
2262*481dde66SAndroid Build Coastguard Worker
2263*481dde66SAndroid Build Coastguard Workermessage UnitTest {
2264*481dde66SAndroid Build Coastguard Worker  int32 tests = 1;
2265*481dde66SAndroid Build Coastguard Worker  int32 failures = 2;
2266*481dde66SAndroid Build Coastguard Worker  int32 disabled = 3;
2267*481dde66SAndroid Build Coastguard Worker  int32 errors = 4;
2268*481dde66SAndroid Build Coastguard Worker  google.protobuf.Timestamp timestamp = 5;
2269*481dde66SAndroid Build Coastguard Worker  google.protobuf.Duration time = 6;
2270*481dde66SAndroid Build Coastguard Worker  string name = 7;
2271*481dde66SAndroid Build Coastguard Worker  repeated TestCase testsuites = 8;
2272*481dde66SAndroid Build Coastguard Worker}
2273*481dde66SAndroid Build Coastguard Worker
2274*481dde66SAndroid Build Coastguard Workermessage TestCase {
2275*481dde66SAndroid Build Coastguard Worker  string name = 1;
2276*481dde66SAndroid Build Coastguard Worker  int32 tests = 2;
2277*481dde66SAndroid Build Coastguard Worker  int32 failures = 3;
2278*481dde66SAndroid Build Coastguard Worker  int32 disabled = 4;
2279*481dde66SAndroid Build Coastguard Worker  int32 errors = 5;
2280*481dde66SAndroid Build Coastguard Worker  google.protobuf.Duration time = 6;
2281*481dde66SAndroid Build Coastguard Worker  repeated TestInfo testsuite = 7;
2282*481dde66SAndroid Build Coastguard Worker}
2283*481dde66SAndroid Build Coastguard Worker
2284*481dde66SAndroid Build Coastguard Workermessage TestInfo {
2285*481dde66SAndroid Build Coastguard Worker  string name = 1;
2286*481dde66SAndroid Build Coastguard Worker  string file = 6;
2287*481dde66SAndroid Build Coastguard Worker  int32 line = 7;
2288*481dde66SAndroid Build Coastguard Worker  enum Status {
2289*481dde66SAndroid Build Coastguard Worker    RUN = 0;
2290*481dde66SAndroid Build Coastguard Worker    NOTRUN = 1;
2291*481dde66SAndroid Build Coastguard Worker  }
2292*481dde66SAndroid Build Coastguard Worker  Status status = 2;
2293*481dde66SAndroid Build Coastguard Worker  google.protobuf.Duration time = 3;
2294*481dde66SAndroid Build Coastguard Worker  string classname = 4;
2295*481dde66SAndroid Build Coastguard Worker  message Failure {
2296*481dde66SAndroid Build Coastguard Worker    string failures = 1;
2297*481dde66SAndroid Build Coastguard Worker    string type = 2;
2298*481dde66SAndroid Build Coastguard Worker  }
2299*481dde66SAndroid Build Coastguard Worker  repeated Failure failures = 5;
2300*481dde66SAndroid Build Coastguard Worker}
2301*481dde66SAndroid Build Coastguard Worker```
2302*481dde66SAndroid Build Coastguard Worker
2303*481dde66SAndroid Build Coastguard WorkerFor instance, the following program
2304*481dde66SAndroid Build Coastguard Worker
2305*481dde66SAndroid Build Coastguard Worker```c++
2306*481dde66SAndroid Build Coastguard WorkerTEST(MathTest, Addition) { ... }
2307*481dde66SAndroid Build Coastguard WorkerTEST(MathTest, Subtraction) { ... }
2308*481dde66SAndroid Build Coastguard WorkerTEST(LogicTest, NonContradiction) { ... }
2309*481dde66SAndroid Build Coastguard Worker```
2310*481dde66SAndroid Build Coastguard Worker
2311*481dde66SAndroid Build Coastguard Workercould generate this report:
2312*481dde66SAndroid Build Coastguard Worker
2313*481dde66SAndroid Build Coastguard Worker```json
2314*481dde66SAndroid Build Coastguard Worker{
2315*481dde66SAndroid Build Coastguard Worker  "tests": 3,
2316*481dde66SAndroid Build Coastguard Worker  "failures": 1,
2317*481dde66SAndroid Build Coastguard Worker  "errors": 0,
2318*481dde66SAndroid Build Coastguard Worker  "time": "0.035s",
2319*481dde66SAndroid Build Coastguard Worker  "timestamp": "2011-10-31T18:52:42Z",
2320*481dde66SAndroid Build Coastguard Worker  "name": "AllTests",
2321*481dde66SAndroid Build Coastguard Worker  "testsuites": [
2322*481dde66SAndroid Build Coastguard Worker    {
2323*481dde66SAndroid Build Coastguard Worker      "name": "MathTest",
2324*481dde66SAndroid Build Coastguard Worker      "tests": 2,
2325*481dde66SAndroid Build Coastguard Worker      "failures": 1,
2326*481dde66SAndroid Build Coastguard Worker      "errors": 0,
2327*481dde66SAndroid Build Coastguard Worker      "time": "0.015s",
2328*481dde66SAndroid Build Coastguard Worker      "testsuite": [
2329*481dde66SAndroid Build Coastguard Worker        {
2330*481dde66SAndroid Build Coastguard Worker          "name": "Addition",
2331*481dde66SAndroid Build Coastguard Worker          "file": "test.cpp",
2332*481dde66SAndroid Build Coastguard Worker          "line": 1,
2333*481dde66SAndroid Build Coastguard Worker          "status": "RUN",
2334*481dde66SAndroid Build Coastguard Worker          "time": "0.007s",
2335*481dde66SAndroid Build Coastguard Worker          "classname": "",
2336*481dde66SAndroid Build Coastguard Worker          "failures": [
2337*481dde66SAndroid Build Coastguard Worker            {
2338*481dde66SAndroid Build Coastguard Worker              "message": "Value of: add(1, 1)\n  Actual: 3\nExpected: 2",
2339*481dde66SAndroid Build Coastguard Worker              "type": ""
2340*481dde66SAndroid Build Coastguard Worker            },
2341*481dde66SAndroid Build Coastguard Worker            {
2342*481dde66SAndroid Build Coastguard Worker              "message": "Value of: add(1, -1)\n  Actual: 1\nExpected: 0",
2343*481dde66SAndroid Build Coastguard Worker              "type": ""
2344*481dde66SAndroid Build Coastguard Worker            }
2345*481dde66SAndroid Build Coastguard Worker          ]
2346*481dde66SAndroid Build Coastguard Worker        },
2347*481dde66SAndroid Build Coastguard Worker        {
2348*481dde66SAndroid Build Coastguard Worker          "name": "Subtraction",
2349*481dde66SAndroid Build Coastguard Worker          "file": "test.cpp",
2350*481dde66SAndroid Build Coastguard Worker          "line": 2,
2351*481dde66SAndroid Build Coastguard Worker          "status": "RUN",
2352*481dde66SAndroid Build Coastguard Worker          "time": "0.005s",
2353*481dde66SAndroid Build Coastguard Worker          "classname": ""
2354*481dde66SAndroid Build Coastguard Worker        }
2355*481dde66SAndroid Build Coastguard Worker      ]
2356*481dde66SAndroid Build Coastguard Worker    },
2357*481dde66SAndroid Build Coastguard Worker    {
2358*481dde66SAndroid Build Coastguard Worker      "name": "LogicTest",
2359*481dde66SAndroid Build Coastguard Worker      "tests": 1,
2360*481dde66SAndroid Build Coastguard Worker      "failures": 0,
2361*481dde66SAndroid Build Coastguard Worker      "errors": 0,
2362*481dde66SAndroid Build Coastguard Worker      "time": "0.005s",
2363*481dde66SAndroid Build Coastguard Worker      "testsuite": [
2364*481dde66SAndroid Build Coastguard Worker        {
2365*481dde66SAndroid Build Coastguard Worker          "name": "NonContradiction",
2366*481dde66SAndroid Build Coastguard Worker          "file": "test.cpp",
2367*481dde66SAndroid Build Coastguard Worker          "line": 3,
2368*481dde66SAndroid Build Coastguard Worker          "status": "RUN",
2369*481dde66SAndroid Build Coastguard Worker          "time": "0.005s",
2370*481dde66SAndroid Build Coastguard Worker          "classname": ""
2371*481dde66SAndroid Build Coastguard Worker        }
2372*481dde66SAndroid Build Coastguard Worker      ]
2373*481dde66SAndroid Build Coastguard Worker    }
2374*481dde66SAndroid Build Coastguard Worker  ]
2375*481dde66SAndroid Build Coastguard Worker}
2376*481dde66SAndroid Build Coastguard Worker```
2377*481dde66SAndroid Build Coastguard Worker
2378*481dde66SAndroid Build Coastguard Worker{: .callout .important}
2379*481dde66SAndroid Build Coastguard WorkerIMPORTANT: The exact format of the JSON document is subject to change.
2380*481dde66SAndroid Build Coastguard Worker
2381*481dde66SAndroid Build Coastguard Worker### Controlling How Failures Are Reported
2382*481dde66SAndroid Build Coastguard Worker
2383*481dde66SAndroid Build Coastguard Worker#### Detecting Test Premature Exit
2384*481dde66SAndroid Build Coastguard Worker
2385*481dde66SAndroid Build Coastguard WorkerGoogle Test implements the _premature-exit-file_ protocol for test runners to
2386*481dde66SAndroid Build Coastguard Workercatch any kind of unexpected exits of test programs. Upon start, Google Test
2387*481dde66SAndroid Build Coastguard Workercreates the file which will be automatically deleted after all work has been
2388*481dde66SAndroid Build Coastguard Workerfinished. Then, the test runner can check if this file exists. In case the file
2389*481dde66SAndroid Build Coastguard Workerremains undeleted, the inspected test has exited prematurely.
2390*481dde66SAndroid Build Coastguard Worker
2391*481dde66SAndroid Build Coastguard WorkerThis feature is enabled only if the `TEST_PREMATURE_EXIT_FILE` environment
2392*481dde66SAndroid Build Coastguard Workervariable has been set.
2393*481dde66SAndroid Build Coastguard Worker
2394*481dde66SAndroid Build Coastguard Worker#### Turning Assertion Failures into Break-Points
2395*481dde66SAndroid Build Coastguard Worker
2396*481dde66SAndroid Build Coastguard WorkerWhen running test programs under a debugger, it's very convenient if the
2397*481dde66SAndroid Build Coastguard Workerdebugger can catch an assertion failure and automatically drop into interactive
2398*481dde66SAndroid Build Coastguard Workermode. GoogleTest's *break-on-failure* mode supports this behavior.
2399*481dde66SAndroid Build Coastguard Worker
2400*481dde66SAndroid Build Coastguard WorkerTo enable it, set the `GTEST_BREAK_ON_FAILURE` environment variable to a value
2401*481dde66SAndroid Build Coastguard Workerother than `0`. Alternatively, you can use the `--gtest_break_on_failure`
2402*481dde66SAndroid Build Coastguard Workercommand line flag.
2403*481dde66SAndroid Build Coastguard Worker
2404*481dde66SAndroid Build Coastguard Worker#### Disabling Catching Test-Thrown Exceptions
2405*481dde66SAndroid Build Coastguard Worker
2406*481dde66SAndroid Build Coastguard WorkerGoogleTest can be used either with or without exceptions enabled. If a test
2407*481dde66SAndroid Build Coastguard Workerthrows a C++ exception or (on Windows) a structured exception (SEH), by default
2408*481dde66SAndroid Build Coastguard WorkerGoogleTest catches it, reports it as a test failure, and continues with the next
2409*481dde66SAndroid Build Coastguard Workertest method. This maximizes the coverage of a test run. Also, on Windows an
2410*481dde66SAndroid Build Coastguard Workeruncaught exception will cause a pop-up window, so catching the exceptions allows
2411*481dde66SAndroid Build Coastguard Workeryou to run the tests automatically.
2412*481dde66SAndroid Build Coastguard Worker
2413*481dde66SAndroid Build Coastguard WorkerWhen debugging the test failures, however, you may instead want the exceptions
2414*481dde66SAndroid Build Coastguard Workerto be handled by the debugger, such that you can examine the call stack when an
2415*481dde66SAndroid Build Coastguard Workerexception is thrown. To achieve that, set the `GTEST_CATCH_EXCEPTIONS`
2416*481dde66SAndroid Build Coastguard Workerenvironment variable to `0`, or use the `--gtest_catch_exceptions=0` flag when
2417*481dde66SAndroid Build Coastguard Workerrunning the tests.
2418*481dde66SAndroid Build Coastguard Worker
2419*481dde66SAndroid Build Coastguard Worker### Sanitizer Integration
2420*481dde66SAndroid Build Coastguard Worker
2421*481dde66SAndroid Build Coastguard WorkerThe
2422*481dde66SAndroid Build Coastguard Worker[Undefined Behavior Sanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html),
2423*481dde66SAndroid Build Coastguard Worker[Address Sanitizer](https://github.com/google/sanitizers/wiki/AddressSanitizer),
2424*481dde66SAndroid Build Coastguard Workerand
2425*481dde66SAndroid Build Coastguard Worker[Thread Sanitizer](https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual)
2426*481dde66SAndroid Build Coastguard Workerall provide weak functions that you can override to trigger explicit failures
2427*481dde66SAndroid Build Coastguard Workerwhen they detect sanitizer errors, such as creating a reference from `nullptr`.
2428*481dde66SAndroid Build Coastguard WorkerTo override these functions, place definitions for them in a source file that
2429*481dde66SAndroid Build Coastguard Workeryou compile as part of your main binary:
2430*481dde66SAndroid Build Coastguard Worker
2431*481dde66SAndroid Build Coastguard Worker```
2432*481dde66SAndroid Build Coastguard Workerextern "C" {
2433*481dde66SAndroid Build Coastguard Workervoid __ubsan_on_report() {
2434*481dde66SAndroid Build Coastguard Worker  FAIL() << "Encountered an undefined behavior sanitizer error";
2435*481dde66SAndroid Build Coastguard Worker}
2436*481dde66SAndroid Build Coastguard Workervoid __asan_on_error() {
2437*481dde66SAndroid Build Coastguard Worker  FAIL() << "Encountered an address sanitizer error";
2438*481dde66SAndroid Build Coastguard Worker}
2439*481dde66SAndroid Build Coastguard Workervoid __tsan_on_report() {
2440*481dde66SAndroid Build Coastguard Worker  FAIL() << "Encountered a thread sanitizer error";
2441*481dde66SAndroid Build Coastguard Worker}
2442*481dde66SAndroid Build Coastguard Worker}  // extern "C"
2443*481dde66SAndroid Build Coastguard Worker```
2444*481dde66SAndroid Build Coastguard Worker
2445*481dde66SAndroid Build Coastguard WorkerAfter compiling your project with one of the sanitizers enabled, if a particular
2446*481dde66SAndroid Build Coastguard Workertest triggers a sanitizer error, GoogleTest will report that it failed.
2447