From 94f999b681ea4ced1cc27b29e0db77d72554ecf9 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Mon, 8 Apr 2013 18:02:05 -0700 Subject: [PATCH] Make gtest output more silent, ninja issue #528. This is just a proof-of-concept. The terminal printing logic should be extracted from src/build.cc and then reused here. --- configure.py | 4 +--- src/ninja_test.cc | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 src/ninja_test.cc diff --git a/configure.py b/configure.py index 10c6994..3ea91f0 100755 --- a/configure.py +++ b/configure.py @@ -331,9 +331,6 @@ if options.with_gtest: objs += n.build(built('gtest-all' + objext), 'cxx', os.path.join(path, 'src', 'gtest-all.cc'), variables=[('cflags', gtest_cflags)]) - objs += n.build(built('gtest_main' + objext), 'cxx', - os.path.join(path, 'src', 'gtest_main.cc'), - variables=[('cflags', gtest_cflags)]) test_cflags.append('-I%s' % os.path.join(path, 'include')) else: @@ -353,6 +350,7 @@ for name in ['build_log_test', 'graph_test', 'lexer_test', 'manifest_parser_test', + 'ninja_test', 'state_test', 'subprocess_test', 'test', diff --git a/src/ninja_test.cc b/src/ninja_test.cc new file mode 100644 index 0000000..0e0f882 --- /dev/null +++ b/src/ninja_test.cc @@ -0,0 +1,54 @@ +#include "gtest/gtest.h" + +/// A test result printer that's less wordy than gtest's default. +class LaconicPrinter : public testing::EmptyTestEventListener { + public: + LaconicPrinter() : have_blank_line_(false), smart_terminal_(true) {} + + virtual void OnTestStart(const testing::TestInfo& test_info) { + printf("\r%s.%s starting.", test_info.test_case_name(), test_info.name()); + printf("\x1B[K"); // Clear to end of line. + fflush(stdout); + have_blank_line_ = false; + } + + virtual void OnTestPartResult( + const testing::TestPartResult& test_part_result) { + if (!test_part_result.failed()) + return; + if (!have_blank_line_ && smart_terminal_) + printf("\n"); + printf("*** Failure in %s:%d\n%s\n", + test_part_result.file_name(), + test_part_result.line_number(), + test_part_result.summary()); + have_blank_line_ = true; + } + + virtual void OnTestEnd(const testing::TestInfo& test_info) { + printf("\r%s.%s ending.", test_info.test_case_name(), test_info.name()); + printf("\x1B[K"); // Clear to end of line. + fflush(stdout); + have_blank_line_ = false; + } + + virtual void OnTestProgramEnd(const testing::UnitTest& unit_test) { + if (!have_blank_line_ && smart_terminal_) + printf("\n"); + } + + private: + bool have_blank_line_; + bool smart_terminal_; +}; + +int main(int argc, char **argv) { + testing::InitGoogleTest(&argc, argv); + + testing::TestEventListeners& listeners = + testing::UnitTest::GetInstance()->listeners(); + delete listeners.Release(listeners.default_result_printer()); + listeners.Append(new LaconicPrinter); + + return RUN_ALL_TESTS(); +} -- 2.7.4