// Copyright 2013 Google Inc. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include #include #include "gtest/gtest.h" #include "line_printer.h" string StringPrintf(const char* format, ...) { const int N = 1024; char buf[N]; va_list ap; va_start(ap, format); vsnprintf(buf, N, format, ap); va_end(ap); return buf; } /// A test result printer that's less wordy than gtest's default. struct LaconicPrinter : public testing::EmptyTestEventListener { LaconicPrinter() : tests_started_(0), test_count_(0), iteration_(0) {} virtual void OnTestProgramStart(const testing::UnitTest& unit_test) { test_count_ = unit_test.test_to_run_count(); } virtual void OnTestIterationStart(const testing::UnitTest& test_info, int iteration) { tests_started_ = 0; iteration_ = iteration; } virtual void OnTestStart(const testing::TestInfo& test_info) { ++tests_started_; printer_.Print( StringPrintf("[%d/%d%s] %s.%s", tests_started_, test_count_, iteration_ ? StringPrintf(" iter %d", iteration_).c_str() : "", test_info.test_case_name(), test_info.name()), LinePrinter::ELIDE); } virtual void OnTestPartResult( const testing::TestPartResult& test_part_result) { if (!test_part_result.failed()) return; printer_.PrintOnNewLine(StringPrintf( "*** Failure in %s:%d\n%s\n", test_part_result.file_name(), test_part_result.line_number(), test_part_result.summary())); } virtual void OnTestProgramEnd(const testing::UnitTest& unit_test) { printer_.PrintOnNewLine(unit_test.Passed() ? "passed\n" : "failed\n"); } private: LinePrinter printer_; int tests_started_; int test_count_; int iteration_; }; 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(); }