|  | // Copyright 2018 The Fuchsia Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | // Note this file may be used for multiple guest integration test binaries. Do not add any logic | 
|  | // to this file that is specific to any one test binary or suite. | 
|  |  | 
|  | #include <gtest/gtest.h> | 
|  |  | 
|  | #include "logger.h" | 
|  | #include "src/lib/fxl/test/test_settings.h" | 
|  |  | 
|  | // This test event listener dumps the guest's serial logs when a test fails. | 
|  | class LoggerOutputListener : public ::testing::EmptyTestEventListener { | 
|  | void OnTestEnd(const ::testing::TestInfo& info) override { | 
|  | if (!info.result()->Failed()) { | 
|  | return; | 
|  | } | 
|  | std::cout << "[----------] Begin guest output\n"; | 
|  | std::cout << Logger::Get().Buffer(); | 
|  | std::cout << "\n[----------] End guest output\n"; | 
|  | std::cout.flush(); | 
|  | } | 
|  | }; | 
|  |  | 
|  | int main(int argc, char** argv) { | 
|  | if (!fxl::SetTestSettings(argc, argv)) { | 
|  | return EXIT_FAILURE; | 
|  | } | 
|  |  | 
|  | // Switch to line buffering of stdout/stderr, so that we don't lose | 
|  | // log lines if a test hangs. | 
|  | // | 
|  | // TODO(IN-1446): Solve this globally for everyone, not just for this | 
|  | // test suite. | 
|  | std::setvbuf(stdout, nullptr, _IOLBF, BUFSIZ); | 
|  | std::setvbuf(stderr, nullptr, _IOLBF, BUFSIZ); | 
|  |  | 
|  | LoggerOutputListener listener; | 
|  |  | 
|  | testing::InitGoogleTest(&argc, argv); | 
|  | testing::UnitTest::GetInstance()->listeners().Append(&listener); | 
|  | int status = RUN_ALL_TESTS(); | 
|  | testing::UnitTest::GetInstance()->listeners().Release(&listener); | 
|  |  | 
|  | return status; | 
|  | } |