1 /**
2 Copyright: Copyright (c) 2018, Joakim Brännström. All rights reserved.
3 License: MPL-2
4 Author: Joakim Brännström (joakim.brannstrom@gmx.com)
5 
6 This Source Code Form is subject to the terms of the Mozilla Public License,
7 v.2.0. If a copy of the MPL was not distributed with this file, You can obtain
8 one at http://mozilla.org/MPL/2.0/.
9 
10 #SPC-track_gtest
11 */
12 module dextool.plugin.mutate.backend.test_mutant.gtest_post_analyze;
13 
14 import logger = std.experimental.logger;
15 import std.array : empty;
16 import std.exception : collectException;
17 import std.range : isInputRange, isOutputRange;
18 
19 import my.set;
20 
21 import dextool.plugin.mutate.backend.test_mutant.test_case_analyze : GatherTestCase;
22 import dextool.plugin.mutate.backend.type : TestCase;
23 import dextool.type : AbsolutePath;
24 
25 /** Parse input for google test cases.
26 Params:
27     r = range that is chunked by line
28     sink = an output that accepts values of type TestCase via `put`.
29   */
30 struct GtestParser {
31     import std.regex : regex, matchFirst, matchAll;
32 
33     private {
34         // example: [==========] Running
35         const re_delim = regex(`.*?\[=*\]`);
36         // example: [ RUN      ] PassingTest.PassingTest1
37         // example: +ull)m[ RUN      ] ADeathTest.ShouldRunFirst
38         const re_run_block = regex(`.*?\[\s*RUN\s*\]\s*(?P<tc>[a-zA-Z0-9_./]*)`);
39         // example: [  FAILED  ] NonfatalFailureTest.EscapesStringOperands
40         const re_failed_block = regex(`.*?\[\s*FAILED\s*\]\s*(?P<tc>[a-zA-Z0-9_./]*)`);
41 
42         StateData data;
43     }
44 
45     private string testCaseName(string testCase) @safe pure nothrow const @nogc {
46         import std..string : lastIndexOf;
47 
48         // pessimistic merge of test case names such that parameterized are
49         // grouped by their last separation.
50 
51         try {
52             const idx = lastIndexOf(testCase, '/');
53 
54             if (idx == -1) {
55                 return testCase;
56             }
57             return testCase[0 .. idx];
58         } catch (Exception e) {
59         }
60 
61         return testCase;
62     }
63 
64     void process(T)(T line, ref GatherTestCase report) {
65         auto run_block_match = matchAll(line, re_run_block);
66         auto failed_block_match = matchAll(line, re_failed_block);
67         auto delim_match = matchFirst(line, re_delim);
68         data.hasRunBlock = !run_block_match.empty;
69         data.hasFailedBlock = !failed_block_match.empty;
70         data.hasDelim = !delim_match.empty;
71 
72         if (data.hasDelim) {
73             final switch (data.delim) {
74             case DelimState.unknown:
75                 data.delim = DelimState.start;
76                 break;
77             case DelimState.start:
78                 data.delim = DelimState.stop;
79                 break;
80             case DelimState.stop:
81                 data.delim = DelimState.start;
82                 data.last_run = null;
83                 break;
84             }
85         }
86 
87         if (data.hasRunBlock && data.delim == DelimState.stop && !data.last_run.empty) {
88             /// Last test that was executed in a RUN block segfaulted.
89             report.reportFailed(TestCase(testCaseName(data.last_run), data.fail_msg_file));
90         }
91 
92         if (data.hasRunBlock) {
93             // force it to a start so failed messages can be found
94             data.delim = DelimState.start;
95 
96             foreach (m; run_block_match) {
97                 data.last_run = m["tc"].idup;
98                 report.reportFound(TestCase(testCaseName(data.last_run)));
99             }
100         }
101 
102         if (data.hasFailedBlock && data.delim == DelimState.start) {
103             foreach (m; failed_block_match) {
104                 if (m["tc"].length == 0)
105                     continue;
106                 report.reportFailed(TestCase(testCaseName(m["tc"].idup), data.fail_msg_file));
107                 // the best we can do for now is for the first failed test case.
108                 // May improve in the future.
109             }
110             data.fail_msg_file = null;
111             data.last_run = null;
112         }
113     }
114 
115     void finalize(ref GatherTestCase report) @safe nothrow {
116         final switch (data.delim) {
117         case DelimState.unknown:
118             goto case;
119         case DelimState.start:
120             if (!data.last_run.empty) {
121                 report.reportFailed(TestCase(testCaseName(data.last_run), data.fail_msg_file));
122             }
123             break;
124         case DelimState.stop:
125             break;
126         }
127 
128         data.last_run = null;
129     }
130 }
131 
132 version (unittest) {
133 } else {
134 private:
135 }
136 
137 // Determine what type of delimiter that where last found.
138 enum DelimState {
139     unknown,
140     start,
141     stop,
142 }
143 
144 struct StateData {
145     DelimState delim;
146 
147     string fail_msg_file;
148     string last_run;
149 
150     /// The line contains a [======] block.
151     bool hasDelim;
152     /// The line contains a [ RUN   ] block.
153     bool hasRunBlock;
154     /// the line contains a [ FAILED  ] block.
155     bool hasFailedBlock;
156     /// the line contains a [ OK   ] block.
157     bool hasOkBlock;
158 }
159 
160 version (unittest) {
161     import std.algorithm : each, sort;
162     import std.array : array;
163     import std.file : getcwd;
164     import unit_threaded : shouldEqual, shouldBeIn;
165 }
166 
167 @("shall report the failed test case")
168 unittest {
169     GatherTestCase app;
170 
171     GtestParser parser;
172     testData1.each!(a => parser.process(a, app));
173 
174     shouldEqual(app.failed.toArray, [TestCase("MessageTest.DefaultConstructor")]);
175 }
176 
177 @("shall report the found test cases")
178 unittest {
179     GatherTestCase app;
180 
181     GtestParser parser;
182     testData3.each!(a => parser.process(a, app));
183 
184     shouldEqual(app.found.toArray.sort, [
185             TestCase("Comp.A", ""), TestCase("Comp.B", ""), TestCase("Comp.C",
186                 ""), TestCase("Comp.D", ""), TestCase("Comp.E", ""),
187             ]);
188 }
189 
190 @("shall report the failed test cases")
191 unittest {
192     GatherTestCase app;
193 
194     GtestParser parser;
195     testData4.each!(a => parser.process(a, app));
196 
197     shouldEqual(app.failed.toArray.sort, [
198             TestCase("Foo.A", ""), TestCase("Foo.B", ""), TestCase("Foo.C",
199                 ""), TestCase("Foo.D", ""), TestCase("Foo.E", ""),
200             ]);
201 }
202 
203 @("shall report the failed test cases")
204 unittest {
205     GatherTestCase app;
206 
207     GtestParser parser;
208     testData5.each!(a => parser.process(a, app));
209 
210     shouldEqual(app.failed.toArray.sort, [TestCase("FooTest.ShouldFail")]);
211 }
212 
213 @("shall report the failed test cases even though there are junk in the output")
214 unittest {
215     GatherTestCase app;
216 
217     GtestParser parser;
218     testData2.each!(a => parser.process(a, app));
219 
220     // dfmt off
221     auto expected = [
222 TestCase(`AddFailureAtTest.MessageContainsSpecifiedFileAndLineNumber`),
223 TestCase(`ExpectFailureTest.ExpectFatalFailureOnAllThreads`),
224 TestCase(`ExpectFailureTest.ExpectFatalFailure`),
225 TestCase(`ExpectFailureTest.ExpectNonFatalFailureOnAllThreads`),
226 TestCase(`ExpectFailureTest.ExpectNonFatalFailure`),
227 TestCase(`ExpectFatalFailureTest.FailsWhenStatementReturns`),
228 TestCase(`ExpectFatalFailureTest.FailsWhenStatementThrows`),
229 TestCase(`ExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures`),
230 TestCase(`ExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure`),
231 TestCase(`ExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure`),
232 TestCase(`ExpectNonfatalFailureTest.FailsWhenStatementReturns`),
233 TestCase(`ExpectNonfatalFailureTest.FailsWhenStatementThrows`),
234 TestCase(`ExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures`),
235 TestCase(`ExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure`),
236 TestCase(`ExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure`),
237 TestCase(`MixedUpTestCaseTest.ThisShouldFailToo`),
238 TestCase(`MixedUpTestCaseTest.ThisShouldFail`),
239 TestCase(`MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail`),
240 TestCase(`TEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail`),
241 TestCase(`TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail`),
242 TestCase(`ExpectFailureWithThreadsTest.ExpectFatalFailure`),
243 TestCase(`ExpectFailureWithThreadsTest.ExpectNonFatalFailure`),
244 TestCase(`FatalFailureInFixtureConstructorTest.FailureInConstructor`),
245 TestCase(`FatalFailureInSetUpTest.FailureInSetUp`),
246 TestCase(`FatalFailureTest.FatalFailureInNestedSubroutine`),
247 TestCase(`FatalFailureTest.FatalFailureInSubroutine`),
248 TestCase(`FatalFailureTest.NonfatalFailureInSubroutine`),
249 TestCase(`LoggingTest.InterleavingLoggingAndAssertions`),
250 TestCase(`NonFatalFailureInFixtureConstructorTest.FailureInConstructor`),
251 TestCase(`NonFatalFailureInSetUpTest.FailureInSetUp`),
252 TestCase(`NonfatalFailureTest.DiffForLongStrings`),
253 TestCase(`NonfatalFailureTest.EscapesStringOperands`),
254 TestCase(`PrintingFailingParams/FailingParamTest.Fails`),
255 TestCase(`PrintingStrings/ParamTest.Failure`),
256 TestCase(`SCOPED_TRACETest.CanBeNested`),
257 TestCase(`SCOPED_TRACETest.CanBeRepeated`),
258 TestCase(`SCOPED_TRACETest.ObeysScopes`),
259 TestCase(`SCOPED_TRACETest.WorksConcurrently`),
260 TestCase(`SCOPED_TRACETest.WorksInLoop`),
261 TestCase(`SCOPED_TRACETest.WorksInSubroutine`),
262 TestCase(`ScopedFakeTestPartResultReporterTest.InterceptOnlyCurrentThread`),
263 TestCase(`TypedTest`),
264 TestCase(`Unsigned/TypedTestP`),
265             ];
266     // dfmt on
267 
268     foreach (v; expected) {
269         v.shouldBeIn(app.failed.toArray);
270     }
271 
272     shouldEqual(app.failed.length, expected.length);
273 }
274 
275 @("shall report the last test case before the crash (variant 1)")
276 unittest {
277     GatherTestCase app;
278 
279     GtestParser parser;
280     testData6.each!(a => parser.process(a, app));
281 
282     auto expected = [TestCase(`Test.segfault`), TestCase(`Test.next`)];
283 
284     foreach (v; expected) {
285         v.shouldBeIn(app.failed.toArray);
286     }
287 
288     shouldEqual(app.failed.length, expected.length);
289 }
290 
291 @("shall report the last test case before the crash (variant 2)")
292 unittest {
293     GatherTestCase app;
294 
295     GtestParser parser;
296     testData7.each!(a => parser.process(a, app));
297     parser.finalize(app);
298 
299     auto expected = [TestCase(`Test.segfault1`), TestCase(`Test.segfault2`)];
300 
301     foreach (v; expected) {
302         v.shouldBeIn(app.failed.toArray);
303     }
304 
305     shouldEqual(app.failed.length, expected.length);
306 }
307 
308 version (unittest) {
309     // dfmt off
310     string[] testData1() {
311         // dfmt off
312         return [
313 "Running main() from gtest_main.cc",
314 "[==========] Running 17 tests from 1 test case.",
315 "[----------] Global test environment set-up.",
316 "[----------] 17 tests from MessageTest",
317 "[ RUN      ] MessageTest.DefaultConstructor",
318 "./googletest/test/gtest-message_test.cc:48: Failure",
319 "Expected equality of these values:",
320 "  true",
321 "  false",
322 "[  FAILED  ] MessageTest.DefaultConstructor (0 ms)",
323 "[ RUN      ] MessageTest.CopyConstructor",
324 "[       OK ] MessageTest.CopyConstructor (0 ms)",
325 "[ RUN      ] MessageTest.ConstructsFromCString",
326 "[       OK ] MessageTest.ConstructsFromCString (0 ms)",
327 "[----------] 3 tests from MessageTest (0 ms total)",
328 "",
329 "[----------] Global test environment tear-down",
330 "[==========] 3 tests from 1 test case ran. (0 ms total)",
331 "[  PASSED  ] 2 tests.",
332 "[  FAILED  ] 1 test, listed below:",
333 "[  FAILED  ] MessageTest.DefaultConstructor",
334 "",
335 " 1 FAILED TEST",
336         ];
337         // dfmt on
338 }
339 
340 // Example data from the "wild" that should still parse
341 string[] testData2() {
342     // dfmt off
343         return [
344 `-[==========] Running 66 tests from 29 test cases.`,
345 `-[----------] Global test environment set-up.`,
346 `+ull)m[==========] Running 66 tests from 29 test cases.`,
347 `+ull)m[----------] Global test environment set-up.`,
348 ` FooEnvironment::SetUp() called.`,
349 ` BarEnvironment::SetUp() called.`,
350 `-[----------] 1 test from ADeathTest`,
351 `-[ RUN      ] ADeathTest.ShouldRunFirst`,
352 `-[       OK ] ADeathTest.ShouldRunFirst`,
353 `-[----------] 1 test from ATypedDeathTest/0, where TypeParam = int`,
354 `-[ RUN      ] ATypedDeathTest/0.ShouldRunFirst`,
355 `-[       OK ] ATypedDeathTest/0.ShouldRunFirst`,
356 `-[----------] 1 test from ATypedDeathTest/1, where TypeParam = double`,
357 `-[ RUN      ] ATypedDeathTest/1.ShouldRunFirst`,
358 `-[       OK ] ATypedDeathTest/1.ShouldRunFirst`,
359 `-[----------] 1 test from My/ATypeParamDeathTest/0, where TypeParam = int`,
360 `-[ RUN      ] My/ATypeParamDeathTest/0.ShouldRunFirst`,
361 `-[       OK ] My/ATypeParamDeathTest/0.ShouldRunFirst`,
362 `-[----------] 1 test from My/ATypeParamDeathTest/1, where TypeParam = double`,
363 `-[ RUN      ] My/ATypeParamDeathTest/1.ShouldRunFirst`,
364 `-[       OK ] My/ATypeParamDeathTest/1.ShouldRunFirst`,
365 `-[----------] 2 tests from PassingTest`,
366 `-[ RUN      ] PassingTest.PassingTest1`,
367 `-[       OK ] PassingTest.PassingTest1`,
368 `-[ RUN      ] PassingTest.PassingTest2`,
369 `-[       OK ] PassingTest.PassingTest2`,
370 `-[----------] 2 tests from NonfatalFailureTest`,
371 `-[ RUN      ] NonfatalFailureTest.EscapesStringOperands`,
372 `+ull)m[----------] 1 test from ADeathTest`,
373 `+ull)m[ RUN      ] ADeathTest.ShouldRunFirst`,
374 `+ull)m[       OK ] ADeathTest.ShouldRunFirst`,
375 `+ull)m[----------] 1 test from ATypedDeathTest/0, where TypeParam = int`,
376 `+ull)m[ RUN      ] ATypedDeathTest/0.ShouldRunFirst`,
377 `+ull)m[       OK ] ATypedDeathTest/0.ShouldRunFirst`,
378 `+ull)m[----------] 1 test from ATypedDeathTest/1, where TypeParam = double`,
379 `+ull)m[ RUN      ] ATypedDeathTest/1.ShouldRunFirst`,
380 `+ull)m[       OK ] ATypedDeathTest/1.ShouldRunFirst`,
381 `+ull)m[----------] 1 test from My/ATypeParamDeathTest/0, where TypeParam = int`,
382 `+ull)m[ RUN      ] My/ATypeParamDeathTest/0.ShouldRunFirst`,
383 `+ull)m[       OK ] My/ATypeParamDeathTest/0.ShouldRunFirst`,
384 `+ull)m[----------] 1 test from My/ATypeParamDeathTest/1, where TypeParam = double`,
385 `+ull)m[ RUN      ] My/ATypeParamDeathTest/1.ShouldRunFirst`,
386 `+ull)m[       OK ] My/ATypeParamDeathTest/1.ShouldRunFirst`,
387 `+ull)m[----------] 2 tests from PassingTest`,
388 `+ull)m[ RUN      ] PassingTest.PassingTest1`,
389 `+ull)m[       OK ] PassingTest.PassingTest1`,
390 `+ull)m[ RUN      ] PassingTest.PassingTest2`,
391 `+ull)m[       OK ] PassingTest.PassingTest2`,
392 `+ull)m[----------] 2 tests from NonfatalFailureTest`,
393 `+ull)m[ RUN      ] NonfatalFailureTest.EscapesStringOperands`,
394 ` gtest_output_test_.cc:#: Failure`,
395 ` Expected equality of these values:`,
396 `   kGoldenString`,
397 `@@ -47,7 +47,7 @@`,
398 ``,
399 `   actual`,
400 `     Which is: "actual \"string\""`,
401 ` [  FAILED  ] NonfatalFailureTest.EscapesStringOperands`,
402 `-[ RUN      ] NonfatalFailureTest.DiffForLongStrings`,
403 `+ull)m[ RUN      ] NonfatalFailureTest.DiffForLongStrings`,
404 ` gtest_output_test_.cc:#: Failure`,
405 ` Expected equality of these values:`,
406 `   golden_str`,
407 `@@ -59,8 +59,8 @@`,
408 ``,
409 `  Line 2`,
410 ``,
411 ` [  FAILED  ] NonfatalFailureTest.DiffForLongStrings`,
412 `-[----------] 3 tests from FatalFailureTest`,
413 `-[ RUN      ] FatalFailureTest.FatalFailureInSubroutine`,
414 `+ull)m[----------] 3 tests from FatalFailureTest`,
415 `+ull)m[ RUN      ] FatalFailureTest.FatalFailureInSubroutine`,
416 ` (expecting a failure that x should be 1)`,
417 ` gtest_output_test_.cc:#: Failure`,
418 ` Expected equality of these values:`,
419 `@@ -68,7 +68,7 @@`,
420 ``,
421 `   x`,
422 `     Which is: 2`,
423 ` [  FAILED  ] FatalFailureTest.FatalFailureInSubroutine`,
424 `-[ RUN      ] FatalFailureTest.FatalFailureInNestedSubroutine`,
425 `+ull)m[ RUN      ] FatalFailureTest.FatalFailureInNestedSubroutine`,
426 ` (expecting a failure that x should be 1)`,
427 ` gtest_output_test_.cc:#: Failure`,
428 ` Expected equality of these values:`,
429 `@@ -76,15 +76,15 @@`,
430 ``,
431 `   x`,
432 `     Which is: 2`,
433 ` [  FAILED  ] FatalFailureTest.FatalFailureInNestedSubroutine`,
434 `-[ RUN      ] FatalFailureTest.NonfatalFailureInSubroutine`,
435 `+ull)m[ RUN      ] FatalFailureTest.NonfatalFailureInSubroutine`,
436 ` (expecting a failure on false)`,
437 ` gtest_output_test_.cc:#: Failure`,
438 ` Value of: false`,
439 `   Actual: false`,
440 ` Expected: true`,
441 ` [  FAILED  ] FatalFailureTest.NonfatalFailureInSubroutine`,
442 `-[----------] 1 test from LoggingTest`,
443 `-[ RUN      ] LoggingTest.InterleavingLoggingAndAssertions`,
444 `+ull)m[----------] 1 test from LoggingTest`,
445 `+ull)m[ RUN      ] LoggingTest.InterleavingLoggingAndAssertions`,
446 ` (expecting 2 failures on (3) >= (a[i]))`,
447 ` i == 0`,
448 ` i == 1`,
449 `@@ -95,8 +95,8 @@`,
450 ``,
451 ` gtest_output_test_.cc:#: Failure`,
452 ` Expected: (3) >= (a[i]), actual: 3 vs 6`,
453 ` [  FAILED  ] LoggingTest.InterleavingLoggingAndAssertions`,
454 `-[----------] 6 tests from SCOPED_TRACETest`,
455 `-[ RUN      ] SCOPED_TRACETest.ObeysScopes`,
456 `+ull)m[----------] 6 tests from SCOPED_TRACETest`,
457 `+ull)m[ RUN      ] SCOPED_TRACETest.ObeysScopes`,
458 ` (expected to fail)`,
459 ` gtest_output_test_.cc:#: Failure`,
460 ` Failed`,
461 `@@ -110,7 +110,7 @@`,
462 ``,
463 ` Failed`,
464 ` This failure is expected, and shouldn't have a trace.`,
465 ` [  FAILED  ] SCOPED_TRACETest.ObeysScopes`,
466 `-[ RUN      ] SCOPED_TRACETest.WorksInLoop`,
467 `+ull)m[ RUN      ] SCOPED_TRACETest.WorksInLoop`,
468 ` (expected to fail)`,
469 ` gtest_output_test_.cc:#: Failure`,
470 ` Expected equality of these values:`,
471 `@@ -127,7 +127,7 @@`,
472 ``,
473 ` Google Test trace:`,
474 ` gtest_output_test_.cc:#: i = 2`,
475 ` [  FAILED  ] SCOPED_TRACETest.WorksInLoop`,
476 `-[ RUN      ] SCOPED_TRACETest.WorksInSubroutine`,
477 `+ull)m[ RUN      ] SCOPED_TRACETest.WorksInSubroutine`,
478 ` (expected to fail)`,
479 ` gtest_output_test_.cc:#: Failure`,
480 ` Expected equality of these values:`,
481 `@@ -144,7 +144,7 @@`,
482 ``,
483 ` Google Test trace:`,
484 ` gtest_output_test_.cc:#: n = 2`,
485 ` [  FAILED  ] SCOPED_TRACETest.WorksInSubroutine`,
486 `-[ RUN      ] SCOPED_TRACETest.CanBeNested`,
487 `+ull)m[ RUN      ] SCOPED_TRACETest.CanBeNested`,
488 ` (expected to fail)`,
489 ` gtest_output_test_.cc:#: Failure`,
490 ` Expected equality of these values:`,
491 `@@ -155,7 +155,7 @@`,
492 ``,
493 ` gtest_output_test_.cc:#: n = 2`,
494 ` gtest_output_test_.cc:#:`,
495 ` [  FAILED  ] SCOPED_TRACETest.CanBeNested`,
496 `-[ RUN      ] SCOPED_TRACETest.CanBeRepeated`,
497 `+ull)m[ RUN      ] SCOPED_TRACETest.CanBeRepeated`,
498 ` (expected to fail)`,
499 ` gtest_output_test_.cc:#: Failure`,
500 ` Failed`,
501 `@@ -183,7 +183,7 @@`,
502 ``,
503 ` gtest_output_test_.cc:#: B`,
504 ` gtest_output_test_.cc:#: A`,
505 ` [  FAILED  ] SCOPED_TRACETest.CanBeRepeated`,
506 `-[ RUN      ] SCOPED_TRACETest.WorksConcurrently`,
507 `+ull)m[ RUN      ] SCOPED_TRACETest.WorksConcurrently`,
508 ` (expecting 6 failures)`,
509 ` gtest_output_test_.cc:#: Failure`,
510 ` Failed`,
511 `@@ -212,8 +212,8 @@`,
512 ``,
513 ` Failed`,
514 ` Expected failure #6 (in thread A, no trace alive).`,
515 ` [  FAILED  ] SCOPED_TRACETest.WorksConcurrently`,
516 `-[----------] 1 test from NonFatalFailureInFixtureConstructorTest`,
517 `-[ RUN      ] NonFatalFailureInFixtureConstructorTest.FailureInConstructor`,
518 `+ull)m[----------] 1 test from NonFatalFailureInFixtureConstructorTest`,
519 `+ull)m[ RUN      ] NonFatalFailureInFixtureConstructorTest.FailureInConstructor`,
520 ` (expecting 5 failures)`,
521 ` gtest_output_test_.cc:#: Failure`,
522 ` Failed`,
523 `@@ -231,8 +231,8 @@`,
524 ``,
525 ` Failed`,
526 ` Expected failure #5, in the test fixture d'tor.`,
527 ` [  FAILED  ] NonFatalFailureInFixtureConstructorTest.FailureInConstructor`,
528 `-[----------] 1 test from FatalFailureInFixtureConstructorTest`,
529 `-[ RUN      ] FatalFailureInFixtureConstructorTest.FailureInConstructor`,
530 `+ull)m[----------] 1 test from FatalFailureInFixtureConstructorTest`,
531 `+ull)m[ RUN      ] FatalFailureInFixtureConstructorTest.FailureInConstructor`,
532 ` (expecting 2 failures)`,
533 ` gtest_output_test_.cc:#: Failure`,
534 ` Failed`,
535 `@@ -241,8 +241,8 @@`,
536 ``,
537 ` Failed`,
538 ` Expected failure #2, in the test fixture d'tor.`,
539 ` [  FAILED  ] FatalFailureInFixtureConstructorTest.FailureInConstructor`,
540 `-[----------] 1 test from NonFatalFailureInSetUpTest`,
541 `-[ RUN      ] NonFatalFailureInSetUpTest.FailureInSetUp`,
542 `+ull)m[----------] 1 test from NonFatalFailureInSetUpTest`,
543 `+ull)m[ RUN      ] NonFatalFailureInSetUpTest.FailureInSetUp`,
544 ` (expecting 4 failures)`,
545 ` gtest_output_test_.cc:#: Failure`,
546 ` Failed`,
547 `@@ -257,8 +257,8 @@`,
548 ``,
549 ` Failed`,
550 ` Expected failure #4, in the test fixture d'tor.`,
551 ` [  FAILED  ] NonFatalFailureInSetUpTest.FailureInSetUp`,
552 `-[----------] 1 test from FatalFailureInSetUpTest`,
553 `-[ RUN      ] FatalFailureInSetUpTest.FailureInSetUp`,
554 `+ull)m[----------] 1 test from FatalFailureInSetUpTest`,
555 `+ull)m[ RUN      ] FatalFailureInSetUpTest.FailureInSetUp`,
556 ` (expecting 3 failures)`,
557 ` gtest_output_test_.cc:#: Failure`,
558 ` Failed`,
559 `@@ -270,18 +270,18 @@`,
560 ``,
561 ` Failed`,
562 ` Expected failure #3, in the test fixture d'tor.`,
563 ` [  FAILED  ] FatalFailureInSetUpTest.FailureInSetUp`,
564 `-[----------] 1 test from AddFailureAtTest`,
565 `-[ RUN      ] AddFailureAtTest.MessageContainsSpecifiedFileAndLineNumber`,
566 `+ull)m[----------] 1 test from AddFailureAtTest`,
567 `+ull)m[ RUN      ] AddFailureAtTest.MessageContainsSpecifiedFileAndLineNumber`,
568 ` foo.cc:42: Failure`,
569 ` Failed`,
570 ` Expected failure in foo.cc`,
571 ` [  FAILED  ] AddFailureAtTest.MessageContainsSpecifiedFileAndLineNumber`,
572 `-[----------] 4 tests from MixedUpTestCaseTest`,
573 `-[ RUN      ] MixedUpTestCaseTest.FirstTestFromNamespaceFoo`,
574 `-[       OK ] MixedUpTestCaseTest.FirstTestFromNamespaceFoo`,
575 `-[ RUN      ] MixedUpTestCaseTest.SecondTestFromNamespaceFoo`,
576 `-[       OK ] MixedUpTestCaseTest.SecondTestFromNamespaceFoo`,
577 `-[ RUN      ] MixedUpTestCaseTest.ThisShouldFail`,
578 `+ull)m[----------] 4 tests from MixedUpTestCaseTest`,
579 `+ull)m[ RUN      ] MixedUpTestCaseTest.FirstTestFromNamespaceFoo`,
580 `+ull)m[       OK ] MixedUpTestCaseTest.FirstTestFromNamespaceFoo`,
581 `+ull)m[ RUN      ] MixedUpTestCaseTest.SecondTestFromNamespaceFoo`,
582 `+ull)m[       OK ] MixedUpTestCaseTest.SecondTestFromNamespaceFoo`,
583 `+ull)m[ RUN      ] MixedUpTestCaseTest.ThisShouldFail`,
584 ` gtest.cc:#: Failure`,
585 ` Failed`,
586 ` All tests in the same test case must use the same test fixture`,
587 `@@ -292,7 +292,7 @@`,
588 ``,
589 ` units and have the same name.  You should probably rename one`,
590 ` of the classes to put the tests into different test cases.`,
591 ` [  FAILED  ] MixedUpTestCaseTest.ThisShouldFail`,
592 `-[ RUN      ] MixedUpTestCaseTest.ThisShouldFailToo`,
593 `+ull)m[ RUN      ] MixedUpTestCaseTest.ThisShouldFailToo`,
594 ` gtest.cc:#: Failure`,
595 ` Failed`,
596 ` All tests in the same test case must use the same test fixture`,
597 `@@ -303,10 +303,10 @@`,
598 ``,
599 ` units and have the same name.  You should probably rename one`,
600 ` of the classes to put the tests into different test cases.`,
601 ` [  FAILED  ] MixedUpTestCaseTest.ThisShouldFailToo`,
602 `-[----------] 2 tests from MixedUpTestCaseWithSameTestNameTest`,
603 `-[ RUN      ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail`,
604 `-[       OK ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail`,
605 `-[ RUN      ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail`,
606 `+ull)m[----------] 2 tests from MixedUpTestCaseWithSameTestNameTest`,
607 `+ull)m[ RUN      ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail`,
608 `+ull)m[       OK ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail`,
609 `+ull)m[ RUN      ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail`,
610 ` gtest.cc:#: Failure`,
611 ` Failed`,
612 ` All tests in the same test case must use the same test fixture`,
613 `@@ -317,10 +317,10 @@`,
614 ``,
615 ` units and have the same name.  You should probably rename one`,
616 ` of the classes to put the tests into different test cases.`,
617 ` [  FAILED  ] MixedUpTestCaseWithSameTestNameTest.TheSecondTestWithThisNameShouldFail`,
618 `-[----------] 2 tests from TEST_F_before_TEST_in_same_test_case`,
619 `-[ RUN      ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTEST_F`,
620 `-[       OK ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTEST_F`,
621 `-[ RUN      ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail`,
622 `+ull)m[----------] 2 tests from TEST_F_before_TEST_in_same_test_case`,
623 `+ull)m[ RUN      ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTEST_F`,
624 `+ull)m[       OK ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTEST_F`,
625 `+ull)m[ RUN      ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail`,
626 ` gtest.cc:#: Failure`,
627 ` Failed`,
628 ` All tests in the same test case must use the same test fixture`,
629 `@@ -331,10 +331,10 @@`,
630 ``,
631 ` want to change the TEST to TEST_F or move it to another test`,
632 ` case.`,
633 ` [  FAILED  ] TEST_F_before_TEST_in_same_test_case.DefinedUsingTESTAndShouldFail`,
634 `-[----------] 2 tests from TEST_before_TEST_F_in_same_test_case`,
635 `-[ RUN      ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST`,
636 `-[       OK ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST`,
637 `-[ RUN      ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail`,
638 `+ull)m[----------] 2 tests from TEST_before_TEST_F_in_same_test_case`,
639 `+ull)m[ RUN      ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST`,
640 `+ull)m[       OK ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST`,
641 `+ull)m[ RUN      ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail`,
642 ` gtest.cc:#: Failure`,
643 ` Failed`,
644 ` All tests in the same test case must use the same test fixture`,
645 `@@ -345,20 +345,20 @@`,
646 ``,
647 ` want to change the TEST to TEST_F or move it to another test`,
648 ` case.`,
649 ` [  FAILED  ] TEST_before_TEST_F_in_same_test_case.DefinedUsingTEST_FAndShouldFail`,
650 `-[----------] 8 tests from ExpectNonfatalFailureTest`,
651 `-[ RUN      ] ExpectNonfatalFailureTest.CanReferenceGlobalVariables`,
652 `-[       OK ] ExpectNonfatalFailureTest.CanReferenceGlobalVariables`,
653 `-[ RUN      ] ExpectNonfatalFailureTest.CanReferenceLocalVariables`,
654 `-[       OK ] ExpectNonfatalFailureTest.CanReferenceLocalVariables`,
655 `-[ RUN      ] ExpectNonfatalFailureTest.SucceedsWhenThereIsOneNonfatalFailure`,
656 `-[       OK ] ExpectNonfatalFailureTest.SucceedsWhenThereIsOneNonfatalFailure`,
657 `-[ RUN      ] ExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure`,
658 `+ull)m[----------] 8 tests from ExpectNonfatalFailureTest`,
659 `+ull)m[ RUN      ] ExpectNonfatalFailureTest.CanReferenceGlobalVariables`,
660 `+ull)m[       OK ] ExpectNonfatalFailureTest.CanReferenceGlobalVariables`,
661 `+ull)m[ RUN      ] ExpectNonfatalFailureTest.CanReferenceLocalVariables`,
662 `+ull)m[       OK ] ExpectNonfatalFailureTest.CanReferenceLocalVariables`,
663 `+ull)m[ RUN      ] ExpectNonfatalFailureTest.SucceedsWhenThereIsOneNonfatalFailure`,
664 `+ull)m[       OK ] ExpectNonfatalFailureTest.SucceedsWhenThereIsOneNonfatalFailure`,
665 `+ull)m[ RUN      ] ExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure`,
666 ` (expecting a failure)`,
667 ` gtest.cc:#: Failure`,
668 ` Expected: 1 non-fatal failure`,
669 `   Actual: 0 failures`,
670 ` [  FAILED  ] ExpectNonfatalFailureTest.FailsWhenThereIsNoNonfatalFailure`,
671 `-[ RUN      ] ExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures`,
672 `+ull)m[ RUN      ] ExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures`,
673 ` (expecting a failure)`,
674 ` gtest.cc:#: Failure`,
675 ` Expected: 1 non-fatal failure`,
676 `@@ -372,7 +372,7 @@`,
677 ``,
678 ` Expected non-fatal failure 2.`,
679 ``,
680 ` [  FAILED  ] ExpectNonfatalFailureTest.FailsWhenThereAreTwoNonfatalFailures`,
681 `-[ RUN      ] ExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure`,
682 `+ull)m[ RUN      ] ExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure`,
683 ` (expecting a failure)`,
684 ` gtest.cc:#: Failure`,
685 ` Expected: 1 non-fatal failure`,
686 `@@ -382,32 +382,32 @@`,
687 ``,
688 ` Expected fatal failure.`,
689 ``,
690 ` [  FAILED  ] ExpectNonfatalFailureTest.FailsWhenThereIsOneFatalFailure`,
691 `-[ RUN      ] ExpectNonfatalFailureTest.FailsWhenStatementReturns`,
692 `+ull)m[ RUN      ] ExpectNonfatalFailureTest.FailsWhenStatementReturns`,
693 ` (expecting a failure)`,
694 ` gtest.cc:#: Failure`,
695 ` Expected: 1 non-fatal failure`,
696 `   Actual: 0 failures`,
697 ` [  FAILED  ] ExpectNonfatalFailureTest.FailsWhenStatementReturns`,
698 `-[ RUN      ] ExpectNonfatalFailureTest.FailsWhenStatementThrows`,
699 `+ull)m[ RUN      ] ExpectNonfatalFailureTest.FailsWhenStatementThrows`,
700 ` (expecting a failure)`,
701 ` gtest.cc:#: Failure`,
702 ` Expected: 1 non-fatal failure`,
703 `   Actual: 0 failures`,
704 ` [  FAILED  ] ExpectNonfatalFailureTest.FailsWhenStatementThrows`,
705 `-[----------] 8 tests from ExpectFatalFailureTest`,
706 `-[ RUN      ] ExpectFatalFailureTest.CanReferenceGlobalVariables`,
707 `-[       OK ] ExpectFatalFailureTest.CanReferenceGlobalVariables`,
708 `-[ RUN      ] ExpectFatalFailureTest.CanReferenceLocalStaticVariables`,
709 `-[       OK ] ExpectFatalFailureTest.CanReferenceLocalStaticVariables`,
710 `-[ RUN      ] ExpectFatalFailureTest.SucceedsWhenThereIsOneFatalFailure`,
711 `-[       OK ] ExpectFatalFailureTest.SucceedsWhenThereIsOneFatalFailure`,
712 `-[ RUN      ] ExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure`,
713 `+ull)m[----------] 8 tests from ExpectFatalFailureTest`,
714 `+ull)m[ RUN      ] ExpectFatalFailureTest.CanReferenceGlobalVariables`,
715 `+ull)m[       OK ] ExpectFatalFailureTest.CanReferenceGlobalVariables`,
716 `+ull)m[ RUN      ] ExpectFatalFailureTest.CanReferenceLocalStaticVariables`,
717 `+ull)m[       OK ] ExpectFatalFailureTest.CanReferenceLocalStaticVariables`,
718 `+ull)m[ RUN      ] ExpectFatalFailureTest.SucceedsWhenThereIsOneFatalFailure`,
719 `+ull)m[       OK ] ExpectFatalFailureTest.SucceedsWhenThereIsOneFatalFailure`,
720 `+ull)m[ RUN      ] ExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure`,
721 ` (expecting a failure)`,
722 ` gtest.cc:#: Failure`,
723 ` Expected: 1 fatal failure`,
724 `   Actual: 0 failures`,
725 ` [  FAILED  ] ExpectFatalFailureTest.FailsWhenThereIsNoFatalFailure`,
726 `-[ RUN      ] ExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures`,
727 `+ull)m[ RUN      ] ExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures`,
728 ` (expecting a failure)`,
729 ` gtest.cc:#: Failure`,
730 ` Expected: 1 fatal failure`,
731 `@@ -421,7 +421,7 @@`,
732 ``,
733 ` Expected fatal failure.`,
734 ``,
735 ` [  FAILED  ] ExpectFatalFailureTest.FailsWhenThereAreTwoFatalFailures`,
736 `-[ RUN      ] ExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure`,
737 `+ull)m[ RUN      ] ExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure`,
738 ` (expecting a failure)`,
739 ` gtest.cc:#: Failure`,
740 ` Expected: 1 fatal failure`,
741 `@@ -431,22 +431,22 @@`,
742 ``,
743 ` Expected non-fatal failure.`,
744 ``,
745 ` [  FAILED  ] ExpectFatalFailureTest.FailsWhenThereIsOneNonfatalFailure`,
746 `-[ RUN      ] ExpectFatalFailureTest.FailsWhenStatementReturns`,
747 `+ull)m[ RUN      ] ExpectFatalFailureTest.FailsWhenStatementReturns`,
748 ` (expecting a failure)`,
749 ` gtest.cc:#: Failure`,
750 ` Expected: 1 fatal failure`,
751 `   Actual: 0 failures`,
752 ` [  FAILED  ] ExpectFatalFailureTest.FailsWhenStatementReturns`,
753 `-[ RUN      ] ExpectFatalFailureTest.FailsWhenStatementThrows`,
754 `+ull)m[ RUN      ] ExpectFatalFailureTest.FailsWhenStatementThrows`,
755 ` (expecting a failure)`,
756 ` gtest.cc:#: Failure`,
757 ` Expected: 1 fatal failure`,
758 `   Actual: 0 failures`,
759 ` [  FAILED  ] ExpectFatalFailureTest.FailsWhenStatementThrows`,
760 `-[----------] 2 tests from TypedTest/0, where TypeParam = int`,
761 `-[ RUN      ] TypedTest/0.Success`,
762 `-[       OK ] TypedTest/0.Success`,
763 `-[ RUN      ] TypedTest/0.Failure`,
764 `+ull)m[----------] 2 tests from TypedTest/0, where TypeParam = int`,
765 `+ull)m[ RUN      ] TypedTest/0.Success`,
766 `+ull)m[       OK ] TypedTest/0.Success`,
767 `+ull)m[ RUN      ] TypedTest/0.Failure`,
768 ` gtest_output_test_.cc:#: Failure`,
769 ` Expected equality of these values:`,
770 `   1`,
771 `@@ -454,10 +454,10 @@`,
772 ``,
773 `     Which is: 0`,
774 ` Expected failure`,
775 ` [  FAILED  ] TypedTest/0.Failure, where TypeParam = int`,
776 `-[----------] 2 tests from Unsigned/TypedTestP/0, where TypeParam = unsigned char`,
777 `-[ RUN      ] Unsigned/TypedTestP/0.Success`,
778 `-[       OK ] Unsigned/TypedTestP/0.Success`,
779 `-[ RUN      ] Unsigned/TypedTestP/0.Failure`,
780 `+ull)m[----------] 2 tests from Unsigned/TypedTestP/0, where TypeParam = unsigned char`,
781 `+ull)m[ RUN      ] Unsigned/TypedTestP/0.Success`,
782 `+ull)m[       OK ] Unsigned/TypedTestP/0.Success`,
783 `+ull)m[ RUN      ] Unsigned/TypedTestP/0.Failure`,
784 ` gtest_output_test_.cc:#: Failure`,
785 ` Expected equality of these values:`,
786 `   1U`,
787 `@@ -466,10 +466,10 @@`,
788 ``,
789 `     Which is: '\0'`,
790 ` Expected failure`,
791 ` [  FAILED  ] Unsigned/TypedTestP/0.Failure, where TypeParam = unsigned char`,
792 `-[----------] 2 tests from Unsigned/TypedTestP/1, where TypeParam = unsigned`,
793 `-[ RUN      ] Unsigned/TypedTestP/1.Success`,
794 `-[       OK ] Unsigned/TypedTestP/1.Success`,
795 `-[ RUN      ] Unsigned/TypedTestP/1.Failure`,
796 `+ull)m[----------] 2 tests from Unsigned/TypedTestP/1, where TypeParam = unsigned`,
797 `+ull)m[ RUN      ] Unsigned/TypedTestP/1.Success`,
798 `+ull)m[       OK ] Unsigned/TypedTestP/1.Success`,
799 `+ull)m[ RUN      ] Unsigned/TypedTestP/1.Failure`,
800 ` gtest_output_test_.cc:#: Failure`,
801 ` Expected equality of these values:`,
802 `   1U`,
803 `@@ -478,8 +478,8 @@`,
804 ``,
805 `     Which is: 0`,
806 ` Expected failure`,
807 ` [  FAILED  ] Unsigned/TypedTestP/1.Failure, where TypeParam = unsigned`,
808 `-[----------] 4 tests from ExpectFailureTest`,
809 `-[ RUN      ] ExpectFailureTest.ExpectFatalFailure`,
810 `+ull)m[----------] 4 tests from ExpectFailureTest`,
811 `+ull)m[ RUN      ] ExpectFailureTest.ExpectFatalFailure`,
812 ` (expecting 1 failure)`,
813 ` gtest.cc:#: Failure`,
814 ` Expected: 1 fatal failure`,
815 `@@ -504,7 +504,7 @@`,
816 ``,
817 ` Expected fatal failure.`,
818 ``,
819 ` [  FAILED  ] ExpectFailureTest.ExpectFatalFailure`,
820 `-[ RUN      ] ExpectFailureTest.ExpectNonFatalFailure`,
821 `+ull)m[ RUN      ] ExpectFailureTest.ExpectNonFatalFailure`,
822 ` (expecting 1 failure)`,
823 ` gtest.cc:#: Failure`,
824 ` Expected: 1 non-fatal failure`,
825 `@@ -529,7 +529,7 @@`,
826 ``,
827 ` Expected non-fatal failure.`,
828 ``,
829 ` [  FAILED  ] ExpectFailureTest.ExpectNonFatalFailure`,
830 `-[ RUN      ] ExpectFailureTest.ExpectFatalFailureOnAllThreads`,
831 `+ull)m[ RUN      ] ExpectFailureTest.ExpectFatalFailureOnAllThreads`,
832 ` (expecting 1 failure)`,
833 ` gtest.cc:#: Failure`,
834 ` Expected: 1 fatal failure`,
835 `@@ -554,7 +554,7 @@`,
836 ``,
837 ` Expected fatal failure.`,
838 ``,
839 ` [  FAILED  ] ExpectFailureTest.ExpectFatalFailureOnAllThreads`,
840 `-[ RUN      ] ExpectFailureTest.ExpectNonFatalFailureOnAllThreads`,
841 `+ull)m[ RUN      ] ExpectFailureTest.ExpectNonFatalFailureOnAllThreads`,
842 ` (expecting 1 failure)`,
843 ` gtest.cc:#: Failure`,
844 ` Expected: 1 non-fatal failure`,
845 `@@ -579,8 +579,8 @@`,
846 ``,
847 ` Expected non-fatal failure.`,
848 ``,
849 ` [  FAILED  ] ExpectFailureTest.ExpectNonFatalFailureOnAllThreads`,
850 `-[----------] 2 tests from ExpectFailureWithThreadsTest`,
851 `-[ RUN      ] ExpectFailureWithThreadsTest.ExpectFatalFailure`,
852 `+ull)m[----------] 2 tests from ExpectFailureWithThreadsTest`,
853 `+ull)m[ RUN      ] ExpectFailureWithThreadsTest.ExpectFatalFailure`,
854 ` (expecting 2 failures)`,
855 ` gtest_output_test_.cc:#: Failure`,
856 ` Failed`,
857 `@@ -589,7 +589,7 @@`,
858 ``,
859 ` Expected: 1 fatal failure`,
860 `   Actual: 0 failures`,
861 ` [  FAILED  ] ExpectFailureWithThreadsTest.ExpectFatalFailure`,
862 `-[ RUN      ] ExpectFailureWithThreadsTest.ExpectNonFatalFailure`,
863 `+ull)m[ RUN      ] ExpectFailureWithThreadsTest.ExpectNonFatalFailure`,
864 ` (expecting 2 failures)`,
865 ` gtest_output_test_.cc:#: Failure`,
866 ` Failed`,
867 `@@ -598,8 +598,8 @@`,
868 ``,
869 ` Expected: 1 non-fatal failure`,
870 `   Actual: 0 failures`,
871 ` [  FAILED  ] ExpectFailureWithThreadsTest.ExpectNonFatalFailure`,
872 `-[----------] 1 test from ScopedFakeTestPartResultReporterTest`,
873 `-[ RUN      ] ScopedFakeTestPartResultReporterTest.InterceptOnlyCurrentThread`,
874 `+ull)m[----------] 1 test from ScopedFakeTestPartResultReporterTest`,
875 `+ull)m[ RUN      ] ScopedFakeTestPartResultReporterTest.InterceptOnlyCurrentThread`,
876 ` (expecting 2 failures)`,
877 ` gtest_output_test_.cc:#: Failure`,
878 ` Failed`,
879 `@@ -608,18 +608,18 @@`,
880 ``,
881 ` Failed`,
882 ` Expected non-fatal failure.`,
883 ` [  FAILED  ] ScopedFakeTestPartResultReporterTest.InterceptOnlyCurrentThread`,
884 `-[----------] 1 test from PrintingFailingParams/FailingParamTest`,
885 `-[ RUN      ] PrintingFailingParams/FailingParamTest.Fails/0`,
886 `+ull)m[----------] 1 test from PrintingFailingParams/FailingParamTest`,
887 `+ull)m[ RUN      ] PrintingFailingParams/FailingParamTest.Fails/0`,
888 ` gtest_output_test_.cc:#: Failure`,
889 ` Expected equality of these values:`,
890 `   1`,
891 `   GetParam()`,
892 `     Which is: 2`,
893 ` [  FAILED  ] PrintingFailingParams/FailingParamTest.Fails/0, where GetParam() = 2`,
894 `-[----------] 2 tests from PrintingStrings/ParamTest`,
895 `-[ RUN      ] PrintingStrings/ParamTest.Success/a`,
896 `-[       OK ] PrintingStrings/ParamTest.Success/a`,
897 `-[ RUN      ] PrintingStrings/ParamTest.Failure/a`,
898 `+ull)m[----------] 2 tests from PrintingStrings/ParamTest`,
899 `+ull)m[ RUN      ] PrintingStrings/ParamTest.Success/a`,
900 `+ull)m[       OK ] PrintingStrings/ParamTest.Success/a`,
901 `+ull)m[ RUN      ] PrintingStrings/ParamTest.Failure/a`,
902 ` gtest_output_test_.cc:#: Failure`,
903 ` Expected equality of these values:`,
904 `   "b"`,
905 `@@ -627,7 +627,7 @@`,
906 ``,
907 `     Which is: "a"`,
908 ` Expected failure`,
909 ` [  FAILED  ] PrintingStrings/ParamTest.Failure/a, where GetParam() = "a"`,
910 `-[----------] Global test environment tear-down`,
911 `+ull)m[----------] Global test environment tear-down`,
912 ` BarEnvironment::TearDown() called.`,
913 ` gtest_output_test_.cc:#: Failure`,
914 ` Failed`,
915 `@@ -636,8 +636,8 @@`,
916 ``,
917 ` gtest_output_test_.cc:#: Failure`,
918 ` Failed`,
919 ` Expected fatal failure.`,
920 `+ull)m[==========] 66 tests from 29 test cases ran.`,
921 `+ull)m[  PASSED  ] 22 tests.`,
922 ` [  FAILED  ] 44 tests, listed below:`,
923 ` [  FAILED  ] NonfatalFailureTest.EscapesStringOperands`,
924 ` [  FAILED  ] NonfatalFailureTest.DiffForLongStrings`,
925         ];
926         // dfmt on
927 }
928 
929 string[] testData3() {
930     // this contains a little fuzzy data that the parser should be able to
931     // handle. this is what typically can happen when running tets from via
932     // a makefile.
933     // dfmt off
934         return [
935 `Running main() from gtest_main.cc`,
936 `[==========] Running 4 tests from 1 test case.`,
937 `[----------] Global test environment set-up.`,
938 `[----------] 4 tests from MessageTest`,
939 `[ RUN      ] Comp.A`,
940 `[       OK ] Comp.A (0 ms)`,
941 `[ RUN      ] Comp.B`,
942 `[       OK ] Comp.B (0 ms) [ RUN      ] Comp.C`,
943 `[       OK ] Comp.C (0 ms)`,
944 `[ RUN      ] Comp.D`,
945 `[       OK ] Comp.D (0 ms)`,
946 `[ RUN      ] Comp.E/a[       OK ] Comp.E/a (0 ms)[ RUN      ] Comp.E/b[       OK ] Comp.E/b (0 ms)`,
947 `[----------] 4 tests from Comp (0 ms total)`,
948 ``,
949 `[----------] Global test environment tear-down`,
950 `[==========] 4 tests from 1 test case ran. (0 ms total)`,
951 `[  PASSED  ] 4 tests.`,
952         ];
953         // dfmt on
954 }
955 
956 string[] testData4() {
957     // dfmt off
958         return [
959 "Running main() from gtest_main.cc",
960 "[==========] Running 17 tests from 1 test case.",
961 "[----------] Global test environment set-up.",
962 "[----------] 17 tests from MessageTest",
963 "[ RUN      ] Foo.A",
964 "[ FAILED   ] Foo.A (0 ms)[ RUN      ] Foo.B[ FAILED   ] Foo.B (0 ms)[ RUN      ] Foo.C[ FAILED   ] Foo.C (0 ms)",
965 "[ RUN      ] Foo.D[ FAILED   ] Foo.D (0 ms)[ RUN      ] Foo.E",
966 "[ FAILED   ] Foo.E (0 ms)",
967 "[----------] 3 tests from MessageTest (0 ms total)",
968         ];
969         // dfmt on
970 }
971 
972 string[] testData5() {
973     // dfmt off
974         return [
975 "35: [==========] Running 13 tests from 3 test cases.",
976 "35: [----------] Global test environment set-up.",
977 "35: [----------] 1 test from BarDeathTest",
978 "35: [ RUN      ] BarDeathTest.ThreadSafeAndFast",
979 "35: [       OK ] BarDeathTest.ThreadSafeAndFast (436 ms)",
980 "35: [----------] 1 test from BarDeathTest (436 ms total)",
981 "35: [----------] 10 tests from MyParamSequence/MyParamTest",
982 "35: [ RUN      ] MyParamSequence/MyParamTest.ShouldPass/0",
983 "35: [       OK ] MyParamSequence/MyParamTest.ShouldPass/0 (0 ms)",
984 "35: [ RUN      ] MyParamSequence/MyParamTest.ShouldPass/1",
985 "35: [       OK ] MyParamSequence/MyParamTest.ShouldPass/1 (0 ms)",
986 "35: [----------] 2  tests from MyParamSequence/MyParamTest (0 ms total)",
987 "35: ",
988 "35: [----------] 2 tests from FooTest",
989 "35: [ RUN      ] FooTest.ShouldFail",
990 "35: /home/joker/src/cpp/googletest/googletest/test/gtest_repeat_test.cc:96: Failure",
991 "35: Expected equality of these values:",
992 "35:   0",
993 "35:   1",
994 "35: Expected failure.",
995 "35: [  FAILED  ] FooTest.ShouldFail (0 ms)",
996 "35: [ RUN      ] FooTest.ShouldPass",
997 "35: [       OK ] FooTest.ShouldPass (0 ms)",
998 "35: [----------] 2 tests from FooTest (0 ms total)",
999 "35: [----------] Global test environment tear-down",
1000 "35: [==========] 13 tests from 3 test cases ran. (436 ms total)",
1001 "35: [  PASSED  ] 12 tests.",
1002 "35: [  FAILED  ] 1 test, listed below:",
1003 "35: [  FAILED  ] FooTest.ShouldFail",
1004         ];
1005         // dfmt on
1006 }
1007 
1008 // A binary segfaults while it is running a test
1009 string[] testData6() {
1010     // dfmt off
1011         return [
1012 "Running main() from gtest_main.cc",
1013 "[==========] Running 17 tests from 1 test case.",
1014 "[----------] Global test environment set-up.",
1015 "[----------] 17 tests from MessageTest",
1016 "[ RUN      ] Test.segfault",
1017 "junk",
1018 "Running main() from gtest_main.cc",
1019 "[==========] Running 17 tests from 1 test case.",
1020 "[----------] Global test environment set-up.",
1021 "[----------] 17 tests from MessageTest",
1022 "[ RUN      ] Test.next",
1023 "[  FAILED  ] Test.next (0 ms)",
1024         ];
1025         // dfmt on
1026 }
1027 
1028 string[] testData7() {
1029     // dfmt off
1030         return [
1031 "Running main() from gtest_main.cc",
1032 "[==========] Running 17 tests from 1 test case.",
1033 "[----------] Global test environment set-up.",
1034 "[----------] 17 tests from MessageTest",
1035 "[ RUN      ] Test.segfault1",
1036 "junk",
1037 "Running main() from gtest_main.cc",
1038 "[==========] Running 17 tests from 1 test case.",
1039 "[----------] Global test environment set-up.",
1040 "[----------] 17 tests from MessageTest",
1041 "[ RUN      ] Test.segfault2",
1042         ];
1043         // dfmt on
1044 }
1045 }