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