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