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